2022-12-15 15:20:09 +00:00
|
|
|
// /***************************************************************************
|
|
|
|
|
// Aaru Data Preservation Suite
|
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
|
//
|
|
|
|
|
// Filename : AudioVideo.cs
|
|
|
|
|
// Author(s) : Natalia Portillo <claunia@claunia.com>
|
|
|
|
|
//
|
|
|
|
|
// Component : Metadata.
|
|
|
|
|
//
|
|
|
|
|
// --[ Description ] ----------------------------------------------------------
|
|
|
|
|
//
|
|
|
|
|
// Defines format for metadata.
|
|
|
|
|
//
|
|
|
|
|
// --[ License ] --------------------------------------------------------------
|
|
|
|
|
//
|
|
|
|
|
// Permission is hereby granted, free of charge, to any person obtaining a
|
|
|
|
|
// copy of this software and associated documentation files (the
|
|
|
|
|
// "Software"), to deal in the Software without restriction, including
|
|
|
|
|
// without limitation the rights to use, copy, modify, merge, publish,
|
|
|
|
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
|
|
|
|
// permit persons to whom the Software is furnished to do so, subject to
|
|
|
|
|
// the following conditions:
|
|
|
|
|
//
|
|
|
|
|
// The above copyright notice and this permission notice shall be included
|
|
|
|
|
// in all copies or substantial portions of the Software.
|
|
|
|
|
//
|
|
|
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
|
|
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
|
|
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
|
|
|
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
|
|
|
|
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
|
|
|
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
|
|
|
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
|
|
|
//
|
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
|
// Copyright © 2011-2023 Natalia Portillo
|
|
|
|
|
// ****************************************************************************/
|
|
|
|
|
|
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Diagnostics.CodeAnalysis;
|
|
|
|
|
using System.Text.Json.Serialization;
|
2022-12-16 01:16:41 +00:00
|
|
|
using Schemas;
|
2022-12-15 15:20:09 +00:00
|
|
|
|
|
|
|
|
// ReSharper disable UnusedMember.Global
|
|
|
|
|
// ReSharper disable ClassNeverInstantiated.Global
|
|
|
|
|
|
|
|
|
|
namespace Aaru.CommonTypes.AaruMetadata;
|
|
|
|
|
|
|
|
|
|
public class AudioTrack
|
|
|
|
|
{
|
|
|
|
|
public List<Language> Languages { get; set; }
|
|
|
|
|
public uint Number { get; set; }
|
|
|
|
|
public string AccoustID { get; set; }
|
|
|
|
|
public string Codec { get; set; }
|
|
|
|
|
public uint Channels { get; set; }
|
|
|
|
|
public double SampleRate { get; set; }
|
|
|
|
|
public long MeanBitrate { get; set; }
|
2022-12-16 01:16:41 +00:00
|
|
|
|
|
|
|
|
[Obsolete("Will be removed in Aaru 7")]
|
|
|
|
|
public static implicit operator AudioTrack(AudioTracksType cicm)
|
|
|
|
|
{
|
|
|
|
|
if(cicm is null)
|
|
|
|
|
return null;
|
|
|
|
|
|
|
|
|
|
var trk = new AudioTrack
|
|
|
|
|
{
|
|
|
|
|
Number = cicm.TrackNumber,
|
|
|
|
|
AccoustID = cicm.AccoustID,
|
|
|
|
|
Codec = cicm.Codec,
|
|
|
|
|
Channels = cicm.Channels,
|
|
|
|
|
SampleRate = cicm.SampleRate,
|
|
|
|
|
MeanBitrate = cicm.MeanBitrate
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
if(cicm.Languages is null)
|
|
|
|
|
return trk;
|
|
|
|
|
|
|
|
|
|
trk.Languages = new List<Language>();
|
|
|
|
|
|
|
|
|
|
foreach(LanguagesTypeLanguage lng in cicm.Languages)
|
|
|
|
|
trk.Languages.Add((Language)lng);
|
|
|
|
|
|
|
|
|
|
return trk;
|
|
|
|
|
}
|
2022-12-15 15:20:09 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public class VideoTrack
|
|
|
|
|
{
|
|
|
|
|
public List<Language> Languages { get; set; }
|
|
|
|
|
public uint Number { get; set; }
|
|
|
|
|
public string Codec { get; set; }
|
|
|
|
|
public uint Horizontal { get; set; }
|
|
|
|
|
public uint Vertical { get; set; }
|
|
|
|
|
public long MeanBitrate { get; set; }
|
|
|
|
|
[JsonPropertyName("3D")]
|
|
|
|
|
public bool ThreeD { get; set; }
|
2022-12-16 01:16:41 +00:00
|
|
|
|
|
|
|
|
[Obsolete("Will be removed in Aaru 7")]
|
|
|
|
|
public static implicit operator VideoTrack(VideoTracksType cicm)
|
|
|
|
|
{
|
|
|
|
|
if(cicm is null)
|
|
|
|
|
return null;
|
|
|
|
|
|
|
|
|
|
var trk = new VideoTrack
|
|
|
|
|
{
|
|
|
|
|
Number = cicm.TrackNumber,
|
|
|
|
|
Codec = cicm.Codec,
|
|
|
|
|
Horizontal = cicm.Horizontal,
|
|
|
|
|
Vertical = cicm.Vertical,
|
|
|
|
|
MeanBitrate = cicm.MeanBitrate,
|
|
|
|
|
ThreeD = cicm.ThreeD
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
if(cicm.Languages is null)
|
|
|
|
|
return trk;
|
|
|
|
|
|
|
|
|
|
trk.Languages = new List<Language>();
|
|
|
|
|
|
|
|
|
|
foreach(LanguagesTypeLanguage lng in cicm.Languages)
|
|
|
|
|
trk.Languages.Add((Language)lng);
|
|
|
|
|
|
|
|
|
|
return trk;
|
|
|
|
|
}
|
2022-12-15 15:20:09 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public class SubtitleTrack
|
|
|
|
|
{
|
|
|
|
|
public List<Language> Languages { get; set; }
|
|
|
|
|
public uint Number { get; set; }
|
|
|
|
|
public string Codec { get; set; }
|
2022-12-16 01:16:41 +00:00
|
|
|
|
|
|
|
|
[Obsolete("Will be removed in Aaru 7")]
|
|
|
|
|
public static implicit operator SubtitleTrack(SubtitleTracksType cicm)
|
|
|
|
|
{
|
|
|
|
|
if(cicm is null)
|
|
|
|
|
return null;
|
|
|
|
|
|
|
|
|
|
var sub = new SubtitleTrack
|
|
|
|
|
{
|
|
|
|
|
Number = cicm.TrackNumber,
|
|
|
|
|
Codec = cicm.Codec
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
if(cicm.Languages is null)
|
|
|
|
|
return sub;
|
|
|
|
|
|
|
|
|
|
sub.Languages = new List<Language>();
|
|
|
|
|
|
|
|
|
|
foreach(LanguagesTypeLanguage lng in cicm.Languages)
|
|
|
|
|
sub.Languages.Add((Language)lng);
|
|
|
|
|
|
|
|
|
|
return sub;
|
|
|
|
|
}
|
2022-12-15 15:20:09 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public class Recording
|
|
|
|
|
{
|
|
|
|
|
public string Broadcaster { get; set; }
|
|
|
|
|
public string BroadcastPlatform { get; set; }
|
|
|
|
|
public SourceFormat SourceFormat { get; set; }
|
|
|
|
|
public DateTime Timestamp { get; set; }
|
|
|
|
|
public List<Software> Software { get; set; }
|
|
|
|
|
public Coordinates Coordinates { get; set; }
|
2022-12-16 01:16:41 +00:00
|
|
|
|
|
|
|
|
[Obsolete("Will be removed in Aaru 7")]
|
|
|
|
|
public static implicit operator Recording(RecordingType cicm)
|
|
|
|
|
{
|
|
|
|
|
if(cicm is null)
|
|
|
|
|
return null;
|
|
|
|
|
|
|
|
|
|
var recording = new Recording
|
|
|
|
|
{
|
|
|
|
|
Broadcaster = cicm.Broadcaster,
|
|
|
|
|
BroadcastPlatform = cicm.BroadcastPlatform,
|
|
|
|
|
SourceFormat = (SourceFormat)cicm.SourceFormat,
|
|
|
|
|
Timestamp = cicm.Timestamp,
|
|
|
|
|
Coordinates = cicm.Coordinates
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
if(cicm.Software is null)
|
|
|
|
|
return recording;
|
|
|
|
|
|
|
|
|
|
recording.Software = new List<Software>();
|
|
|
|
|
|
|
|
|
|
foreach(SoftwareType sw in cicm.Software)
|
|
|
|
|
recording.Software.Add(sw);
|
|
|
|
|
|
|
|
|
|
return recording;
|
|
|
|
|
}
|
2022-12-15 15:20:09 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public class Coordinates
|
|
|
|
|
{
|
|
|
|
|
public double Latitude { get; set; }
|
|
|
|
|
public double Longitude { get; set; }
|
2022-12-16 01:16:41 +00:00
|
|
|
|
|
|
|
|
[Obsolete("Will be removed in Aaru 7")]
|
|
|
|
|
public static implicit operator Coordinates(CoordinatesType cicm) => cicm is null ? null : new Coordinates
|
|
|
|
|
{
|
|
|
|
|
Latitude = cicm.Latitude,
|
|
|
|
|
Longitude = cicm.Longitude
|
|
|
|
|
};
|
2022-12-15 15:20:09 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[JsonConverter(typeof(JsonStringEnumMemberConverter)), SuppressMessage("ReSharper", "InconsistentNaming")]
|
|
|
|
|
public enum SourceFormat
|
|
|
|
|
{
|
|
|
|
|
[JsonPropertyName("ITU-A")]
|
|
|
|
|
ITUA, [JsonPropertyName("ITU-B")]
|
|
|
|
|
ITUB, [JsonPropertyName("ITU-C")]
|
|
|
|
|
ITUC, [JsonPropertyName("ITU-D")]
|
|
|
|
|
ITUD, [JsonPropertyName("ITU-E")]
|
|
|
|
|
ITUE, [JsonPropertyName("ITU-F")]
|
|
|
|
|
ITUF, [JsonPropertyName("ITU-G")]
|
|
|
|
|
ITUG, [JsonPropertyName("ITU-H")]
|
|
|
|
|
ITUH, [JsonPropertyName("ITU-I")]
|
|
|
|
|
ITUI, [JsonPropertyName("ITU-J")]
|
|
|
|
|
ITUJ, [JsonPropertyName("ITU-K")]
|
|
|
|
|
ITUK, [JsonPropertyName("ITU-L")]
|
|
|
|
|
ITUL, [JsonPropertyName("ITU-M")]
|
|
|
|
|
ITUM, [JsonPropertyName("ITU-N")]
|
|
|
|
|
ITUN, [JsonPropertyName("PAL-B")]
|
|
|
|
|
PALB, [JsonPropertyName("SECAM-B")]
|
|
|
|
|
SECAMB, [JsonPropertyName("PAL-D")]
|
|
|
|
|
PALD, [JsonPropertyName("SECAM-D")]
|
|
|
|
|
SECAMD, [JsonPropertyName("PAL-G")]
|
|
|
|
|
PALG, [JsonPropertyName("SECAM-G")]
|
|
|
|
|
SECAMG, [JsonPropertyName("PAL-H")]
|
|
|
|
|
PALH, [JsonPropertyName("PAL-I")]
|
|
|
|
|
PALI, [JsonPropertyName("PAL-K")]
|
|
|
|
|
PALK, [JsonPropertyName("SECAM-K")]
|
|
|
|
|
SECAMK, [JsonPropertyName("NTSC-M")]
|
|
|
|
|
NTSCM, [JsonPropertyName("PAL-N")]
|
|
|
|
|
PALN, [JsonPropertyName("PAL-M")]
|
|
|
|
|
PALM, [JsonPropertyName("SECAM-M")]
|
|
|
|
|
SECAMM, MUSE, PALplus, FM,
|
|
|
|
|
AM, COFDM, [JsonPropertyName("CAM-D")]
|
|
|
|
|
CAMD, DAB, [JsonPropertyName("DAB+")]
|
|
|
|
|
DAB1, DRM, [JsonPropertyName("DRM+")]
|
|
|
|
|
DRM1, FMeXtra, ATSC, ATSC2,
|
|
|
|
|
ATSC3, [JsonPropertyName("ATSC-M/H")]
|
|
|
|
|
ATSCMH, [JsonPropertyName("DVB-T")]
|
|
|
|
|
DVBT, [JsonPropertyName("DVB-T2")]
|
|
|
|
|
DVBT2, [JsonPropertyName("DVB-S")]
|
|
|
|
|
DVBS, [JsonPropertyName("DVB-S2")]
|
|
|
|
|
DVBS2, [JsonPropertyName("DVB-S2X")]
|
|
|
|
|
DVBS2X, [JsonPropertyName("DVB-C")]
|
|
|
|
|
DVBC, [JsonPropertyName("DVB-C2")]
|
|
|
|
|
DVBC2, [JsonPropertyName("DVB-H")]
|
|
|
|
|
DVBH, [JsonPropertyName("DVB-NGH")]
|
|
|
|
|
DVBNGH, [JsonPropertyName("DVB-SH")]
|
|
|
|
|
DVBSH, [JsonPropertyName("ISDB-T")]
|
|
|
|
|
ISDBT, [JsonPropertyName("ISDB-Tb")]
|
|
|
|
|
ISDBTb, [JsonPropertyName("ISDB-S")]
|
|
|
|
|
ISDBS, [JsonPropertyName("ISDB-C")]
|
|
|
|
|
ISDBC, [JsonPropertyName("1seg")]
|
|
|
|
|
Item1seg, DTMB, CCMB, [JsonPropertyName("T-DMB")]
|
|
|
|
|
TDMB, [JsonPropertyName("S-DMB")]
|
|
|
|
|
SDMB, IPTV, [JsonPropertyName("DVB-MT")]
|
|
|
|
|
DVBMT, [JsonPropertyName("DVB-MC")]
|
|
|
|
|
DVBMC, [JsonPropertyName("DVB-MS")]
|
|
|
|
|
DVBMS, ADR, SDR
|
|
|
|
|
}
|