Skip to content

Commit

Permalink
improved XDCAM support
Browse files Browse the repository at this point in the history
  • Loading branch information
jaskie committed Aug 1, 2018
1 parent 47ae76b commit 08e99c6
Show file tree
Hide file tree
Showing 7 changed files with 115 additions and 120 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Expand Up @@ -23,3 +23,5 @@ Release
/TAS.FFMpegUtils/x64
/TVPlay/bin
/TAS.Client.Common/*.DotSettings
/dependencies/bin
/ffmpeg/x86/bin
128 changes: 62 additions & 66 deletions TAS.Server/Media/IngestDirectory.cs
Expand Up @@ -565,75 +565,71 @@ private void _readXDCAM(XdcamClient client)
{
try
{
//var xdcamIndex = XDCAM.SerializationHelper<XDCAM.Index>.Deserialize(ReadXmlDocument("INDEX.XML", client));
//if (xdcamIndex != null)
//{
// ClearFiles();
// XdcamClipCount = xdcamIndex.clipTable.clipTable.Length;
// var xdcamAlias = XDCAM.SerializationHelper<XDCAM.Alias>.Deserialize(ReadXmlDocument("ALIAS.XML", client));
// var index = 0;
// foreach (XDCAM.Index.Clip clip in xdcamIndex.clipTable.clipTable.Where(c => c.playable))
// {
// var clipAlias = xdcamAlias?.clipTable.FirstOrDefault(a => a.clipId == clip.clipId);
// if (!(AddFile( string.Join(this.PathSeparator.ToString(), Folder, "Clip", $"{(clipAlias != null ? clipAlias.value : clip.clipId)}.MXF"), default(DateTime), new Guid(clip.umid.Substring(12))) is XDCAM.XdcamMedia newMedia))
// continue;
// newMedia.ClipNr = ++index;
// newMedia.MediaName = clip.clipId;
// newMedia.MediaType = TMediaType.Movie;
// newMedia.XdcamClip = clip;
// newMedia.XdcamAlias = clipAlias;
// newMedia.Duration = ((long)clip.dur).SMPTEFramesToTimeSpan(clip.fps);
// newMedia.DurationPlay = newMedia.Duration;
// if (clip.aspectRatio == "4:3")
// newMedia.VideoFormat = TVideoFormat.PAL;
// if (clip.aspectRatio == "16:9")
// newMedia.VideoFormat = TVideoFormat.PAL_FHA;
// }
// if (xdcamIndex.editlistTable?.editlistTable == null)
// return;
// {
// foreach (XDCAM.Index.EditList edl in xdcamIndex.editlistTable.editlistTable)
// {
// var edlAlias = xdcamAlias?.editlistTable.FirstOrDefault(a => a.editlistId == edl.editlistId);
// if (!(AddFile(string.Join(this.PathSeparator.ToString(), Folder, "Edit", $"{(edlAlias != null ? edlAlias.value : edl.editlistId)}.SMI"), default(DateTime),new Guid(edl.umid.Substring(12))) is XDCAM.XdcamMedia newMedia))
// continue;
// newMedia.MediaName = edl.editlistId;
// newMedia.MediaType = TMediaType.Movie;
// newMedia.XdcamEdl = edl;
// newMedia.XdcamAlias = edlAlias;
// newMedia.MediaType = TMediaType.Movie;
// newMedia.Duration = ((long)edl.dur).SMPTEFramesToTimeSpan(edl.fps);
// newMedia.DurationPlay = newMedia.Duration;
// if (edl.aspectRatio == "4:3")
// newMedia.VideoFormat = TVideoFormat.PAL;
// if (edl.aspectRatio == "16:9")
// newMedia.VideoFormat = TVideoFormat.PAL_FHA;
// }
// }
// }
// else // XDCAM Station internal drive
var mediaProfile =
XDCAM.SerializationHelper<XDCAM.MediaProfile>.Deserialize(ReadXmlDocument("MEDIAPRO.XML", client));
if (mediaProfile == null)
return;
ClearFiles();
XdcamClipCount = mediaProfile.Contents.Length;
var index = 0;
foreach (var material in mediaProfile.Contents)
{
var mediaProfile = XDCAM.SerializationHelper<XDCAM.MediaProfile>.Deserialize(ReadXmlDocument("MEDIAPRO.XML", client));
if (mediaProfile == null)
return;
ClearFiles();
XdcamClipCount = mediaProfile.Contents.Length;
var index = 0;
foreach (var material in mediaProfile.Contents)
if (!(AddFile(string.Join(PathSeparator.ToString(), Folder, material.uri), default(DateTime),
new Guid(material.umid.Substring(32))) is XDCAM.XdcamMedia newMedia))
continue;
newMedia.ClipNr = ++index;
newMedia.MediaName = $"{material.uri}";
newMedia.MediaType = TMediaType.Movie;
newMedia.XdcamMaterial = material;
var format = TVideoFormat.Other;
switch (material.videoType)
{
if (!(AddFile(string.Join(PathSeparator.ToString(), Folder, material.uri), default(DateTime), new Guid(material.umid.Substring(32))) is XDCAM.XdcamMedia newMedia))
continue;
newMedia.ClipNr = ++index;
newMedia.MediaName = $"{material.uri}";
newMedia.MediaType = TMediaType.Movie;
newMedia.XdcamMaterial = material;
newMedia.Duration = ((long)material.dur).SMPTEFramesToTimeSpan(material.fps);
newMedia.DurationPlay = newMedia.Duration;
if (material.aspectRatio == "4:3")
newMedia.VideoFormat = TVideoFormat.PAL;
if (material.aspectRatio == "16:9")
newMedia.VideoFormat = TVideoFormat.PAL_FHA;
case XDCAM.VideoType.Dv25:
case XDCAM.VideoType.Imx30:
case XDCAM.VideoType.Imx40:
case XDCAM.VideoType.Imx50:
switch (material.fps)
{
case XDCAM.Fps.Fps50I:
format = material.aspectRatio == XDCAM.AspectRatio.Narrow
? TVideoFormat.PAL
: TVideoFormat.PAL_FHA;
break;
case XDCAM.Fps.Fps5994I:
format = material.aspectRatio == XDCAM.AspectRatio.Narrow
? TVideoFormat.NTSC
: TVideoFormat.NTSC_FHA;
break;
}
break;
case XDCAM.VideoType.Hd1080Cbr50:
case XDCAM.VideoType.Hd1080Cbr35:
switch (material.fps)
{
case XDCAM.Fps.Fps5994I:
format = TVideoFormat.HD1080i5994;
break;
case XDCAM.Fps.Fps50I:
format = TVideoFormat.HD1080i5000;
break;
case XDCAM.Fps.Fps2997P:
format = TVideoFormat.HD1080p2997;
break;
case XDCAM.Fps.Fps5994P:
format = TVideoFormat.HD1080p5994;
break;
case XDCAM.Fps.Fps25P:
format = TVideoFormat.HD1080p2500;
break;
case XDCAM.Fps.Fps50P:
format = TVideoFormat.HD1080p5000;
break;
}
break;
}
newMedia.VideoFormat = format;
newMedia.Duration = ((long) material.dur).SMPTEFramesToTimeSpan(format);
newMedia.DurationPlay = newMedia.Duration;
}
}
catch (Exception e)
Expand Down
2 changes: 0 additions & 2 deletions TAS.Server/TAS.Server.csproj
Expand Up @@ -100,7 +100,6 @@
<Compile Include="Security\AuthenticationService.cs" />
<Compile Include="Security\Group.cs" />
<Compile Include="Security\User.cs" />
<Compile Include="XDCAM\Clip.cs" />
<Compile Include="XDCAM\EditList.cs" />
<Compile Include="XDCAM\MediaProfile.cs" />
<Compile Include="XDCAM\Meta.cs" />
Expand All @@ -109,7 +108,6 @@
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="ExportOperation.cs" />
<Compile Include="AnimatedEvent.cs" />
<Compile Include="XDCAM\Alias.cs" />
<Compile Include="XDCAM\NonRealTimeMeta.cs" />
<Compile Include="XDCAM\SerializationHelper.cs" />
<Compile Include="XDCAM\Smil.cs" />
Expand Down
30 changes: 0 additions & 30 deletions TAS.Server/XDCAM/Alias.cs

This file was deleted.

18 changes: 0 additions & 18 deletions TAS.Server/XDCAM/Clip.cs

This file was deleted.

53 changes: 50 additions & 3 deletions TAS.Server/XDCAM/MediaProfile.cs
Expand Up @@ -14,17 +14,17 @@ public class Material
[XmlAttribute]
public MaterialType type;
[XmlAttribute]
public string videoType;
public VideoType videoType;
[XmlAttribute]
public string audioType;
[XmlAttribute]
public string fps;
public Fps fps;
[XmlAttribute]
public int dur;
[XmlAttribute]
public int ch;
[XmlAttribute]
public string aspectRatio;
public AspectRatio aspectRatio;
[XmlAttribute]
public int offset;
[XmlAttribute]
Expand Down Expand Up @@ -58,4 +58,51 @@ public enum RelevantInfoType
[XmlEnum("KLV")]
Klv
}

public enum VideoType
{
[XmlEnum("DV25DATA_420")]
Dv25,
[XmlEnum("IMX30")]
Imx30,
[XmlEnum("IMX40")]
Imx40,
[XmlEnum("IMX50")]
Imx50,
[XmlEnum("MPEG2HD50CBR_1280_720_422P@HL")]
Hd720Cbr50,
[XmlEnum("MPEG2HD35_1280_720_MP@HL")]
Hd720Cbr35,
[XmlEnum("MPEG2HD50CBR_1920_1080_422P@HL")]
Hd1080Cbr50,
[XmlEnum("MPEG2HD35_1920_1080_MP@HL")]
Hd1080Cbr35
}

public enum Fps
{
[XmlEnum("50i")]
Fps50I,
[XmlEnum("59.94i")]
Fps5994I,
[XmlEnum("29.97p")]
Fps2997P,
[XmlEnum("59.94p")]
Fps5994P,
[XmlEnum("25p")]
Fps25P,
[XmlEnum("50p")]
Fps50P,
[XmlEnum("23.98p")]
Fps2398P
}

public enum AspectRatio
{
[XmlEnum("4:3")]
Narrow,
[XmlEnum("16:9")]
Wide
}

}
2 changes: 1 addition & 1 deletion TAS.Server/XDCAM/XdcamStream.cs
Expand Up @@ -46,8 +46,8 @@ public XdcamStream(XdcamMedia media, bool forWrite)
}
catch
{
_client.Disconnect();
Monitor.Exit(dir.XdcamLockObject);
_client.Disconnect();
throw;
}
}
Expand Down

0 comments on commit 08e99c6

Please sign in to comment.