mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-07-08 10:44:23 -04:00
commit
189b99df16
1
.gitignore
vendored
1
.gitignore
vendored
@ -263,3 +263,4 @@ deployment/**/pkg-dist/
|
|||||||
deployment/**/pkg-dist-tmp/
|
deployment/**/pkg-dist-tmp/
|
||||||
deployment/collect-dist/
|
deployment/collect-dist/
|
||||||
|
|
||||||
|
jellyfin_version.ini
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="..\SharedVersion.cs" Link="SharedVersion.cs" />
|
<Compile Include="..\SharedVersion.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
@ -1,105 +1,33 @@
|
|||||||
|
|
||||||
namespace BDInfo
|
namespace BDInfo
|
||||||
{
|
{
|
||||||
class BDInfoSettings
|
class BDInfoSettings
|
||||||
{
|
{
|
||||||
public static bool GenerateStreamDiagnostics
|
public static bool GenerateStreamDiagnostics => true;
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static bool EnableSSIF
|
public static bool EnableSSIF => true;
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static bool AutosaveReport
|
public static bool AutosaveReport => false;
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static bool GenerateFrameDataFile
|
public static bool GenerateFrameDataFile => false;
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static bool FilterLoopingPlaylists
|
public static bool FilterLoopingPlaylists => true;
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static bool FilterShortPlaylists
|
public static bool FilterShortPlaylists => false;
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int FilterShortPlaylistsValue
|
public static int FilterShortPlaylistsValue => 0;
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static bool UseImagePrefix
|
public static bool UseImagePrefix => false;
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static string UseImagePrefixValue
|
public static string UseImagePrefixValue => null;
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Setting this to false throws an IComparer error on some discs.
|
/// Setting this to false throws an IComparer error on some discs.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static bool KeepStreamOrder
|
public static bool KeepStreamOrder => true;
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static bool GenerateTextSummary
|
public static bool GenerateTextSummary => false;
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static string LastPath
|
public static string LastPath => string.Empty;
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return string.Empty;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
//============================================================================
|
//============================================================================
|
||||||
// BDInfo - Blu-ray Video and Audio Analysis Tool
|
// BDInfo - Blu-ray Video and Audio Analysis Tool
|
||||||
// Copyright © 2010 Cinema Squid
|
// Copyright © 2010 Cinema Squid
|
||||||
//
|
//
|
||||||
@ -22,7 +22,6 @@ using System.Collections.Generic;
|
|||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using MediaBrowser.Model.IO;
|
using MediaBrowser.Model.IO;
|
||||||
using MediaBrowser.Model.Text;
|
|
||||||
|
|
||||||
namespace BDInfo
|
namespace BDInfo
|
||||||
{
|
{
|
||||||
@ -72,8 +71,7 @@ namespace BDInfo
|
|||||||
|
|
||||||
public event OnPlaylistFileScanError PlaylistFileScanError;
|
public event OnPlaylistFileScanError PlaylistFileScanError;
|
||||||
|
|
||||||
public BDROM(
|
public BDROM(string path, IFileSystem fileSystem)
|
||||||
string path, IFileSystem fileSystem, ITextEncoding textEncoding)
|
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(path))
|
if (string.IsNullOrEmpty(path))
|
||||||
{
|
{
|
||||||
@ -164,17 +162,17 @@ namespace BDInfo
|
|||||||
if (DirectoryPLAYLIST != null)
|
if (DirectoryPLAYLIST != null)
|
||||||
{
|
{
|
||||||
FileSystemMetadata[] files = GetFiles(DirectoryPLAYLIST.FullName, ".mpls").ToArray();
|
FileSystemMetadata[] files = GetFiles(DirectoryPLAYLIST.FullName, ".mpls").ToArray();
|
||||||
foreach (FileSystemMetadata file in files)
|
foreach (var file in files)
|
||||||
{
|
{
|
||||||
PlaylistFiles.Add(
|
PlaylistFiles.Add(
|
||||||
file.Name.ToUpper(), new TSPlaylistFile(this, file, _fileSystem, textEncoding));
|
file.Name.ToUpper(), new TSPlaylistFile(this, file, _fileSystem));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (DirectorySTREAM != null)
|
if (DirectorySTREAM != null)
|
||||||
{
|
{
|
||||||
FileSystemMetadata[] files = GetFiles(DirectorySTREAM.FullName, ".m2ts").ToArray();
|
FileSystemMetadata[] files = GetFiles(DirectorySTREAM.FullName, ".m2ts").ToArray();
|
||||||
foreach (FileSystemMetadata file in files)
|
foreach (var file in files)
|
||||||
{
|
{
|
||||||
StreamFiles.Add(
|
StreamFiles.Add(
|
||||||
file.Name.ToUpper(), new TSStreamFile(file, _fileSystem));
|
file.Name.ToUpper(), new TSStreamFile(file, _fileSystem));
|
||||||
@ -184,17 +182,17 @@ namespace BDInfo
|
|||||||
if (DirectoryCLIPINF != null)
|
if (DirectoryCLIPINF != null)
|
||||||
{
|
{
|
||||||
FileSystemMetadata[] files = GetFiles(DirectoryCLIPINF.FullName, ".clpi").ToArray();
|
FileSystemMetadata[] files = GetFiles(DirectoryCLIPINF.FullName, ".clpi").ToArray();
|
||||||
foreach (FileSystemMetadata file in files)
|
foreach (var file in files)
|
||||||
{
|
{
|
||||||
StreamClipFiles.Add(
|
StreamClipFiles.Add(
|
||||||
file.Name.ToUpper(), new TSStreamClipFile(file, _fileSystem, textEncoding));
|
file.Name.ToUpper(), new TSStreamClipFile(file, _fileSystem));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (DirectorySSIF != null)
|
if (DirectorySSIF != null)
|
||||||
{
|
{
|
||||||
FileSystemMetadata[] files = GetFiles(DirectorySSIF.FullName, ".ssif").ToArray();
|
FileSystemMetadata[] files = GetFiles(DirectorySSIF.FullName, ".ssif").ToArray();
|
||||||
foreach (FileSystemMetadata file in files)
|
foreach (var file in files)
|
||||||
{
|
{
|
||||||
InterleavedFiles.Add(
|
InterleavedFiles.Add(
|
||||||
file.Name.ToUpper(), new TSInterleavedFile(file));
|
file.Name.ToUpper(), new TSInterleavedFile(file));
|
||||||
@ -214,8 +212,8 @@ namespace BDInfo
|
|||||||
|
|
||||||
public void Scan()
|
public void Scan()
|
||||||
{
|
{
|
||||||
List<TSStreamClipFile> errorStreamClipFiles = new List<TSStreamClipFile>();
|
var errorStreamClipFiles = new List<TSStreamClipFile>();
|
||||||
foreach (TSStreamClipFile streamClipFile in StreamClipFiles.Values)
|
foreach (var streamClipFile in StreamClipFiles.Values)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -239,7 +237,7 @@ namespace BDInfo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (TSStreamFile streamFile in StreamFiles.Values)
|
foreach (var streamFile in StreamFiles.Values)
|
||||||
{
|
{
|
||||||
string ssifName = Path.GetFileNameWithoutExtension(streamFile.Name) + ".SSIF";
|
string ssifName = Path.GetFileNameWithoutExtension(streamFile.Name) + ".SSIF";
|
||||||
if (InterleavedFiles.ContainsKey(ssifName))
|
if (InterleavedFiles.ContainsKey(ssifName))
|
||||||
@ -252,8 +250,8 @@ namespace BDInfo
|
|||||||
StreamFiles.Values.CopyTo(streamFiles, 0);
|
StreamFiles.Values.CopyTo(streamFiles, 0);
|
||||||
Array.Sort(streamFiles, CompareStreamFiles);
|
Array.Sort(streamFiles, CompareStreamFiles);
|
||||||
|
|
||||||
List<TSPlaylistFile> errorPlaylistFiles = new List<TSPlaylistFile>();
|
var errorPlaylistFiles = new List<TSPlaylistFile>();
|
||||||
foreach (TSPlaylistFile playlistFile in PlaylistFiles.Values)
|
foreach (var playlistFile in PlaylistFiles.Values)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -277,15 +275,15 @@ namespace BDInfo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
List<TSStreamFile> errorStreamFiles = new List<TSStreamFile>();
|
var errorStreamFiles = new List<TSStreamFile>();
|
||||||
foreach (TSStreamFile streamFile in streamFiles)
|
foreach (var streamFile in streamFiles)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
List<TSPlaylistFile> playlists = new List<TSPlaylistFile>();
|
var playlists = new List<TSPlaylistFile>();
|
||||||
foreach (TSPlaylistFile playlist in PlaylistFiles.Values)
|
foreach (var playlist in PlaylistFiles.Values)
|
||||||
{
|
{
|
||||||
foreach (TSStreamClip streamClip in playlist.StreamClips)
|
foreach (var streamClip in playlist.StreamClips)
|
||||||
{
|
{
|
||||||
if (streamClip.Name == streamFile.Name)
|
if (streamClip.Name == streamFile.Name)
|
||||||
{
|
{
|
||||||
@ -314,12 +312,12 @@ namespace BDInfo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (TSPlaylistFile playlistFile in PlaylistFiles.Values)
|
foreach (var playlistFile in PlaylistFiles.Values)
|
||||||
{
|
{
|
||||||
playlistFile.Initialize();
|
playlistFile.Initialize();
|
||||||
if (!Is50Hz)
|
if (!Is50Hz)
|
||||||
{
|
{
|
||||||
foreach (TSVideoStream videoStream in playlistFile.VideoStreams)
|
foreach (var videoStream in playlistFile.VideoStreams)
|
||||||
{
|
{
|
||||||
if (videoStream.FrameRate == TSFrameRate.FRAMERATE_25 ||
|
if (videoStream.FrameRate == TSFrameRate.FRAMERATE_25 ||
|
||||||
videoStream.FrameRate == TSFrameRate.FRAMERATE_50)
|
videoStream.FrameRate == TSFrameRate.FRAMERATE_50)
|
||||||
@ -369,7 +367,7 @@ namespace BDInfo
|
|||||||
if (dir != null)
|
if (dir != null)
|
||||||
{
|
{
|
||||||
FileSystemMetadata[] children = _fileSystem.GetDirectories(dir.FullName).ToArray();
|
FileSystemMetadata[] children = _fileSystem.GetDirectories(dir.FullName).ToArray();
|
||||||
foreach (FileSystemMetadata child in children)
|
foreach (var child in children)
|
||||||
{
|
{
|
||||||
if (string.Equals(child.Name, name, StringComparison.OrdinalIgnoreCase))
|
if (string.Equals(child.Name, name, StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
@ -378,7 +376,7 @@ namespace BDInfo
|
|||||||
}
|
}
|
||||||
if (searchDepth > 0)
|
if (searchDepth > 0)
|
||||||
{
|
{
|
||||||
foreach (FileSystemMetadata child in children)
|
foreach (var child in children)
|
||||||
{
|
{
|
||||||
GetDirectory(
|
GetDirectory(
|
||||||
name, child, searchDepth - 1);
|
name, child, searchDepth - 1);
|
||||||
@ -395,7 +393,7 @@ namespace BDInfo
|
|||||||
//if (!ExcludeDirs.Contains(directoryInfo.Name.ToUpper())) // TODO: Keep?
|
//if (!ExcludeDirs.Contains(directoryInfo.Name.ToUpper())) // TODO: Keep?
|
||||||
{
|
{
|
||||||
FileSystemMetadata[] pathFiles = _fileSystem.GetFiles(directoryInfo.FullName).ToArray();
|
FileSystemMetadata[] pathFiles = _fileSystem.GetFiles(directoryInfo.FullName).ToArray();
|
||||||
foreach (FileSystemMetadata pathFile in pathFiles)
|
foreach (var pathFile in pathFiles)
|
||||||
{
|
{
|
||||||
if (pathFile.Extension.ToUpper() == ".SSIF")
|
if (pathFile.Extension.ToUpper() == ".SSIF")
|
||||||
{
|
{
|
||||||
@ -405,7 +403,7 @@ namespace BDInfo
|
|||||||
}
|
}
|
||||||
|
|
||||||
FileSystemMetadata[] pathChildren = _fileSystem.GetDirectories(directoryInfo.FullName).ToArray();
|
FileSystemMetadata[] pathChildren = _fileSystem.GetDirectories(directoryInfo.FullName).ToArray();
|
||||||
foreach (FileSystemMetadata pathChild in pathChildren)
|
foreach (var pathChild in pathChildren)
|
||||||
{
|
{
|
||||||
size += GetDirectorySize(pathChild);
|
size += GetDirectorySize(pathChild);
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
//============================================================================
|
//============================================================================
|
||||||
// BDInfo - Blu-ray Video and Audio Analysis Tool
|
// BDInfo - Blu-ray Video and Audio Analysis Tool
|
||||||
// Copyright © 2010 Cinema Squid
|
// Copyright © 2010 Cinema Squid
|
||||||
//
|
//
|
||||||
|
@ -15,7 +15,7 @@ using System.Runtime.InteropServices;
|
|||||||
[assembly: AssemblyCulture("")]
|
[assembly: AssemblyCulture("")]
|
||||||
[assembly: NeutralResourcesLanguage("en")]
|
[assembly: NeutralResourcesLanguage("en")]
|
||||||
|
|
||||||
// Setting ComVisible to false makes the types in this assembly not visible
|
// Setting ComVisible to false makes the types in this assembly not visible
|
||||||
// to COM components. If you need to access a type in this assembly from
|
// to COM components. If you need to access a type in this assembly from
|
||||||
// COM, set the ComVisible attribute to true on that type.
|
// COM, set the ComVisible attribute to true on that type.
|
||||||
[assembly: ComVisible(false)]
|
[assembly: ComVisible(false)]
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
The source is taken from the BDRom folder of this project:
|
The source is taken from the BDRom folder of this project:
|
||||||
|
|
||||||
http://www.cinemasquid.com/blu-ray/tools/bdinfo
|
http://www.cinemasquid.com/blu-ray/tools/bdinfo
|
||||||
|
|
||||||
BDInfoSettings was taken from the FormSettings class, and changed so that the settings all return defaults.
|
BDInfoSettings was taken from the FormSettings class, and changed so that the settings all return defaults.
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
//============================================================================
|
//============================================================================
|
||||||
// BDInfo - Blu-ray Video and Audio Analysis Tool
|
// BDInfo - Blu-ray Video and Audio Analysis Tool
|
||||||
// Copyright © 2010 Cinema Squid
|
// Copyright © 2010 Cinema Squid
|
||||||
//
|
//
|
||||||
@ -24,7 +24,7 @@ namespace BDInfo
|
|||||||
{
|
{
|
||||||
public abstract class TSCodecAC3
|
public abstract class TSCodecAC3
|
||||||
{
|
{
|
||||||
private static byte[] eac3_blocks = new byte[] { 1, 2, 3, 6 };
|
private static byte[] eac3_blocks = new byte[] { 1, 2, 3, 6 };
|
||||||
|
|
||||||
public static void Scan(
|
public static void Scan(
|
||||||
TSAudioStream stream,
|
TSAudioStream stream,
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
//============================================================================
|
//============================================================================
|
||||||
// BDInfo - Blu-ray Video and Audio Analysis Tool
|
// BDInfo - Blu-ray Video and Audio Analysis Tool
|
||||||
// Copyright © 2010 Cinema Squid
|
// Copyright © 2010 Cinema Squid
|
||||||
//
|
//
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
//============================================================================
|
//============================================================================
|
||||||
// BDInfo - Blu-ray Video and Audio Analysis Tool
|
// BDInfo - Blu-ray Video and Audio Analysis Tool
|
||||||
// Copyright © 2010 Cinema Squid
|
// Copyright © 2010 Cinema Squid
|
||||||
//
|
//
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
//============================================================================
|
//============================================================================
|
||||||
// BDInfo - Blu-ray Video and Audio Analysis Tool
|
// BDInfo - Blu-ray Video and Audio Analysis Tool
|
||||||
// Copyright © 2010 Cinema Squid
|
// Copyright © 2010 Cinema Squid
|
||||||
//
|
//
|
||||||
@ -211,7 +211,7 @@ namespace BDInfo
|
|||||||
// TODO
|
// TODO
|
||||||
if (stream.CoreStream != null)
|
if (stream.CoreStream != null)
|
||||||
{
|
{
|
||||||
TSAudioStream coreStream = (TSAudioStream)stream.CoreStream;
|
var coreStream = (TSAudioStream)stream.CoreStream;
|
||||||
if (coreStream.AudioMode == TSAudioMode.Extended &&
|
if (coreStream.AudioMode == TSAudioMode.Extended &&
|
||||||
stream.ChannelCount == 5)
|
stream.ChannelCount == 5)
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
//============================================================================
|
//============================================================================
|
||||||
// BDInfo - Blu-ray Video and Audio Analysis Tool
|
// BDInfo - Blu-ray Video and Audio Analysis Tool
|
||||||
// Copyright © 2010 Cinema Squid
|
// Copyright © 2010 Cinema Squid
|
||||||
//
|
//
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
//============================================================================
|
//============================================================================
|
||||||
// BDInfo - Blu-ray Video and Audio Analysis Tool
|
// BDInfo - Blu-ray Video and Audio Analysis Tool
|
||||||
// Copyright © 2010 Cinema Squid
|
// Copyright © 2010 Cinema Squid
|
||||||
//
|
//
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
//============================================================================
|
//============================================================================
|
||||||
// BDInfo - Blu-ray Video and Audio Analysis Tool
|
// BDInfo - Blu-ray Video and Audio Analysis Tool
|
||||||
// Copyright © 2010 Cinema Squid
|
// Copyright © 2010 Cinema Squid
|
||||||
//
|
//
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
//============================================================================
|
//============================================================================
|
||||||
// BDInfo - Blu-ray Video and Audio Analysis Tool
|
// BDInfo - Blu-ray Video and Audio Analysis Tool
|
||||||
// Copyright © 2010 Cinema Squid
|
// Copyright © 2010 Cinema Squid
|
||||||
//
|
//
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
//============================================================================
|
//============================================================================
|
||||||
// BDInfo - Blu-ray Video and Audio Analysis Tool
|
// BDInfo - Blu-ray Video and Audio Analysis Tool
|
||||||
// Copyright © 2010 Cinema Squid
|
// Copyright © 2010 Cinema Squid
|
||||||
//
|
//
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
//============================================================================
|
//============================================================================
|
||||||
// BDInfo - Blu-ray Video and Audio Analysis Tool
|
// BDInfo - Blu-ray Video and Audio Analysis Tool
|
||||||
// Copyright © 2010 Cinema Squid
|
// Copyright © 2010 Cinema Squid
|
||||||
//
|
//
|
||||||
@ -17,7 +17,6 @@
|
|||||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
|
|
||||||
using System.IO;
|
|
||||||
using MediaBrowser.Model.IO;
|
using MediaBrowser.Model.IO;
|
||||||
|
|
||||||
// TODO: Do more interesting things here...
|
// TODO: Do more interesting things here...
|
||||||
|
@ -23,14 +23,12 @@ using System.Collections.Generic;
|
|||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using MediaBrowser.Model.IO;
|
using MediaBrowser.Model.IO;
|
||||||
using MediaBrowser.Model.Text;
|
|
||||||
|
|
||||||
namespace BDInfo
|
namespace BDInfo
|
||||||
{
|
{
|
||||||
public class TSPlaylistFile
|
public class TSPlaylistFile
|
||||||
{
|
{
|
||||||
private readonly IFileSystem _fileSystem;
|
private readonly IFileSystem _fileSystem;
|
||||||
private readonly ITextEncoding _textEncoding;
|
|
||||||
private FileSystemMetadata FileInfo = null;
|
private FileSystemMetadata FileInfo = null;
|
||||||
public string FileType = null;
|
public string FileType = null;
|
||||||
public bool IsInitialized = false;
|
public bool IsInitialized = false;
|
||||||
@ -65,30 +63,26 @@ namespace BDInfo
|
|||||||
public List<TSGraphicsStream> GraphicsStreams =
|
public List<TSGraphicsStream> GraphicsStreams =
|
||||||
new List<TSGraphicsStream>();
|
new List<TSGraphicsStream>();
|
||||||
|
|
||||||
public TSPlaylistFile(
|
public TSPlaylistFile(BDROM bdrom,
|
||||||
BDROM bdrom,
|
FileSystemMetadata fileInfo, IFileSystem fileSystem)
|
||||||
FileSystemMetadata fileInfo, IFileSystem fileSystem, ITextEncoding textEncoding)
|
|
||||||
{
|
{
|
||||||
BDROM = bdrom;
|
BDROM = bdrom;
|
||||||
FileInfo = fileInfo;
|
FileInfo = fileInfo;
|
||||||
_fileSystem = fileSystem;
|
_fileSystem = fileSystem;
|
||||||
_textEncoding = textEncoding;
|
|
||||||
Name = fileInfo.Name.ToUpper();
|
Name = fileInfo.Name.ToUpper();
|
||||||
}
|
}
|
||||||
|
|
||||||
public TSPlaylistFile(
|
public TSPlaylistFile(BDROM bdrom,
|
||||||
BDROM bdrom,
|
|
||||||
string name,
|
string name,
|
||||||
List<TSStreamClip> clips, IFileSystem fileSystem, ITextEncoding textEncoding)
|
List<TSStreamClip> clips, IFileSystem fileSystem)
|
||||||
{
|
{
|
||||||
BDROM = bdrom;
|
BDROM = bdrom;
|
||||||
Name = name;
|
Name = name;
|
||||||
_fileSystem = fileSystem;
|
_fileSystem = fileSystem;
|
||||||
_textEncoding = textEncoding;
|
|
||||||
IsCustom = true;
|
IsCustom = true;
|
||||||
foreach (TSStreamClip clip in clips)
|
foreach (var clip in clips)
|
||||||
{
|
{
|
||||||
TSStreamClip newClip = new TSStreamClip(
|
var newClip = new TSStreamClip(
|
||||||
clip.StreamFile, clip.StreamClipFile);
|
clip.StreamFile, clip.StreamClipFile);
|
||||||
|
|
||||||
newClip.Name = clip.Name;
|
newClip.Name = clip.Name;
|
||||||
@ -124,7 +118,7 @@ namespace BDInfo
|
|||||||
get
|
get
|
||||||
{
|
{
|
||||||
ulong size = 0;
|
ulong size = 0;
|
||||||
foreach (TSStreamClip clip in StreamClips)
|
foreach (var clip in StreamClips)
|
||||||
{
|
{
|
||||||
size += clip.InterleavedFileSize;
|
size += clip.InterleavedFileSize;
|
||||||
}
|
}
|
||||||
@ -136,7 +130,7 @@ namespace BDInfo
|
|||||||
get
|
get
|
||||||
{
|
{
|
||||||
ulong size = 0;
|
ulong size = 0;
|
||||||
foreach (TSStreamClip clip in StreamClips)
|
foreach (var clip in StreamClips)
|
||||||
{
|
{
|
||||||
size += clip.FileSize;
|
size += clip.FileSize;
|
||||||
}
|
}
|
||||||
@ -148,7 +142,7 @@ namespace BDInfo
|
|||||||
get
|
get
|
||||||
{
|
{
|
||||||
double length = 0;
|
double length = 0;
|
||||||
foreach (TSStreamClip clip in StreamClips)
|
foreach (var clip in StreamClips)
|
||||||
{
|
{
|
||||||
if (clip.AngleIndex == 0)
|
if (clip.AngleIndex == 0)
|
||||||
{
|
{
|
||||||
@ -164,7 +158,7 @@ namespace BDInfo
|
|||||||
get
|
get
|
||||||
{
|
{
|
||||||
double length = 0;
|
double length = 0;
|
||||||
foreach (TSStreamClip clip in StreamClips)
|
foreach (var clip in StreamClips)
|
||||||
{
|
{
|
||||||
length += clip.Length;
|
length += clip.Length;
|
||||||
}
|
}
|
||||||
@ -177,7 +171,7 @@ namespace BDInfo
|
|||||||
get
|
get
|
||||||
{
|
{
|
||||||
ulong size = 0;
|
ulong size = 0;
|
||||||
foreach (TSStreamClip clip in StreamClips)
|
foreach (var clip in StreamClips)
|
||||||
{
|
{
|
||||||
if (clip.AngleIndex == 0)
|
if (clip.AngleIndex == 0)
|
||||||
{
|
{
|
||||||
@ -193,7 +187,7 @@ namespace BDInfo
|
|||||||
get
|
get
|
||||||
{
|
{
|
||||||
ulong size = 0;
|
ulong size = 0;
|
||||||
foreach (TSStreamClip clip in StreamClips)
|
foreach (var clip in StreamClips)
|
||||||
{
|
{
|
||||||
size += clip.PacketSize;
|
size += clip.PacketSize;
|
||||||
}
|
}
|
||||||
@ -264,7 +258,7 @@ namespace BDInfo
|
|||||||
int itemCount = ReadInt16(data, ref pos);
|
int itemCount = ReadInt16(data, ref pos);
|
||||||
int subitemCount = ReadInt16(data, ref pos);
|
int subitemCount = ReadInt16(data, ref pos);
|
||||||
|
|
||||||
List<TSStreamClip> chapterClips = new List<TSStreamClip>();
|
var chapterClips = new List<TSStreamClip>();
|
||||||
for (int itemIndex = 0; itemIndex < itemCount; itemIndex++)
|
for (int itemIndex = 0; itemIndex < itemCount; itemIndex++)
|
||||||
{
|
{
|
||||||
int itemStart = pos;
|
int itemStart = pos;
|
||||||
@ -311,7 +305,7 @@ namespace BDInfo
|
|||||||
if (outTime < 0) outTime &= 0x7FFFFFFF;
|
if (outTime < 0) outTime &= 0x7FFFFFFF;
|
||||||
double timeOut = (double)outTime / 45000;
|
double timeOut = (double)outTime / 45000;
|
||||||
|
|
||||||
TSStreamClip streamClip = new TSStreamClip(
|
var streamClip = new TSStreamClip(
|
||||||
streamFile, streamClipFile);
|
streamFile, streamClipFile);
|
||||||
|
|
||||||
streamClip.Name = streamFileName; //TODO
|
streamClip.Name = streamFileName; //TODO
|
||||||
@ -362,7 +356,7 @@ namespace BDInfo
|
|||||||
FileInfo.Name, angleClipFileName));
|
FileInfo.Name, angleClipFileName));
|
||||||
}
|
}
|
||||||
|
|
||||||
TSStreamClip angleClip =
|
var angleClip =
|
||||||
new TSStreamClip(angleFile, angleClipFile);
|
new TSStreamClip(angleFile, angleClipFile);
|
||||||
angleClip.AngleIndex = angle + 1;
|
angleClip.AngleIndex = angle + 1;
|
||||||
angleClip.TimeIn = streamClip.TimeIn;
|
angleClip.TimeIn = streamClip.TimeIn;
|
||||||
@ -395,33 +389,33 @@ namespace BDInfo
|
|||||||
|
|
||||||
for (int i = 0; i < streamCountVideo; i++)
|
for (int i = 0; i < streamCountVideo; i++)
|
||||||
{
|
{
|
||||||
TSStream stream = CreatePlaylistStream(data, ref pos);
|
var stream = CreatePlaylistStream(data, ref pos);
|
||||||
if (stream != null) PlaylistStreams[stream.PID] = stream;
|
if (stream != null) PlaylistStreams[stream.PID] = stream;
|
||||||
}
|
}
|
||||||
for (int i = 0; i < streamCountAudio; i++)
|
for (int i = 0; i < streamCountAudio; i++)
|
||||||
{
|
{
|
||||||
TSStream stream = CreatePlaylistStream(data, ref pos);
|
var stream = CreatePlaylistStream(data, ref pos);
|
||||||
if (stream != null) PlaylistStreams[stream.PID] = stream;
|
if (stream != null) PlaylistStreams[stream.PID] = stream;
|
||||||
}
|
}
|
||||||
for (int i = 0; i < streamCountPG; i++)
|
for (int i = 0; i < streamCountPG; i++)
|
||||||
{
|
{
|
||||||
TSStream stream = CreatePlaylistStream(data, ref pos);
|
var stream = CreatePlaylistStream(data, ref pos);
|
||||||
if (stream != null) PlaylistStreams[stream.PID] = stream;
|
if (stream != null) PlaylistStreams[stream.PID] = stream;
|
||||||
}
|
}
|
||||||
for (int i = 0; i < streamCountIG; i++)
|
for (int i = 0; i < streamCountIG; i++)
|
||||||
{
|
{
|
||||||
TSStream stream = CreatePlaylistStream(data, ref pos);
|
var stream = CreatePlaylistStream(data, ref pos);
|
||||||
if (stream != null) PlaylistStreams[stream.PID] = stream;
|
if (stream != null) PlaylistStreams[stream.PID] = stream;
|
||||||
}
|
}
|
||||||
for (int i = 0; i < streamCountSecondaryAudio; i++)
|
for (int i = 0; i < streamCountSecondaryAudio; i++)
|
||||||
{
|
{
|
||||||
TSStream stream = CreatePlaylistStream(data, ref pos);
|
var stream = CreatePlaylistStream(data, ref pos);
|
||||||
if (stream != null) PlaylistStreams[stream.PID] = stream;
|
if (stream != null) PlaylistStreams[stream.PID] = stream;
|
||||||
pos += 2;
|
pos += 2;
|
||||||
}
|
}
|
||||||
for (int i = 0; i < streamCountSecondaryVideo; i++)
|
for (int i = 0; i < streamCountSecondaryVideo; i++)
|
||||||
{
|
{
|
||||||
TSStream stream = CreatePlaylistStream(data, ref pos);
|
var stream = CreatePlaylistStream(data, ref pos);
|
||||||
if (stream != null) PlaylistStreams[stream.PID] = stream;
|
if (stream != null) PlaylistStreams[stream.PID] = stream;
|
||||||
pos += 6;
|
pos += 6;
|
||||||
}
|
}
|
||||||
@ -446,7 +440,7 @@ namespace BDInfo
|
|||||||
chapterIndex < chapterCount;
|
chapterIndex < chapterCount;
|
||||||
chapterIndex++)
|
chapterIndex++)
|
||||||
{
|
{
|
||||||
int chapterType = data[pos+1];
|
int chapterType = data[pos + 1];
|
||||||
|
|
||||||
if (chapterType == 1)
|
if (chapterType == 1)
|
||||||
{
|
{
|
||||||
@ -459,7 +453,7 @@ namespace BDInfo
|
|||||||
((long)data[pos + 6] << 8) +
|
((long)data[pos + 6] << 8) +
|
||||||
((long)data[pos + 7]);
|
((long)data[pos + 7]);
|
||||||
|
|
||||||
TSStreamClip streamClip = chapterClips[streamFileIndex];
|
var streamClip = chapterClips[streamFileIndex];
|
||||||
|
|
||||||
double chapterSeconds = (double)chapterTime / 45000;
|
double chapterSeconds = (double)chapterTime / 45000;
|
||||||
|
|
||||||
@ -499,8 +493,8 @@ namespace BDInfo
|
|||||||
{
|
{
|
||||||
LoadStreamClips();
|
LoadStreamClips();
|
||||||
|
|
||||||
Dictionary<string, List<double>> clipTimes = new Dictionary<string, List<double>>();
|
var clipTimes = new Dictionary<string, List<double>>();
|
||||||
foreach (TSStreamClip clip in StreamClips)
|
foreach (var clip in StreamClips)
|
||||||
{
|
{
|
||||||
if (clip.AngleIndex == 0)
|
if (clip.AngleIndex == 0)
|
||||||
{
|
{
|
||||||
@ -568,7 +562,7 @@ namespace BDInfo
|
|||||||
int streamLength = data[pos++];
|
int streamLength = data[pos++];
|
||||||
int streamPos = pos;
|
int streamPos = pos;
|
||||||
|
|
||||||
TSStreamType streamType = (TSStreamType)data[pos++];
|
var streamType = (TSStreamType)data[pos++];
|
||||||
switch (streamType)
|
switch (streamType)
|
||||||
{
|
{
|
||||||
case TSStreamType.MVC_VIDEO:
|
case TSStreamType.MVC_VIDEO:
|
||||||
@ -580,11 +574,11 @@ namespace BDInfo
|
|||||||
case TSStreamType.MPEG2_VIDEO:
|
case TSStreamType.MPEG2_VIDEO:
|
||||||
case TSStreamType.VC1_VIDEO:
|
case TSStreamType.VC1_VIDEO:
|
||||||
|
|
||||||
TSVideoFormat videoFormat = (TSVideoFormat)
|
var videoFormat = (TSVideoFormat)
|
||||||
(data[pos] >> 4);
|
(data[pos] >> 4);
|
||||||
TSFrameRate frameRate = (TSFrameRate)
|
var frameRate = (TSFrameRate)
|
||||||
(data[pos] & 0xF);
|
(data[pos] & 0xF);
|
||||||
TSAspectRatio aspectRatio = (TSAspectRatio)
|
var aspectRatio = (TSAspectRatio)
|
||||||
(data[pos + 1] >> 4);
|
(data[pos + 1] >> 4);
|
||||||
|
|
||||||
stream = new TSVideoStream();
|
stream = new TSVideoStream();
|
||||||
@ -618,9 +612,9 @@ namespace BDInfo
|
|||||||
|
|
||||||
int audioFormat = ReadByte(data, ref pos);
|
int audioFormat = ReadByte(data, ref pos);
|
||||||
|
|
||||||
TSChannelLayout channelLayout = (TSChannelLayout)
|
var channelLayout = (TSChannelLayout)
|
||||||
(audioFormat >> 4);
|
(audioFormat >> 4);
|
||||||
TSSampleRate sampleRate = (TSSampleRate)
|
var sampleRate = (TSSampleRate)
|
||||||
(audioFormat & 0xF);
|
(audioFormat & 0xF);
|
||||||
|
|
||||||
string audioLanguage = ReadString(data, 3, ref pos);
|
string audioLanguage = ReadString(data, 3, ref pos);
|
||||||
@ -713,7 +707,7 @@ namespace BDInfo
|
|||||||
{
|
{
|
||||||
referenceClip = StreamClips[0];
|
referenceClip = StreamClips[0];
|
||||||
}
|
}
|
||||||
foreach (TSStreamClip clip in StreamClips)
|
foreach (var clip in StreamClips)
|
||||||
{
|
{
|
||||||
if (clip.StreamClipFile.Streams.Count > referenceClip.StreamClipFile.Streams.Count)
|
if (clip.StreamClipFile.Streams.Count > referenceClip.StreamClipFile.Streams.Count)
|
||||||
{
|
{
|
||||||
@ -739,12 +733,12 @@ namespace BDInfo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (TSStream clipStream
|
foreach (var clipStream
|
||||||
in referenceClip.StreamClipFile.Streams.Values)
|
in referenceClip.StreamClipFile.Streams.Values)
|
||||||
{
|
{
|
||||||
if (!Streams.ContainsKey(clipStream.PID))
|
if (!Streams.ContainsKey(clipStream.PID))
|
||||||
{
|
{
|
||||||
TSStream stream = clipStream.Clone();
|
var stream = clipStream.Clone();
|
||||||
Streams[clipStream.PID] = stream;
|
Streams[clipStream.PID] = stream;
|
||||||
|
|
||||||
if (!IsCustom && !PlaylistStreams.ContainsKey(stream.PID))
|
if (!IsCustom && !PlaylistStreams.ContainsKey(stream.PID))
|
||||||
@ -780,7 +774,7 @@ namespace BDInfo
|
|||||||
referenceClip.StreamFile.Streams.ContainsKey(4114) &&
|
referenceClip.StreamFile.Streams.ContainsKey(4114) &&
|
||||||
!Streams.ContainsKey(4114))
|
!Streams.ContainsKey(4114))
|
||||||
{
|
{
|
||||||
TSStream stream = referenceClip.StreamFile.Streams[4114].Clone();
|
var stream = referenceClip.StreamFile.Streams[4114].Clone();
|
||||||
Streams[4114] = stream;
|
Streams[4114] = stream;
|
||||||
if (stream.IsVideoStream)
|
if (stream.IsVideoStream)
|
||||||
{
|
{
|
||||||
@ -788,12 +782,12 @@ namespace BDInfo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (TSStream clipStream
|
foreach (var clipStream
|
||||||
in referenceClip.StreamFile.Streams.Values)
|
in referenceClip.StreamFile.Streams.Values)
|
||||||
{
|
{
|
||||||
if (Streams.ContainsKey(clipStream.PID))
|
if (Streams.ContainsKey(clipStream.PID))
|
||||||
{
|
{
|
||||||
TSStream stream = Streams[clipStream.PID];
|
var stream = Streams[clipStream.PID];
|
||||||
|
|
||||||
if (stream.StreamType != clipStream.StreamType) continue;
|
if (stream.StreamType != clipStream.StreamType) continue;
|
||||||
|
|
||||||
@ -812,8 +806,8 @@ namespace BDInfo
|
|||||||
else if (stream.IsAudioStream &&
|
else if (stream.IsAudioStream &&
|
||||||
clipStream.IsAudioStream)
|
clipStream.IsAudioStream)
|
||||||
{
|
{
|
||||||
TSAudioStream audioStream = (TSAudioStream)stream;
|
var audioStream = (TSAudioStream)stream;
|
||||||
TSAudioStream clipAudioStream = (TSAudioStream)clipStream;
|
var clipAudioStream = (TSAudioStream)clipStream;
|
||||||
|
|
||||||
if (clipAudioStream.ChannelCount > audioStream.ChannelCount)
|
if (clipAudioStream.ChannelCount > audioStream.ChannelCount)
|
||||||
{
|
{
|
||||||
@ -864,7 +858,7 @@ namespace BDInfo
|
|||||||
SortedStreams.Add(stream);
|
SortedStreams.Add(stream);
|
||||||
for (int i = 0; i < AngleCount; i++)
|
for (int i = 0; i < AngleCount; i++)
|
||||||
{
|
{
|
||||||
TSStream angleStream = stream.Clone();
|
var angleStream = stream.Clone();
|
||||||
angleStream.AngleIndex = i + 1;
|
angleStream.AngleIndex = i + 1;
|
||||||
AngleStreams[i][angleStream.PID] = angleStream;
|
AngleStreams[i][angleStream.PID] = angleStream;
|
||||||
SortedStreams.Add(angleStream);
|
SortedStreams.Add(angleStream);
|
||||||
@ -901,7 +895,7 @@ namespace BDInfo
|
|||||||
|
|
||||||
public void ClearBitrates()
|
public void ClearBitrates()
|
||||||
{
|
{
|
||||||
foreach (TSStreamClip clip in StreamClips)
|
foreach (var clip in StreamClips)
|
||||||
{
|
{
|
||||||
clip.PayloadBytes = 0;
|
clip.PayloadBytes = 0;
|
||||||
clip.PacketCount = 0;
|
clip.PacketCount = 0;
|
||||||
@ -909,7 +903,7 @@ namespace BDInfo
|
|||||||
|
|
||||||
if (clip.StreamFile != null)
|
if (clip.StreamFile != null)
|
||||||
{
|
{
|
||||||
foreach (TSStream stream in clip.StreamFile.Streams.Values)
|
foreach (var stream in clip.StreamFile.Streams.Values)
|
||||||
{
|
{
|
||||||
stream.PayloadBytes = 0;
|
stream.PayloadBytes = 0;
|
||||||
stream.PacketCount = 0;
|
stream.PacketCount = 0;
|
||||||
@ -924,7 +918,7 @@ namespace BDInfo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (TSStream stream in SortedStreams)
|
foreach (var stream in SortedStreams)
|
||||||
{
|
{
|
||||||
stream.PayloadBytes = 0;
|
stream.PayloadBytes = 0;
|
||||||
stream.PacketCount = 0;
|
stream.PacketCount = 0;
|
||||||
@ -1246,8 +1240,7 @@ namespace BDInfo
|
|||||||
int count,
|
int count,
|
||||||
ref int pos)
|
ref int pos)
|
||||||
{
|
{
|
||||||
string val =
|
string val = Encoding.ASCII.GetString(data, pos, count);
|
||||||
_textEncoding.GetASCIIEncoding().GetString(data, pos, count);
|
|
||||||
|
|
||||||
pos += count;
|
pos += count;
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
//============================================================================
|
//============================================================================
|
||||||
// BDInfo - Blu-ray Video and Audio Analysis Tool
|
// BDInfo - Blu-ray Video and Audio Analysis Tool
|
||||||
// Copyright © 2010 Cinema Squid
|
// Copyright © 2010 Cinema Squid
|
||||||
//
|
//
|
||||||
@ -109,7 +109,7 @@ namespace BDInfo
|
|||||||
|
|
||||||
public TSDescriptor Clone()
|
public TSDescriptor Clone()
|
||||||
{
|
{
|
||||||
TSDescriptor descriptor =
|
var descriptor =
|
||||||
new TSDescriptor(Name, (byte)Value.Length);
|
new TSDescriptor(Name, (byte)Value.Length);
|
||||||
Value.CopyTo(descriptor.Value, 0);
|
Value.CopyTo(descriptor.Value, 0);
|
||||||
return descriptor;
|
return descriptor;
|
||||||
@ -142,21 +142,12 @@ namespace BDInfo
|
|||||||
public double PacketSeconds = 0;
|
public double PacketSeconds = 0;
|
||||||
public int AngleIndex = 0;
|
public int AngleIndex = 0;
|
||||||
|
|
||||||
public ulong PacketSize
|
public ulong PacketSize => PacketCount * 192;
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return PacketCount * 192;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private string _LanguageCode;
|
private string _LanguageCode;
|
||||||
public string LanguageCode
|
public string LanguageCode
|
||||||
{
|
{
|
||||||
get
|
get => _LanguageCode;
|
||||||
{
|
|
||||||
return _LanguageCode;
|
|
||||||
}
|
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
_LanguageCode = value;
|
_LanguageCode = value;
|
||||||
@ -398,13 +389,7 @@ namespace BDInfo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual string Description
|
public virtual string Description => "";
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public abstract TSStream Clone();
|
public abstract TSStream Clone();
|
||||||
|
|
||||||
@ -419,7 +404,7 @@ namespace BDInfo
|
|||||||
if (Descriptors != null)
|
if (Descriptors != null)
|
||||||
{
|
{
|
||||||
stream.Descriptors = new List<TSDescriptor>();
|
stream.Descriptors = new List<TSDescriptor>();
|
||||||
foreach (TSDescriptor descriptor in Descriptors)
|
foreach (var descriptor in Descriptors)
|
||||||
{
|
{
|
||||||
stream.Descriptors.Add(descriptor.Clone());
|
stream.Descriptors.Add(descriptor.Clone());
|
||||||
}
|
}
|
||||||
@ -444,10 +429,7 @@ namespace BDInfo
|
|||||||
private TSVideoFormat _VideoFormat;
|
private TSVideoFormat _VideoFormat;
|
||||||
public TSVideoFormat VideoFormat
|
public TSVideoFormat VideoFormat
|
||||||
{
|
{
|
||||||
get
|
get => _VideoFormat;
|
||||||
{
|
|
||||||
return _VideoFormat;
|
|
||||||
}
|
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
_VideoFormat = value;
|
_VideoFormat = value;
|
||||||
@ -488,10 +470,7 @@ namespace BDInfo
|
|||||||
private TSFrameRate _FrameRate;
|
private TSFrameRate _FrameRate;
|
||||||
public TSFrameRate FrameRate
|
public TSFrameRate FrameRate
|
||||||
{
|
{
|
||||||
get
|
get => _FrameRate;
|
||||||
{
|
|
||||||
return _FrameRate;
|
|
||||||
}
|
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
_FrameRate = value;
|
_FrameRate = value;
|
||||||
@ -574,7 +553,7 @@ namespace BDInfo
|
|||||||
|
|
||||||
public override TSStream Clone()
|
public override TSStream Clone()
|
||||||
{
|
{
|
||||||
TSVideoStream stream = new TSVideoStream();
|
var stream = new TSVideoStream();
|
||||||
CopyTo(stream);
|
CopyTo(stream);
|
||||||
|
|
||||||
stream.VideoFormat = _VideoFormat;
|
stream.VideoFormat = _VideoFormat;
|
||||||
@ -748,7 +727,7 @@ namespace BDInfo
|
|||||||
|
|
||||||
public override TSStream Clone()
|
public override TSStream Clone()
|
||||||
{
|
{
|
||||||
TSAudioStream stream = new TSAudioStream();
|
var stream = new TSAudioStream();
|
||||||
CopyTo(stream);
|
CopyTo(stream);
|
||||||
|
|
||||||
stream.SampleRate = SampleRate;
|
stream.SampleRate = SampleRate;
|
||||||
@ -777,7 +756,7 @@ namespace BDInfo
|
|||||||
|
|
||||||
public override TSStream Clone()
|
public override TSStream Clone()
|
||||||
{
|
{
|
||||||
TSGraphicsStream stream = new TSGraphicsStream();
|
var stream = new TSGraphicsStream();
|
||||||
CopyTo(stream);
|
CopyTo(stream);
|
||||||
return stream;
|
return stream;
|
||||||
}
|
}
|
||||||
@ -793,7 +772,7 @@ namespace BDInfo
|
|||||||
|
|
||||||
public override TSStream Clone()
|
public override TSStream Clone()
|
||||||
{
|
{
|
||||||
TSTextStream stream = new TSTextStream();
|
var stream = new TSTextStream();
|
||||||
CopyTo(stream);
|
CopyTo(stream);
|
||||||
return stream;
|
return stream;
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
//============================================================================
|
//============================================================================
|
||||||
// BDInfo - Blu-ray Video and Audio Analysis Tool
|
// BDInfo - Blu-ray Video and Audio Analysis Tool
|
||||||
// Copyright © 2010 Cinema Squid
|
// Copyright © 2010 Cinema Squid
|
||||||
//
|
//
|
||||||
@ -37,21 +37,9 @@ namespace BDInfo
|
|||||||
Stream = new MemoryStream(Buffer);
|
Stream = new MemoryStream(Buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
public long Length
|
public long Length => (long)BufferLength;
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return (long)BufferLength;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public long Position
|
public long Position => Stream.Position;
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return Stream.Position;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Add(
|
public void Add(
|
||||||
byte[] buffer,
|
byte[] buffer,
|
||||||
@ -123,7 +111,7 @@ namespace BDInfo
|
|||||||
data += (Stream.ReadByte() << shift);
|
data += (Stream.ReadByte() << shift);
|
||||||
shift -= 8;
|
shift -= 8;
|
||||||
}
|
}
|
||||||
BitVector32 vector = new BitVector32(data);
|
var vector = new BitVector32(data);
|
||||||
|
|
||||||
int value = 0;
|
int value = 0;
|
||||||
for (int i = SkipBits; i < SkipBits + bits; i++)
|
for (int i = SkipBits; i < SkipBits + bits; i++)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
//============================================================================
|
//============================================================================
|
||||||
// BDInfo - Blu-ray Video and Audio Analysis Tool
|
// BDInfo - Blu-ray Video and Audio Analysis Tool
|
||||||
// Copyright © 2010 Cinema Squid
|
// Copyright © 2010 Cinema Squid
|
||||||
//
|
//
|
||||||
@ -74,13 +74,7 @@ namespace BDInfo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public ulong PacketSize
|
public ulong PacketSize => PacketCount * 192;
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return PacketCount * 192;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public ulong PacketBitRate
|
public ulong PacketBitRate
|
||||||
{
|
{
|
||||||
@ -96,11 +90,11 @@ namespace BDInfo
|
|||||||
|
|
||||||
public bool IsCompatible(TSStreamClip clip)
|
public bool IsCompatible(TSStreamClip clip)
|
||||||
{
|
{
|
||||||
foreach (TSStream stream1 in StreamFile.Streams.Values)
|
foreach (var stream1 in StreamFile.Streams.Values)
|
||||||
{
|
{
|
||||||
if (clip.StreamFile.Streams.ContainsKey(stream1.PID))
|
if (clip.StreamFile.Streams.ContainsKey(stream1.PID))
|
||||||
{
|
{
|
||||||
TSStream stream2 = clip.StreamFile.Streams[stream1.PID];
|
var stream2 = clip.StreamFile.Streams[stream1.PID];
|
||||||
if (stream1.StreamType != stream2.StreamType)
|
if (stream1.StreamType != stream2.StreamType)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
|
@ -23,28 +23,24 @@ using System.Collections.Generic;
|
|||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using MediaBrowser.Model.IO;
|
using MediaBrowser.Model.IO;
|
||||||
using MediaBrowser.Model.Text;
|
|
||||||
|
|
||||||
namespace BDInfo
|
namespace BDInfo
|
||||||
{
|
{
|
||||||
public class TSStreamClipFile
|
public class TSStreamClipFile
|
||||||
{
|
{
|
||||||
private readonly IFileSystem _fileSystem;
|
private readonly IFileSystem _fileSystem;
|
||||||
private readonly ITextEncoding _textEncoding;
|
|
||||||
public FileSystemMetadata FileInfo = null;
|
public FileSystemMetadata FileInfo = null;
|
||||||
public string FileType = null;
|
public string FileType = null;
|
||||||
public bool IsValid = false;
|
public bool IsValid = false;
|
||||||
public string Name = null;
|
public string Name = null;
|
||||||
|
|
||||||
public Dictionary<ushort, TSStream> Streams =
|
public Dictionary<ushort, TSStream> Streams =
|
||||||
new Dictionary<ushort,TSStream>();
|
new Dictionary<ushort, TSStream>();
|
||||||
|
|
||||||
public TSStreamClipFile(
|
public TSStreamClipFile(FileSystemMetadata fileInfo, IFileSystem fileSystem)
|
||||||
FileSystemMetadata fileInfo, IFileSystem fileSystem, ITextEncoding textEncoding)
|
|
||||||
{
|
{
|
||||||
FileInfo = fileInfo;
|
FileInfo = fileInfo;
|
||||||
_fileSystem = fileSystem;
|
_fileSystem = fileSystem;
|
||||||
_textEncoding = textEncoding;
|
|
||||||
Name = fileInfo.Name.ToUpper();
|
Name = fileInfo.Name.ToUpper();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -70,7 +66,7 @@ namespace BDInfo
|
|||||||
byte[] fileType = new byte[8];
|
byte[] fileType = new byte[8];
|
||||||
Array.Copy(data, 0, fileType, 0, fileType.Length);
|
Array.Copy(data, 0, fileType, 0, fileType.Length);
|
||||||
|
|
||||||
FileType = _textEncoding.GetASCIIEncoding().GetString(fileType, 0, fileType.Length);
|
FileType = Encoding.ASCII.GetString(fileType, 0, fileType.Length);
|
||||||
if (FileType != "HDMV0100" &&
|
if (FileType != "HDMV0100" &&
|
||||||
FileType != "HDMV0200")
|
FileType != "HDMV0200")
|
||||||
{
|
{
|
||||||
@ -115,7 +111,7 @@ namespace BDInfo
|
|||||||
|
|
||||||
streamOffset += 2;
|
streamOffset += 2;
|
||||||
|
|
||||||
TSStreamType streamType = (TSStreamType)
|
var streamType = (TSStreamType)
|
||||||
clipData[streamOffset + 1];
|
clipData[streamOffset + 1];
|
||||||
switch (streamType)
|
switch (streamType)
|
||||||
{
|
{
|
||||||
@ -127,18 +123,18 @@ namespace BDInfo
|
|||||||
case TSStreamType.MPEG1_VIDEO:
|
case TSStreamType.MPEG1_VIDEO:
|
||||||
case TSStreamType.MPEG2_VIDEO:
|
case TSStreamType.MPEG2_VIDEO:
|
||||||
case TSStreamType.VC1_VIDEO:
|
case TSStreamType.VC1_VIDEO:
|
||||||
{
|
{
|
||||||
TSVideoFormat videoFormat = (TSVideoFormat)
|
var videoFormat = (TSVideoFormat)
|
||||||
(clipData[streamOffset + 2] >> 4);
|
(clipData[streamOffset + 2] >> 4);
|
||||||
TSFrameRate frameRate = (TSFrameRate)
|
var frameRate = (TSFrameRate)
|
||||||
(clipData[streamOffset + 2] & 0xF);
|
(clipData[streamOffset + 2] & 0xF);
|
||||||
TSAspectRatio aspectRatio = (TSAspectRatio)
|
var aspectRatio = (TSAspectRatio)
|
||||||
(clipData[streamOffset + 3] >> 4);
|
(clipData[streamOffset + 3] >> 4);
|
||||||
|
|
||||||
stream = new TSVideoStream();
|
stream = new TSVideoStream();
|
||||||
((TSVideoStream)stream).VideoFormat = videoFormat;
|
((TSVideoStream)stream).VideoFormat = videoFormat;
|
||||||
((TSVideoStream)stream).AspectRatio = aspectRatio;
|
((TSVideoStream)stream).AspectRatio = aspectRatio;
|
||||||
((TSVideoStream)stream).FrameRate = frameRate;
|
((TSVideoStream)stream).FrameRate = frameRate;
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
Debug.WriteLine(string.Format(
|
Debug.WriteLine(string.Format(
|
||||||
"\t{0} {1} {2} {3} {4}",
|
"\t{0} {1} {2} {3} {4}",
|
||||||
@ -148,8 +144,8 @@ namespace BDInfo
|
|||||||
frameRate,
|
frameRate,
|
||||||
aspectRatio));
|
aspectRatio));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TSStreamType.AC3_AUDIO:
|
case TSStreamType.AC3_AUDIO:
|
||||||
case TSStreamType.AC3_PLUS_AUDIO:
|
case TSStreamType.AC3_PLUS_AUDIO:
|
||||||
@ -162,23 +158,22 @@ namespace BDInfo
|
|||||||
case TSStreamType.LPCM_AUDIO:
|
case TSStreamType.LPCM_AUDIO:
|
||||||
case TSStreamType.MPEG1_AUDIO:
|
case TSStreamType.MPEG1_AUDIO:
|
||||||
case TSStreamType.MPEG2_AUDIO:
|
case TSStreamType.MPEG2_AUDIO:
|
||||||
{
|
{
|
||||||
byte[] languageBytes = new byte[3];
|
byte[] languageBytes = new byte[3];
|
||||||
Array.Copy(clipData, streamOffset + 3,
|
Array.Copy(clipData, streamOffset + 3,
|
||||||
languageBytes, 0, languageBytes.Length);
|
languageBytes, 0, languageBytes.Length);
|
||||||
string languageCode =
|
string languageCode = Encoding.ASCII.GetString(languageBytes, 0, languageBytes.Length);
|
||||||
_textEncoding.GetASCIIEncoding().GetString(languageBytes, 0, languageBytes.Length);
|
|
||||||
|
|
||||||
TSChannelLayout channelLayout = (TSChannelLayout)
|
var channelLayout = (TSChannelLayout)
|
||||||
(clipData[streamOffset + 2] >> 4);
|
(clipData[streamOffset + 2] >> 4);
|
||||||
TSSampleRate sampleRate = (TSSampleRate)
|
var sampleRate = (TSSampleRate)
|
||||||
(clipData[streamOffset + 2] & 0xF);
|
(clipData[streamOffset + 2] & 0xF);
|
||||||
|
|
||||||
stream = new TSAudioStream();
|
stream = new TSAudioStream();
|
||||||
((TSAudioStream)stream).LanguageCode = languageCode;
|
((TSAudioStream)stream).LanguageCode = languageCode;
|
||||||
((TSAudioStream)stream).ChannelLayout = channelLayout;
|
((TSAudioStream)stream).ChannelLayout = channelLayout;
|
||||||
((TSAudioStream)stream).SampleRate = TSAudioStream.ConvertSampleRate(sampleRate);
|
((TSAudioStream)stream).SampleRate = TSAudioStream.ConvertSampleRate(sampleRate);
|
||||||
((TSAudioStream)stream).LanguageCode = languageCode;
|
((TSAudioStream)stream).LanguageCode = languageCode;
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
Debug.WriteLine(string.Format(
|
Debug.WriteLine(string.Format(
|
||||||
"\t{0} {1} {2} {3} {4}",
|
"\t{0} {1} {2} {3} {4}",
|
||||||
@ -188,20 +183,19 @@ namespace BDInfo
|
|||||||
channelLayout,
|
channelLayout,
|
||||||
sampleRate));
|
sampleRate));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TSStreamType.INTERACTIVE_GRAPHICS:
|
case TSStreamType.INTERACTIVE_GRAPHICS:
|
||||||
case TSStreamType.PRESENTATION_GRAPHICS:
|
case TSStreamType.PRESENTATION_GRAPHICS:
|
||||||
{
|
{
|
||||||
byte[] languageBytes = new byte[3];
|
byte[] languageBytes = new byte[3];
|
||||||
Array.Copy(clipData, streamOffset + 2,
|
Array.Copy(clipData, streamOffset + 2,
|
||||||
languageBytes, 0, languageBytes.Length);
|
languageBytes, 0, languageBytes.Length);
|
||||||
string languageCode =
|
string languageCode = Encoding.ASCII.GetString(languageBytes, 0, languageBytes.Length);
|
||||||
_textEncoding.GetASCIIEncoding().GetString(languageBytes, 0, languageBytes.Length);
|
|
||||||
|
|
||||||
stream = new TSGraphicsStream();
|
stream = new TSGraphicsStream();
|
||||||
stream.LanguageCode = languageCode;
|
stream.LanguageCode = languageCode;
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
Debug.WriteLine(string.Format(
|
Debug.WriteLine(string.Format(
|
||||||
"\t{0} {1} {2}",
|
"\t{0} {1} {2}",
|
||||||
@ -209,16 +203,15 @@ namespace BDInfo
|
|||||||
streamType,
|
streamType,
|
||||||
languageCode));
|
languageCode));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TSStreamType.SUBTITLE:
|
case TSStreamType.SUBTITLE:
|
||||||
{
|
{
|
||||||
byte[] languageBytes = new byte[3];
|
byte[] languageBytes = new byte[3];
|
||||||
Array.Copy(clipData, streamOffset + 3,
|
Array.Copy(clipData, streamOffset + 3,
|
||||||
languageBytes, 0, languageBytes.Length);
|
languageBytes, 0, languageBytes.Length);
|
||||||
string languageCode =
|
string languageCode = Encoding.ASCII.GetString(languageBytes, 0, languageBytes.Length);
|
||||||
_textEncoding.GetASCIIEncoding().GetString(languageBytes, 0, languageBytes.Length);
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
Debug.WriteLine(string.Format(
|
Debug.WriteLine(string.Format(
|
||||||
"\t{0} {1} {2}",
|
"\t{0} {1} {2}",
|
||||||
@ -227,9 +220,9 @@ namespace BDInfo
|
|||||||
languageCode));
|
languageCode));
|
||||||
#endif
|
#endif
|
||||||
stream = new TSTextStream();
|
stream = new TSTextStream();
|
||||||
stream.LanguageCode = languageCode;
|
stream.LanguageCode = languageCode;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (stream != null)
|
if (stream != null)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
//============================================================================
|
//============================================================================
|
||||||
// BDInfo - Blu-ray Video and Audio Analysis Tool
|
// BDInfo - Blu-ray Video and Audio Analysis Tool
|
||||||
// Copyright © 2010 Cinema Squid
|
// Copyright © 2010 Cinema Squid
|
||||||
//
|
//
|
||||||
@ -283,7 +283,7 @@ namespace BDInfo
|
|||||||
|
|
||||||
bool isAVC = false;
|
bool isAVC = false;
|
||||||
bool isMVC = false;
|
bool isMVC = false;
|
||||||
foreach (TSStream finishedStream in Streams.Values)
|
foreach (var finishedStream in Streams.Values)
|
||||||
{
|
{
|
||||||
if (!finishedStream.IsInitialized)
|
if (!finishedStream.IsInitialized)
|
||||||
{
|
{
|
||||||
@ -327,10 +327,10 @@ namespace BDInfo
|
|||||||
UpdateStreamBitrate(PID, PTSPID, PTS, PTSDiff);
|
UpdateStreamBitrate(PID, PTSPID, PTS, PTSDiff);
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (TSPlaylistFile playlist in Playlists)
|
foreach (var playlist in Playlists)
|
||||||
{
|
{
|
||||||
double packetSeconds = 0;
|
double packetSeconds = 0;
|
||||||
foreach (TSStreamClip clip in playlist.StreamClips)
|
foreach (var clip in playlist.StreamClips)
|
||||||
{
|
{
|
||||||
if (clip.AngleIndex == 0)
|
if (clip.AngleIndex == 0)
|
||||||
{
|
{
|
||||||
@ -339,7 +339,7 @@ namespace BDInfo
|
|||||||
}
|
}
|
||||||
if (packetSeconds > 0)
|
if (packetSeconds > 0)
|
||||||
{
|
{
|
||||||
foreach (TSStream playlistStream in playlist.SortedStreams)
|
foreach (var playlistStream in playlist.SortedStreams)
|
||||||
{
|
{
|
||||||
if (playlistStream.IsVBR)
|
if (playlistStream.IsVBR)
|
||||||
{
|
{
|
||||||
@ -366,14 +366,14 @@ namespace BDInfo
|
|||||||
{
|
{
|
||||||
if (Playlists == null) return;
|
if (Playlists == null) return;
|
||||||
|
|
||||||
TSStreamState streamState = StreamStates[PID];
|
var streamState = StreamStates[PID];
|
||||||
double streamTime = (double)PTS / 90000;
|
double streamTime = (double)PTS / 90000;
|
||||||
double streamInterval = (double)PTSDiff / 90000;
|
double streamInterval = (double)PTSDiff / 90000;
|
||||||
double streamOffset = streamTime + streamInterval;
|
double streamOffset = streamTime + streamInterval;
|
||||||
|
|
||||||
foreach (TSPlaylistFile playlist in Playlists)
|
foreach (var playlist in Playlists)
|
||||||
{
|
{
|
||||||
foreach (TSStreamClip clip in playlist.StreamClips)
|
foreach (var clip in playlist.StreamClips)
|
||||||
{
|
{
|
||||||
if (clip.Name != this.Name) continue;
|
if (clip.Name != this.Name) continue;
|
||||||
|
|
||||||
@ -390,7 +390,7 @@ namespace BDInfo
|
|||||||
clip.PacketSeconds = streamOffset - clip.TimeIn;
|
clip.PacketSeconds = streamOffset - clip.TimeIn;
|
||||||
}
|
}
|
||||||
|
|
||||||
Dictionary<ushort, TSStream> playlistStreams = playlist.Streams;
|
var playlistStreams = playlist.Streams;
|
||||||
if (clip.AngleIndex > 0 &&
|
if (clip.AngleIndex > 0 &&
|
||||||
clip.AngleIndex < playlist.AngleStreams.Count + 1)
|
clip.AngleIndex < playlist.AngleStreams.Count + 1)
|
||||||
{
|
{
|
||||||
@ -398,7 +398,7 @@ namespace BDInfo
|
|||||||
}
|
}
|
||||||
if (playlistStreams.ContainsKey(PID))
|
if (playlistStreams.ContainsKey(PID))
|
||||||
{
|
{
|
||||||
TSStream stream = playlistStreams[PID];
|
var stream = playlistStreams[PID];
|
||||||
|
|
||||||
stream.PayloadBytes += streamState.WindowBytes;
|
stream.PayloadBytes += streamState.WindowBytes;
|
||||||
stream.PacketCount += streamState.WindowPackets;
|
stream.PacketCount += streamState.WindowPackets;
|
||||||
@ -425,13 +425,13 @@ namespace BDInfo
|
|||||||
|
|
||||||
if (Streams.ContainsKey(PID))
|
if (Streams.ContainsKey(PID))
|
||||||
{
|
{
|
||||||
TSStream stream = Streams[PID];
|
var stream = Streams[PID];
|
||||||
stream.PayloadBytes += streamState.WindowBytes;
|
stream.PayloadBytes += streamState.WindowBytes;
|
||||||
stream.PacketCount += streamState.WindowPackets;
|
stream.PacketCount += streamState.WindowPackets;
|
||||||
|
|
||||||
if (stream.IsVideoStream)
|
if (stream.IsVideoStream)
|
||||||
{
|
{
|
||||||
TSStreamDiagnostics diag = new TSStreamDiagnostics();
|
var diag = new TSStreamDiagnostics();
|
||||||
diag.Marker = (double)PTS / 90000;
|
diag.Marker = (double)PTS / 90000;
|
||||||
diag.Interval = (double)PTSDiff / 90000;
|
diag.Interval = (double)PTSDiff / 90000;
|
||||||
diag.Bytes = streamState.WindowBytes;
|
diag.Bytes = streamState.WindowBytes;
|
||||||
@ -482,7 +482,7 @@ namespace BDInfo
|
|||||||
StreamStates.Clear();
|
StreamStates.Clear();
|
||||||
StreamDiagnostics.Clear();
|
StreamDiagnostics.Clear();
|
||||||
|
|
||||||
TSPacketParser parser =
|
var parser =
|
||||||
new TSPacketParser();
|
new TSPacketParser();
|
||||||
|
|
||||||
long fileLength = (uint)fileStream.Length;
|
long fileLength = (uint)fileStream.Length;
|
||||||
@ -536,80 +536,80 @@ namespace BDInfo
|
|||||||
switch (parser.HeaderParse)
|
switch (parser.HeaderParse)
|
||||||
{
|
{
|
||||||
case 2:
|
case 2:
|
||||||
{
|
{
|
||||||
parser.TransportErrorIndicator =
|
parser.TransportErrorIndicator =
|
||||||
(byte)((buffer[i] >> 7) & 0x1);
|
(byte)((buffer[i] >> 7) & 0x1);
|
||||||
parser.PayloadUnitStartIndicator =
|
parser.PayloadUnitStartIndicator =
|
||||||
(byte)((buffer[i] >> 6) & 0x1);
|
(byte)((buffer[i] >> 6) & 0x1);
|
||||||
parser.TransportPriority =
|
parser.TransportPriority =
|
||||||
(byte)((buffer[i] >> 5) & 0x1);
|
(byte)((buffer[i] >> 5) & 0x1);
|
||||||
parser.PID =
|
parser.PID =
|
||||||
(ushort)((buffer[i] & 0x1f) << 8);
|
(ushort)((buffer[i] & 0x1f) << 8);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
{
|
|
||||||
parser.PID |= (ushort)buffer[i];
|
|
||||||
if (Streams.ContainsKey(parser.PID))
|
|
||||||
{
|
{
|
||||||
parser.Stream = Streams[parser.PID];
|
parser.PID |= (ushort)buffer[i];
|
||||||
|
if (Streams.ContainsKey(parser.PID))
|
||||||
|
{
|
||||||
|
parser.Stream = Streams[parser.PID];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
parser.Stream = null;
|
||||||
|
}
|
||||||
|
if (!StreamStates.ContainsKey(parser.PID))
|
||||||
|
{
|
||||||
|
StreamStates[parser.PID] = new TSStreamState();
|
||||||
|
}
|
||||||
|
parser.StreamState = StreamStates[parser.PID];
|
||||||
|
parser.StreamState.TotalPackets++;
|
||||||
|
parser.StreamState.WindowPackets++;
|
||||||
|
parser.TotalPackets++;
|
||||||
}
|
}
|
||||||
else
|
break;
|
||||||
{
|
|
||||||
parser.Stream = null;
|
|
||||||
}
|
|
||||||
if (!StreamStates.ContainsKey(parser.PID))
|
|
||||||
{
|
|
||||||
StreamStates[parser.PID] = new TSStreamState();
|
|
||||||
}
|
|
||||||
parser.StreamState = StreamStates[parser.PID];
|
|
||||||
parser.StreamState.TotalPackets++;
|
|
||||||
parser.StreamState.WindowPackets++;
|
|
||||||
parser.TotalPackets++;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0:
|
case 0:
|
||||||
{
|
|
||||||
parser.TransportScramblingControl =
|
|
||||||
(byte)((buffer[i] >> 6) & 0x3);
|
|
||||||
parser.AdaptionFieldControl =
|
|
||||||
(byte)((buffer[i] >> 4) & 0x3);
|
|
||||||
|
|
||||||
if ((parser.AdaptionFieldControl & 0x2) == 0x2)
|
|
||||||
{
|
{
|
||||||
parser.AdaptionFieldState = true;
|
parser.TransportScramblingControl =
|
||||||
}
|
(byte)((buffer[i] >> 6) & 0x3);
|
||||||
if (parser.PayloadUnitStartIndicator == 1)
|
parser.AdaptionFieldControl =
|
||||||
{
|
(byte)((buffer[i] >> 4) & 0x3);
|
||||||
if (parser.PID == 0)
|
|
||||||
{
|
|
||||||
parser.PATSectionStart = true;
|
|
||||||
}
|
|
||||||
else if (parser.PID == parser.PMTPID)
|
|
||||||
{
|
|
||||||
parser.PMTSectionStart = true;
|
|
||||||
}
|
|
||||||
else if (parser.StreamState != null &&
|
|
||||||
parser.StreamState.TransferState)
|
|
||||||
{
|
|
||||||
parser.StreamState.TransferState = false;
|
|
||||||
parser.StreamState.TransferCount++;
|
|
||||||
|
|
||||||
bool isFinished = ScanStream(
|
if ((parser.AdaptionFieldControl & 0x2) == 0x2)
|
||||||
parser.Stream,
|
{
|
||||||
parser.StreamState,
|
parser.AdaptionFieldState = true;
|
||||||
parser.StreamState.StreamBuffer);
|
}
|
||||||
|
if (parser.PayloadUnitStartIndicator == 1)
|
||||||
if (!isFullScan && isFinished)
|
{
|
||||||
|
if (parser.PID == 0)
|
||||||
{
|
{
|
||||||
return;
|
parser.PATSectionStart = true;
|
||||||
|
}
|
||||||
|
else if (parser.PID == parser.PMTPID)
|
||||||
|
{
|
||||||
|
parser.PMTSectionStart = true;
|
||||||
|
}
|
||||||
|
else if (parser.StreamState != null &&
|
||||||
|
parser.StreamState.TransferState)
|
||||||
|
{
|
||||||
|
parser.StreamState.TransferState = false;
|
||||||
|
parser.StreamState.TransferCount++;
|
||||||
|
|
||||||
|
bool isFinished = ScanStream(
|
||||||
|
parser.Stream,
|
||||||
|
parser.StreamState,
|
||||||
|
parser.StreamState.StreamBuffer);
|
||||||
|
|
||||||
|
if (!isFullScan && isFinished)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (parser.AdaptionFieldState)
|
else if (parser.AdaptionFieldState)
|
||||||
@ -670,7 +670,8 @@ namespace BDInfo
|
|||||||
parser.PAT[parser.PATOffset++] = buffer[i++];
|
parser.PAT[parser.PATOffset++] = buffer[i++];
|
||||||
parser.PATSectionLength--;
|
parser.PATSectionLength--;
|
||||||
parser.PacketLength--;
|
parser.PacketLength--;
|
||||||
} --i;
|
}
|
||||||
|
--i;
|
||||||
|
|
||||||
if (parser.PATSectionLength == 0)
|
if (parser.PATSectionLength == 0)
|
||||||
{
|
{
|
||||||
@ -801,7 +802,8 @@ namespace BDInfo
|
|||||||
PMT[parser.PMTOffset++] = buffer[i++];
|
PMT[parser.PMTOffset++] = buffer[i++];
|
||||||
--parser.PMTSectionLength;
|
--parser.PMTSectionLength;
|
||||||
--parser.PacketLength;
|
--parser.PacketLength;
|
||||||
} --i;
|
}
|
||||||
|
--i;
|
||||||
|
|
||||||
if (parser.PMTSectionLength == 0)
|
if (parser.PMTSectionLength == 0)
|
||||||
{
|
{
|
||||||
@ -837,7 +839,7 @@ namespace BDInfo
|
|||||||
|
|
||||||
if (!Streams.ContainsKey(streamPID))
|
if (!Streams.ContainsKey(streamPID))
|
||||||
{
|
{
|
||||||
List<TSDescriptor> streamDescriptors =
|
var streamDescriptors =
|
||||||
new List<TSDescriptor>();
|
new List<TSDescriptor>();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -994,7 +996,7 @@ namespace BDInfo
|
|||||||
{
|
{
|
||||||
--parser.PMTProgramDescriptorLength;
|
--parser.PMTProgramDescriptorLength;
|
||||||
|
|
||||||
TSDescriptor descriptor = parser.PMTProgramDescriptors[
|
var descriptor = parser.PMTProgramDescriptors[
|
||||||
parser.PMTProgramDescriptors.Count - 1];
|
parser.PMTProgramDescriptors.Count - 1];
|
||||||
|
|
||||||
int valueIndex =
|
int valueIndex =
|
||||||
@ -1024,8 +1026,8 @@ namespace BDInfo
|
|||||||
parser.StreamState != null &&
|
parser.StreamState != null &&
|
||||||
parser.TransportScramblingControl == 0)
|
parser.TransportScramblingControl == 0)
|
||||||
{
|
{
|
||||||
TSStream stream = parser.Stream;
|
var stream = parser.Stream;
|
||||||
TSStreamState streamState = parser.StreamState;
|
var streamState = parser.StreamState;
|
||||||
|
|
||||||
streamState.Parse =
|
streamState.Parse =
|
||||||
(streamState.Parse << 8) + buffer[i];
|
(streamState.Parse << 8) + buffer[i];
|
||||||
@ -1459,7 +1461,7 @@ namespace BDInfo
|
|||||||
|
|
||||||
ulong PTSLast = 0;
|
ulong PTSLast = 0;
|
||||||
ulong PTSDiff = 0;
|
ulong PTSDiff = 0;
|
||||||
foreach (TSStream stream in Streams.Values)
|
foreach (var stream in Streams.Values)
|
||||||
{
|
{
|
||||||
if (!stream.IsVideoStream) continue;
|
if (!stream.IsVideoStream) continue;
|
||||||
|
|
||||||
@ -1495,10 +1497,10 @@ namespace BDInfo
|
|||||||
case TSStreamType.MPEG1_VIDEO:
|
case TSStreamType.MPEG1_VIDEO:
|
||||||
case TSStreamType.MPEG2_VIDEO:
|
case TSStreamType.MPEG2_VIDEO:
|
||||||
case TSStreamType.VC1_VIDEO:
|
case TSStreamType.VC1_VIDEO:
|
||||||
{
|
{
|
||||||
stream = new TSVideoStream();
|
stream = new TSVideoStream();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TSStreamType.AC3_AUDIO:
|
case TSStreamType.AC3_AUDIO:
|
||||||
case TSStreamType.AC3_PLUS_AUDIO:
|
case TSStreamType.AC3_PLUS_AUDIO:
|
||||||
@ -1511,23 +1513,23 @@ namespace BDInfo
|
|||||||
case TSStreamType.LPCM_AUDIO:
|
case TSStreamType.LPCM_AUDIO:
|
||||||
case TSStreamType.MPEG1_AUDIO:
|
case TSStreamType.MPEG1_AUDIO:
|
||||||
case TSStreamType.MPEG2_AUDIO:
|
case TSStreamType.MPEG2_AUDIO:
|
||||||
{
|
{
|
||||||
stream = new TSAudioStream();
|
stream = new TSAudioStream();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TSStreamType.INTERACTIVE_GRAPHICS:
|
case TSStreamType.INTERACTIVE_GRAPHICS:
|
||||||
case TSStreamType.PRESENTATION_GRAPHICS:
|
case TSStreamType.PRESENTATION_GRAPHICS:
|
||||||
{
|
{
|
||||||
stream = new TSGraphicsStream();
|
stream = new TSGraphicsStream();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TSStreamType.SUBTITLE:
|
case TSStreamType.SUBTITLE:
|
||||||
{
|
{
|
||||||
stream = new TSTextStream();
|
stream = new TSTextStream();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
- [LeoVerto](https://github.com/LeoVerto)
|
- [LeoVerto](https://github.com/LeoVerto)
|
||||||
- [grafixeyehero](https://github.com/grafixeyehero)
|
- [grafixeyehero](https://github.com/grafixeyehero)
|
||||||
- [cvium](https://github.com/cvium)
|
- [cvium](https://github.com/cvium)
|
||||||
|
- [wtayl0r](https://github.com/wtayl0r)
|
||||||
|
|
||||||
# Emby Contributors
|
# Emby Contributors
|
||||||
|
|
||||||
|
@ -1,7 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
|
||||||
namespace DvdLib
|
namespace DvdLib
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="..\SharedVersion.cs" Link="SharedVersion.cs" />
|
<Compile Include="..\SharedVersion.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
@ -1,8 +1,3 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
|
|
||||||
namespace DvdLib.Ifo
|
namespace DvdLib.Ifo
|
||||||
{
|
{
|
||||||
public enum AudioCodec
|
public enum AudioCodec
|
||||||
|
@ -1,7 +1,3 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
|
||||||
namespace DvdLib.Ifo
|
namespace DvdLib.Ifo
|
||||||
|
@ -1,7 +1,3 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
|
||||||
namespace DvdLib.Ifo
|
namespace DvdLib.Ifo
|
||||||
|
@ -1,7 +1,3 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
|
||||||
namespace DvdLib.Ifo
|
namespace DvdLib.Ifo
|
||||||
|
@ -1,8 +1,3 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
|
|
||||||
namespace DvdLib.Ifo
|
namespace DvdLib.Ifo
|
||||||
{
|
{
|
||||||
public class Chapter
|
public class Chapter
|
||||||
|
@ -1,9 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Diagnostics;
|
using System.Linq;
|
||||||
using MediaBrowser.Model.IO;
|
using MediaBrowser.Model.IO;
|
||||||
|
|
||||||
namespace DvdLib.Ifo
|
namespace DvdLib.Ifo
|
||||||
@ -33,10 +31,9 @@ namespace DvdLib.Ifo
|
|||||||
foreach (var ifo in allIfos)
|
foreach (var ifo in allIfos)
|
||||||
{
|
{
|
||||||
var num = ifo.Name.Split('_').ElementAtOrDefault(1);
|
var num = ifo.Name.Split('_').ElementAtOrDefault(1);
|
||||||
ushort ifoNumber;
|
|
||||||
var numbersRead = new List<ushort>();
|
var numbersRead = new List<ushort>();
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(num) && ushort.TryParse(num, out ifoNumber) && !numbersRead.Contains(ifoNumber))
|
if (!string.IsNullOrEmpty(num) && ushort.TryParse(num, out var ifoNumber) && !numbersRead.Contains(ifoNumber))
|
||||||
{
|
{
|
||||||
ReadVTS(ifoNumber, ifo.FullName);
|
ReadVTS(ifoNumber, ifo.FullName);
|
||||||
numbersRead.Add(ifoNumber);
|
numbersRead.Add(ifoNumber);
|
||||||
@ -47,7 +44,7 @@ namespace DvdLib.Ifo
|
|||||||
{
|
{
|
||||||
using (var vmgFs = _fileSystem.GetFileStream(vmgPath.FullName, FileOpenMode.Open, FileAccessMode.Read, FileShareMode.Read))
|
using (var vmgFs = _fileSystem.GetFileStream(vmgPath.FullName, FileOpenMode.Open, FileAccessMode.Read, FileShareMode.Read))
|
||||||
{
|
{
|
||||||
using (BigEndianBinaryReader vmgRead = new BigEndianBinaryReader(vmgFs))
|
using (var vmgRead = new BigEndianBinaryReader(vmgFs))
|
||||||
{
|
{
|
||||||
vmgFs.Seek(0x3E, SeekOrigin.Begin);
|
vmgFs.Seek(0x3E, SeekOrigin.Begin);
|
||||||
_titleSetCount = vmgRead.ReadUInt16();
|
_titleSetCount = vmgRead.ReadUInt16();
|
||||||
@ -73,7 +70,7 @@ namespace DvdLib.Ifo
|
|||||||
read.BaseStream.Seek(6, SeekOrigin.Current);
|
read.BaseStream.Seek(6, SeekOrigin.Current);
|
||||||
for (uint titleNum = 1; titleNum <= _titleCount; titleNum++)
|
for (uint titleNum = 1; titleNum <= _titleCount; titleNum++)
|
||||||
{
|
{
|
||||||
Title t = new Title(titleNum);
|
var t = new Title(titleNum);
|
||||||
t.ParseTT_SRPT(read);
|
t.ParseTT_SRPT(read);
|
||||||
Titles.Add(t);
|
Titles.Add(t);
|
||||||
}
|
}
|
||||||
@ -100,7 +97,7 @@ namespace DvdLib.Ifo
|
|||||||
|
|
||||||
using (var vtsFs = _fileSystem.GetFileStream(vtsPath, FileOpenMode.Open, FileAccessMode.Read, FileShareMode.Read))
|
using (var vtsFs = _fileSystem.GetFileStream(vtsPath, FileOpenMode.Open, FileAccessMode.Read, FileShareMode.Read))
|
||||||
{
|
{
|
||||||
using (BigEndianBinaryReader vtsRead = new BigEndianBinaryReader(vtsFs))
|
using (var vtsRead = new BigEndianBinaryReader(vtsFs))
|
||||||
{
|
{
|
||||||
// Read VTS_PTT_SRPT
|
// Read VTS_PTT_SRPT
|
||||||
vtsFs.Seek(0xC8, SeekOrigin.Begin);
|
vtsFs.Seek(0xC8, SeekOrigin.Begin);
|
||||||
@ -121,7 +118,7 @@ namespace DvdLib.Ifo
|
|||||||
{
|
{
|
||||||
uint chapNum = 1;
|
uint chapNum = 1;
|
||||||
vtsFs.Seek(baseAddr + offsets[titleNum], SeekOrigin.Begin);
|
vtsFs.Seek(baseAddr + offsets[titleNum], SeekOrigin.Begin);
|
||||||
Title t = Titles.FirstOrDefault(vtst => vtst.IsVTSTitle(vtsNum, titleNum + 1));
|
var t = Titles.FirstOrDefault(vtst => vtst.IsVTSTitle(vtsNum, titleNum + 1));
|
||||||
if (t == null) continue;
|
if (t == null) continue;
|
||||||
|
|
||||||
do
|
do
|
||||||
@ -151,11 +148,11 @@ namespace DvdLib.Ifo
|
|||||||
vtsFs.Seek(3, SeekOrigin.Current);
|
vtsFs.Seek(3, SeekOrigin.Current);
|
||||||
uint vtsPgcOffset = vtsRead.ReadUInt32();
|
uint vtsPgcOffset = vtsRead.ReadUInt32();
|
||||||
|
|
||||||
Title t = Titles.FirstOrDefault(vtst => vtst.IsVTSTitle(vtsNum, titleNum));
|
var t = Titles.FirstOrDefault(vtst => vtst.IsVTSTitle(vtsNum, titleNum));
|
||||||
if (t != null) t.AddPgc(vtsRead, startByte + vtsPgcOffset, entryPgc, pgcNum);
|
if (t != null) t.AddPgc(vtsRead, startByte + vtsPgcOffset, entryPgc, pgcNum);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
|
|
||||||
namespace DvdLib.Ifo
|
namespace DvdLib.Ifo
|
||||||
{
|
{
|
||||||
|
@ -1,7 +1,4 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
|
|
||||||
namespace DvdLib.Ifo
|
namespace DvdLib.Ifo
|
||||||
{
|
{
|
||||||
|
@ -1,7 +1,4 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
|
|
||||||
namespace DvdLib.Ifo
|
namespace DvdLib.Ifo
|
||||||
{
|
{
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
namespace DvdLib.Ifo
|
namespace DvdLib.Ifo
|
||||||
{
|
{
|
||||||
@ -89,7 +87,7 @@ namespace DvdLib.Ifo
|
|||||||
br.BaseStream.Seek(startPos + _cellPositionOffset, SeekOrigin.Begin);
|
br.BaseStream.Seek(startPos + _cellPositionOffset, SeekOrigin.Begin);
|
||||||
for (int cellNum = 0; cellNum < _cellCount; cellNum++)
|
for (int cellNum = 0; cellNum < _cellCount; cellNum++)
|
||||||
{
|
{
|
||||||
Cell c = new Cell();
|
var c = new Cell();
|
||||||
c.ParsePosition(br);
|
c.ParsePosition(br);
|
||||||
Cells.Add(c);
|
Cells.Add(c);
|
||||||
}
|
}
|
||||||
@ -101,12 +99,12 @@ namespace DvdLib.Ifo
|
|||||||
}
|
}
|
||||||
|
|
||||||
br.BaseStream.Seek(startPos + _programMapOffset, SeekOrigin.Begin);
|
br.BaseStream.Seek(startPos + _programMapOffset, SeekOrigin.Begin);
|
||||||
List<int> cellNumbers = new List<int>();
|
var cellNumbers = new List<int>();
|
||||||
for (int progNum = 0; progNum < _programCount; progNum++) cellNumbers.Add(br.ReadByte() - 1);
|
for (int progNum = 0; progNum < _programCount; progNum++) cellNumbers.Add(br.ReadByte() - 1);
|
||||||
|
|
||||||
for (int i = 0; i < cellNumbers.Count; i++)
|
for (int i = 0; i < cellNumbers.Count; i++)
|
||||||
{
|
{
|
||||||
int max = (i + 1 == cellNumbers.Count) ? _cellCount : cellNumbers[i+1];
|
int max = (i + 1 == cellNumbers.Count) ? _cellCount : cellNumbers[i + 1];
|
||||||
Programs.Add(new Program(Cells.Where((c, idx) => idx >= cellNumbers[i] && idx < max).ToList()));
|
Programs.Add(new Program(Cells.Where((c, idx) => idx >= cellNumbers[i] && idx < max).ToList()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,4 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
|
||||||
namespace DvdLib.Ifo
|
namespace DvdLib.Ifo
|
||||||
@ -53,7 +50,7 @@ namespace DvdLib.Ifo
|
|||||||
long curPos = br.BaseStream.Position;
|
long curPos = br.BaseStream.Position;
|
||||||
br.BaseStream.Seek(startByte, SeekOrigin.Begin);
|
br.BaseStream.Seek(startByte, SeekOrigin.Begin);
|
||||||
|
|
||||||
ProgramChain pgc = new ProgramChain(pgcNum);
|
var pgc = new ProgramChain(pgcNum);
|
||||||
pgc.ParseHeader(br);
|
pgc.ParseHeader(br);
|
||||||
ProgramChains.Add(pgc);
|
ProgramChains.Add(pgc);
|
||||||
if (entryPgc) EntryProgramChain = pgc;
|
if (entryPgc) EntryProgramChain = pgc;
|
||||||
|
@ -1,7 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
|
|
||||||
namespace DvdLib.Ifo
|
namespace DvdLib.Ifo
|
||||||
{
|
{
|
||||||
|
@ -1,8 +1,3 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
|
|
||||||
namespace DvdLib.Ifo
|
namespace DvdLib.Ifo
|
||||||
{
|
{
|
||||||
public enum VideoCodec
|
public enum VideoCodec
|
||||||
|
@ -15,7 +15,7 @@ using System.Runtime.InteropServices;
|
|||||||
[assembly: AssemblyCulture("")]
|
[assembly: AssemblyCulture("")]
|
||||||
[assembly: NeutralResourcesLanguage("en")]
|
[assembly: NeutralResourcesLanguage("en")]
|
||||||
|
|
||||||
// Setting ComVisible to false makes the types in this assembly not visible
|
// Setting ComVisible to false makes the types in this assembly not visible
|
||||||
// to COM components. If you need to access a type in this assembly from
|
// to COM components. If you need to access a type in this assembly from
|
||||||
// COM, set the ComVisible attribute to true on that type.
|
// COM, set the ComVisible attribute to true on that type.
|
||||||
[assembly: ComVisible(false)]
|
[assembly: ComVisible(false)]
|
||||||
|
@ -1,14 +1,14 @@
|
|||||||
using MediaBrowser.Controller.Dlna;
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Threading.Tasks;
|
|
||||||
using MediaBrowser.Model.Services;
|
|
||||||
using MediaBrowser.Common.Extensions;
|
|
||||||
using System.Text;
|
|
||||||
using MediaBrowser.Controller.Net;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
using Emby.Dlna.Main;
|
using Emby.Dlna.Main;
|
||||||
|
using MediaBrowser.Common.Extensions;
|
||||||
|
using MediaBrowser.Controller.Dlna;
|
||||||
|
using MediaBrowser.Controller.Net;
|
||||||
|
using MediaBrowser.Model.Services;
|
||||||
|
|
||||||
namespace Emby.Dlna.Api
|
namespace Emby.Dlna.Api
|
||||||
{
|
{
|
||||||
@ -115,29 +115,11 @@ namespace Emby.Dlna.Api
|
|||||||
public IRequest Request { get; set; }
|
public IRequest Request { get; set; }
|
||||||
private IHttpResultFactory _resultFactory;
|
private IHttpResultFactory _resultFactory;
|
||||||
|
|
||||||
private IContentDirectory ContentDirectory
|
private IContentDirectory ContentDirectory => DlnaEntryPoint.Current.ContentDirectory;
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return DlnaEntryPoint.Current.ContentDirectory;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private IConnectionManager ConnectionManager
|
private IConnectionManager ConnectionManager => DlnaEntryPoint.Current.ConnectionManager;
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return DlnaEntryPoint.Current.ConnectionManager;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private IMediaReceiverRegistrar MediaReceiverRegistrar
|
private IMediaReceiverRegistrar MediaReceiverRegistrar => DlnaEntryPoint.Current.MediaReceiverRegistrar;
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return DlnaEntryPoint.Current.MediaReceiverRegistrar;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public DlnaServerService(IDlnaManager dlnaManager, IHttpResultFactory httpResultFactory)
|
public DlnaServerService(IDlnaManager dlnaManager, IHttpResultFactory httpResultFactory)
|
||||||
{
|
{
|
||||||
@ -227,7 +209,7 @@ namespace Emby.Dlna.Api
|
|||||||
// TODO: Work out what this is doing.
|
// TODO: Work out what this is doing.
|
||||||
if (string.Equals(first, "mediabrowser", StringComparison.OrdinalIgnoreCase) ||
|
if (string.Equals(first, "mediabrowser", StringComparison.OrdinalIgnoreCase) ||
|
||||||
string.Equals(first, "emby", StringComparison.OrdinalIgnoreCase) ||
|
string.Equals(first, "emby", StringComparison.OrdinalIgnoreCase) ||
|
||||||
string.Equals(first, "jellyfin", StringComparison.OrdinalIgnoreCase ))
|
string.Equals(first, "jellyfin", StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
index++;
|
index++;
|
||||||
}
|
}
|
||||||
@ -259,7 +241,7 @@ namespace Emby.Dlna.Api
|
|||||||
var cacheLength = TimeSpan.FromDays(365);
|
var cacheLength = TimeSpan.FromDays(365);
|
||||||
var cacheKey = Request.RawUrl.GetMD5();
|
var cacheKey = Request.RawUrl.GetMD5();
|
||||||
|
|
||||||
return _resultFactory.GetStaticResult(Request, cacheKey, null, cacheLength, contentType, () => Task.FromResult<Stream>(_dlnaManager.GetIcon(request.Filename).Stream));
|
return _resultFactory.GetStaticResult(Request, cacheKey, null, cacheLength, contentType, () => Task.FromResult(_dlnaManager.GetIcon(request.Filename).Stream));
|
||||||
}
|
}
|
||||||
|
|
||||||
public object Subscribe(ProcessContentDirectoryEventRequest request)
|
public object Subscribe(ProcessContentDirectoryEventRequest request)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using MediaBrowser.Controller.Dlna;
|
using MediaBrowser.Controller.Dlna;
|
||||||
using MediaBrowser.Controller.Net;
|
using MediaBrowser.Controller.Net;
|
||||||
using MediaBrowser.Model.Dlna;
|
using MediaBrowser.Model.Dlna;
|
||||||
@ -80,4 +80,4 @@ namespace Emby.Dlna.Api
|
|||||||
_dlnaManager.CreateProfile(request);
|
_dlnaManager.CreateProfile(request);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
|
|
||||||
namespace Emby.Dlna.Common
|
namespace Emby.Dlna.Common
|
||||||
{
|
{
|
||||||
public class Argument
|
public class Argument
|
||||||
{
|
{
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
|
|
||||||
public string Direction { get; set; }
|
public string Direction { get; set; }
|
||||||
|
|
||||||
public string RelatedStateVariable { get; set; }
|
public string RelatedStateVariable { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
|
|
||||||
namespace Emby.Dlna.Common
|
namespace Emby.Dlna.Common
|
||||||
{
|
{
|
||||||
public class DeviceIcon
|
public class DeviceIcon
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
|
|
||||||
namespace Emby.Dlna.Common
|
namespace Emby.Dlna.Common
|
||||||
{
|
{
|
||||||
public class DeviceService
|
public class DeviceService
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace Emby.Dlna.Common
|
namespace Emby.Dlna.Common
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
using System.Collections.Generic;
|
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace Emby.Dlna.Common
|
namespace Emby.Dlna.Common
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
|
|
||||||
namespace Emby.Dlna.Configuration
|
namespace Emby.Dlna.Configuration
|
||||||
{
|
{
|
||||||
public class DlnaOptions
|
public class DlnaOptions
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
using MediaBrowser.Common.Configuration;
|
|
||||||
using Emby.Dlna.Configuration;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using Emby.Dlna.Configuration;
|
||||||
|
using MediaBrowser.Common.Configuration;
|
||||||
|
|
||||||
namespace Emby.Dlna
|
namespace Emby.Dlna
|
||||||
{
|
{
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
using MediaBrowser.Common.Net;
|
using System.Collections.Generic;
|
||||||
|
using Emby.Dlna.Service;
|
||||||
|
using MediaBrowser.Common.Net;
|
||||||
using MediaBrowser.Controller.Configuration;
|
using MediaBrowser.Controller.Configuration;
|
||||||
using MediaBrowser.Controller.Dlna;
|
using MediaBrowser.Controller.Dlna;
|
||||||
using Emby.Dlna.Service;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using MediaBrowser.Model.Xml;
|
using MediaBrowser.Model.Xml;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
using Emby.Dlna.Common;
|
using Emby.Dlna.Common;
|
||||||
using Emby.Dlna.Service;
|
using Emby.Dlna.Service;
|
||||||
using System.Collections.Generic;
|
|
||||||
|
|
||||||
namespace Emby.Dlna.ConnectionManager
|
namespace Emby.Dlna.ConnectionManager
|
||||||
{
|
{
|
||||||
|
@ -1,12 +1,11 @@
|
|||||||
using MediaBrowser.Common.Extensions;
|
|
||||||
using MediaBrowser.Controller.Configuration;
|
|
||||||
using Emby.Dlna.Server;
|
|
||||||
using Emby.Dlna.Service;
|
|
||||||
using MediaBrowser.Model.Dlna;
|
|
||||||
using Microsoft.Extensions.Logging;
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using Emby.Dlna.Service;
|
||||||
|
using MediaBrowser.Common.Extensions;
|
||||||
|
using MediaBrowser.Controller.Configuration;
|
||||||
|
using MediaBrowser.Model.Dlna;
|
||||||
using MediaBrowser.Model.Xml;
|
using MediaBrowser.Model.Xml;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
namespace Emby.Dlna.ConnectionManager
|
namespace Emby.Dlna.ConnectionManager
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
using Emby.Dlna.Common;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using Emby.Dlna.Common;
|
||||||
|
|
||||||
namespace Emby.Dlna.ConnectionManager
|
namespace Emby.Dlna.ConnectionManager
|
||||||
{
|
{
|
||||||
|
@ -1,18 +1,18 @@
|
|||||||
using MediaBrowser.Common.Net;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using Emby.Dlna.Service;
|
||||||
|
using MediaBrowser.Common.Net;
|
||||||
using MediaBrowser.Controller.Configuration;
|
using MediaBrowser.Controller.Configuration;
|
||||||
using MediaBrowser.Controller.Dlna;
|
using MediaBrowser.Controller.Dlna;
|
||||||
using MediaBrowser.Controller.Drawing;
|
using MediaBrowser.Controller.Drawing;
|
||||||
using MediaBrowser.Controller.Entities;
|
using MediaBrowser.Controller.Entities;
|
||||||
using MediaBrowser.Controller.Library;
|
using MediaBrowser.Controller.Library;
|
||||||
using Emby.Dlna.Service;
|
|
||||||
using MediaBrowser.Model.Dlna;
|
|
||||||
using Microsoft.Extensions.Logging;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using MediaBrowser.Controller.MediaEncoding;
|
using MediaBrowser.Controller.MediaEncoding;
|
||||||
using MediaBrowser.Controller.TV;
|
using MediaBrowser.Controller.TV;
|
||||||
|
using MediaBrowser.Model.Dlna;
|
||||||
using MediaBrowser.Model.Globalization;
|
using MediaBrowser.Model.Globalization;
|
||||||
using MediaBrowser.Model.Xml;
|
using MediaBrowser.Model.Xml;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
namespace Emby.Dlna.ContentDirectory
|
namespace Emby.Dlna.ContentDirectory
|
||||||
{
|
{
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
using Emby.Dlna.Common;
|
using Emby.Dlna.Common;
|
||||||
using Emby.Dlna.Service;
|
using Emby.Dlna.Service;
|
||||||
using System.Collections.Generic;
|
|
||||||
|
|
||||||
namespace Emby.Dlna.ContentDirectory
|
namespace Emby.Dlna.ContentDirectory
|
||||||
{
|
{
|
||||||
|
@ -1,19 +1,3 @@
|
|||||||
using MediaBrowser.Common.Extensions;
|
|
||||||
using MediaBrowser.Controller.Channels;
|
|
||||||
using MediaBrowser.Controller.Configuration;
|
|
||||||
using MediaBrowser.Controller.Drawing;
|
|
||||||
using MediaBrowser.Controller.Entities;
|
|
||||||
using MediaBrowser.Controller.Entities.Movies;
|
|
||||||
using MediaBrowser.Controller.Entities.TV;
|
|
||||||
using MediaBrowser.Controller.Library;
|
|
||||||
using Emby.Dlna.Didl;
|
|
||||||
using Emby.Dlna.Server;
|
|
||||||
using Emby.Dlna.Service;
|
|
||||||
using MediaBrowser.Model.Configuration;
|
|
||||||
using MediaBrowser.Model.Dlna;
|
|
||||||
using MediaBrowser.Model.Entities;
|
|
||||||
using Microsoft.Extensions.Logging;
|
|
||||||
using MediaBrowser.Model.Querying;
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
@ -21,17 +5,28 @@ using System.IO;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Xml;
|
using System.Xml;
|
||||||
|
using Emby.Dlna.Didl;
|
||||||
|
using Emby.Dlna.Service;
|
||||||
|
using MediaBrowser.Common.Extensions;
|
||||||
|
using MediaBrowser.Controller.Configuration;
|
||||||
|
using MediaBrowser.Controller.Drawing;
|
||||||
using MediaBrowser.Controller.Dto;
|
using MediaBrowser.Controller.Dto;
|
||||||
|
using MediaBrowser.Controller.Entities;
|
||||||
using MediaBrowser.Controller.Entities.Audio;
|
using MediaBrowser.Controller.Entities.Audio;
|
||||||
|
using MediaBrowser.Controller.Entities.Movies;
|
||||||
|
using MediaBrowser.Controller.Entities.TV;
|
||||||
|
using MediaBrowser.Controller.Library;
|
||||||
|
using MediaBrowser.Controller.LiveTv;
|
||||||
using MediaBrowser.Controller.MediaEncoding;
|
using MediaBrowser.Controller.MediaEncoding;
|
||||||
using MediaBrowser.Controller.Playlists;
|
using MediaBrowser.Controller.Playlists;
|
||||||
using MediaBrowser.Controller.TV;
|
using MediaBrowser.Controller.TV;
|
||||||
|
using MediaBrowser.Model.Dlna;
|
||||||
|
using MediaBrowser.Model.Entities;
|
||||||
using MediaBrowser.Model.Globalization;
|
using MediaBrowser.Model.Globalization;
|
||||||
|
using MediaBrowser.Model.Querying;
|
||||||
using MediaBrowser.Model.Xml;
|
using MediaBrowser.Model.Xml;
|
||||||
using MediaBrowser.Model.Extensions;
|
using Microsoft.Extensions.Logging;
|
||||||
using MediaBrowser.Controller.LiveTv;
|
|
||||||
|
|
||||||
namespace Emby.Dlna.ContentDirectory
|
namespace Emby.Dlna.ContentDirectory
|
||||||
{
|
{
|
||||||
@ -197,9 +192,7 @@ namespace Emby.Dlna.ContentDirectory
|
|||||||
|
|
||||||
public string GetValueOrDefault(IDictionary<string, string> sparams, string key, string defaultValue)
|
public string GetValueOrDefault(IDictionary<string, string> sparams, string key, string defaultValue)
|
||||||
{
|
{
|
||||||
string val;
|
if (sparams.TryGetValue(key, out string val))
|
||||||
|
|
||||||
if (sparams.TryGetValue(key, out val))
|
|
||||||
{
|
{
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
@ -221,14 +214,12 @@ namespace Emby.Dlna.ContentDirectory
|
|||||||
int? requestedCount = null;
|
int? requestedCount = null;
|
||||||
int? start = 0;
|
int? start = 0;
|
||||||
|
|
||||||
int requestedVal;
|
if (sparams.ContainsKey("RequestedCount") && int.TryParse(sparams["RequestedCount"], out var requestedVal) && requestedVal > 0)
|
||||||
if (sparams.ContainsKey("RequestedCount") && int.TryParse(sparams["RequestedCount"], out requestedVal) && requestedVal > 0)
|
|
||||||
{
|
{
|
||||||
requestedCount = requestedVal;
|
requestedCount = requestedVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
int startVal;
|
if (sparams.ContainsKey("StartingIndex") && int.TryParse(sparams["StartingIndex"], out var startVal) && startVal > 0)
|
||||||
if (sparams.ContainsKey("StartingIndex") && int.TryParse(sparams["StartingIndex"], out startVal) && startVal > 0)
|
|
||||||
{
|
{
|
||||||
start = startVal;
|
start = startVal;
|
||||||
}
|
}
|
||||||
@ -247,7 +238,7 @@ namespace Emby.Dlna.ContentDirectory
|
|||||||
|
|
||||||
var dlnaOptions = _config.GetDlnaConfiguration();
|
var dlnaOptions = _config.GetDlnaConfiguration();
|
||||||
|
|
||||||
using (XmlWriter writer = XmlWriter.Create(builder, settings))
|
using (var writer = XmlWriter.Create(builder, settings))
|
||||||
{
|
{
|
||||||
//writer.WriteStartDocument();
|
//writer.WriteStartDocument();
|
||||||
|
|
||||||
@ -311,7 +302,7 @@ namespace Emby.Dlna.ContentDirectory
|
|||||||
|
|
||||||
var resXML = builder.ToString();
|
var resXML = builder.ToString();
|
||||||
|
|
||||||
return new []
|
return new[]
|
||||||
{
|
{
|
||||||
new KeyValuePair<string,string>("Result", resXML),
|
new KeyValuePair<string,string>("Result", resXML),
|
||||||
new KeyValuePair<string,string>("NumberReturned", provided.ToString(_usCulture)),
|
new KeyValuePair<string,string>("NumberReturned", provided.ToString(_usCulture)),
|
||||||
@ -339,14 +330,12 @@ namespace Emby.Dlna.ContentDirectory
|
|||||||
int? requestedCount = null;
|
int? requestedCount = null;
|
||||||
int? start = 0;
|
int? start = 0;
|
||||||
|
|
||||||
int requestedVal;
|
if (sparams.ContainsKey("RequestedCount") && int.TryParse(sparams["RequestedCount"], out var requestedVal) && requestedVal > 0)
|
||||||
if (sparams.ContainsKey("RequestedCount") && int.TryParse(sparams["RequestedCount"], out requestedVal) && requestedVal > 0)
|
|
||||||
{
|
{
|
||||||
requestedCount = requestedVal;
|
requestedCount = requestedVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
int startVal;
|
if (sparams.ContainsKey("StartingIndex") && int.TryParse(sparams["StartingIndex"], out var startVal) && startVal > 0)
|
||||||
if (sparams.ContainsKey("StartingIndex") && int.TryParse(sparams["StartingIndex"], out startVal) && startVal > 0)
|
|
||||||
{
|
{
|
||||||
start = startVal;
|
start = startVal;
|
||||||
}
|
}
|
||||||
@ -363,7 +352,7 @@ namespace Emby.Dlna.ContentDirectory
|
|||||||
int totalCount = 0;
|
int totalCount = 0;
|
||||||
int provided = 0;
|
int provided = 0;
|
||||||
|
|
||||||
using (XmlWriter writer = XmlWriter.Create(builder, settings))
|
using (var writer = XmlWriter.Create(builder, settings))
|
||||||
{
|
{
|
||||||
//writer.WriteStartDocument();
|
//writer.WriteStartDocument();
|
||||||
|
|
||||||
@ -1144,7 +1133,7 @@ namespace Emby.Dlna.ContentDirectory
|
|||||||
StartIndex = query.StartIndex,
|
StartIndex = query.StartIndex,
|
||||||
UserId = query.User.Id
|
UserId = query.User.Id
|
||||||
|
|
||||||
}, new [] { parent }, query.DtoOptions);
|
}, new[] { parent }, query.DtoOptions);
|
||||||
|
|
||||||
return ToResult(result);
|
return ToResult(result);
|
||||||
}
|
}
|
||||||
@ -1298,7 +1287,6 @@ namespace Emby.Dlna.ContentDirectory
|
|||||||
|
|
||||||
private ServerItem ParseItemId(string id, User user)
|
private ServerItem ParseItemId(string id, User user)
|
||||||
{
|
{
|
||||||
Guid itemId;
|
|
||||||
StubType? stubType = null;
|
StubType? stubType = null;
|
||||||
|
|
||||||
// After using PlayTo, MediaMonkey sends a request to the server trying to get item info
|
// After using PlayTo, MediaMonkey sends a request to the server trying to get item info
|
||||||
@ -1324,7 +1312,7 @@ namespace Emby.Dlna.ContentDirectory
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Guid.TryParse(id, out itemId))
|
if (Guid.TryParse(id, out var itemId))
|
||||||
{
|
{
|
||||||
var item = _libraryManager.GetItemById(itemId);
|
var item = _libraryManager.GetItemById(itemId);
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
using Emby.Dlna.Common;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using Emby.Dlna.Common;
|
||||||
|
|
||||||
namespace Emby.Dlna.ContentDirectory
|
namespace Emby.Dlna.ContentDirectory
|
||||||
{
|
{
|
||||||
@ -7,7 +7,7 @@ namespace Emby.Dlna.ContentDirectory
|
|||||||
{
|
{
|
||||||
public IEnumerable<ServiceAction> GetActions()
|
public IEnumerable<ServiceAction> GetActions()
|
||||||
{
|
{
|
||||||
return new []
|
return new[]
|
||||||
{
|
{
|
||||||
GetSearchCapabilitiesAction(),
|
GetSearchCapabilitiesAction(),
|
||||||
GetSortCapabilitiesAction(),
|
GetSortCapabilitiesAction(),
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
|
||||||
namespace Emby.Dlna
|
namespace Emby.Dlna
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace Emby.Dlna
|
namespace Emby.Dlna
|
||||||
{
|
{
|
||||||
@ -15,4 +15,4 @@ namespace Emby.Dlna
|
|||||||
Headers = new Dictionary<string, string>();
|
Headers = new Dictionary<string, string>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,11 @@
|
|||||||
using MediaBrowser.Model.Extensions;
|
using System;
|
||||||
|
using System.Globalization;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Xml;
|
||||||
|
using Emby.Dlna.Configuration;
|
||||||
|
using Emby.Dlna.ContentDirectory;
|
||||||
using MediaBrowser.Controller.Channels;
|
using MediaBrowser.Controller.Channels;
|
||||||
using MediaBrowser.Controller.Drawing;
|
using MediaBrowser.Controller.Drawing;
|
||||||
using MediaBrowser.Controller.Entities;
|
using MediaBrowser.Controller.Entities;
|
||||||
@ -6,23 +13,15 @@ using MediaBrowser.Controller.Entities.Audio;
|
|||||||
using MediaBrowser.Controller.Entities.Movies;
|
using MediaBrowser.Controller.Entities.Movies;
|
||||||
using MediaBrowser.Controller.Entities.TV;
|
using MediaBrowser.Controller.Entities.TV;
|
||||||
using MediaBrowser.Controller.Library;
|
using MediaBrowser.Controller.Library;
|
||||||
|
using MediaBrowser.Controller.MediaEncoding;
|
||||||
using MediaBrowser.Controller.Playlists;
|
using MediaBrowser.Controller.Playlists;
|
||||||
using Emby.Dlna.ContentDirectory;
|
|
||||||
using MediaBrowser.Model.Dlna;
|
using MediaBrowser.Model.Dlna;
|
||||||
using MediaBrowser.Model.Drawing;
|
using MediaBrowser.Model.Drawing;
|
||||||
using MediaBrowser.Model.Entities;
|
using MediaBrowser.Model.Entities;
|
||||||
using Microsoft.Extensions.Logging;
|
using MediaBrowser.Model.Extensions;
|
||||||
using MediaBrowser.Model.Net;
|
|
||||||
using System;
|
|
||||||
using System.Globalization;
|
|
||||||
using System.IO;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Xml;
|
|
||||||
using MediaBrowser.Controller.MediaEncoding;
|
|
||||||
using Emby.Dlna.Configuration;
|
|
||||||
using MediaBrowser.Model.Globalization;
|
using MediaBrowser.Model.Globalization;
|
||||||
|
using MediaBrowser.Model.Net;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
namespace Emby.Dlna.Didl
|
namespace Emby.Dlna.Didl
|
||||||
{
|
{
|
||||||
@ -79,7 +78,7 @@ namespace Emby.Dlna.Didl
|
|||||||
|
|
||||||
using (StringWriter builder = new StringWriterWithEncoding(Encoding.UTF8))
|
using (StringWriter builder = new StringWriterWithEncoding(Encoding.UTF8))
|
||||||
{
|
{
|
||||||
using (XmlWriter writer = XmlWriter.Create(builder, settings))
|
using (var writer = XmlWriter.Create(builder, settings))
|
||||||
{
|
{
|
||||||
//writer.WriteStartDocument();
|
//writer.WriteStartDocument();
|
||||||
|
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
using MediaBrowser.Model.Extensions;
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using MediaBrowser.Model.Extensions;
|
||||||
|
|
||||||
namespace Emby.Dlna.Didl
|
namespace Emby.Dlna.Didl
|
||||||
{
|
{
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace Emby.Dlna.Didl
|
namespace Emby.Dlna.Didl
|
||||||
{
|
{
|
||||||
@ -53,9 +51,6 @@ namespace Emby.Dlna.Didl
|
|||||||
_encoding = encoding;
|
_encoding = encoding;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override Encoding Encoding
|
public override Encoding Encoding => (null == _encoding) ? base.Encoding : _encoding;
|
||||||
{
|
|
||||||
get { return (null == _encoding) ? base.Encoding : _encoding; }
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,24 +1,22 @@
|
|||||||
using MediaBrowser.Common.Configuration;
|
|
||||||
using MediaBrowser.Common.Extensions;
|
|
||||||
using MediaBrowser.Controller;
|
|
||||||
using MediaBrowser.Controller.Dlna;
|
|
||||||
using MediaBrowser.Controller.Drawing;
|
|
||||||
using MediaBrowser.Controller.Plugins;
|
|
||||||
using Emby.Dlna.Profiles;
|
|
||||||
using Emby.Dlna.Server;
|
|
||||||
using MediaBrowser.Model.Dlna;
|
|
||||||
using MediaBrowser.Model.Drawing;
|
|
||||||
using Microsoft.Extensions.Logging;
|
|
||||||
using MediaBrowser.Model.Serialization;
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
|
using Emby.Dlna.Profiles;
|
||||||
|
using Emby.Dlna.Server;
|
||||||
|
using MediaBrowser.Common.Configuration;
|
||||||
|
using MediaBrowser.Common.Extensions;
|
||||||
|
using MediaBrowser.Controller;
|
||||||
|
using MediaBrowser.Controller.Dlna;
|
||||||
|
using MediaBrowser.Controller.Drawing;
|
||||||
|
using MediaBrowser.Model.Dlna;
|
||||||
|
using MediaBrowser.Model.Drawing;
|
||||||
using MediaBrowser.Model.IO;
|
using MediaBrowser.Model.IO;
|
||||||
using MediaBrowser.Model.Reflection;
|
using MediaBrowser.Model.Reflection;
|
||||||
using MediaBrowser.Model.Extensions;
|
using MediaBrowser.Model.Serialization;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
namespace Emby.Dlna
|
namespace Emby.Dlna
|
||||||
{
|
{
|
||||||
@ -34,16 +32,17 @@ namespace Emby.Dlna
|
|||||||
|
|
||||||
private readonly Dictionary<string, Tuple<InternalProfileInfo, DeviceProfile>> _profiles = new Dictionary<string, Tuple<InternalProfileInfo, DeviceProfile>>(StringComparer.Ordinal);
|
private readonly Dictionary<string, Tuple<InternalProfileInfo, DeviceProfile>> _profiles = new Dictionary<string, Tuple<InternalProfileInfo, DeviceProfile>>(StringComparer.Ordinal);
|
||||||
|
|
||||||
public DlnaManager(IXmlSerializer xmlSerializer,
|
public DlnaManager(
|
||||||
|
IXmlSerializer xmlSerializer,
|
||||||
IFileSystem fileSystem,
|
IFileSystem fileSystem,
|
||||||
IApplicationPaths appPaths,
|
IApplicationPaths appPaths,
|
||||||
ILogger logger,
|
ILoggerFactory loggerFactory,
|
||||||
IJsonSerializer jsonSerializer, IServerApplicationHost appHost, IAssemblyInfo assemblyInfo)
|
IJsonSerializer jsonSerializer, IServerApplicationHost appHost, IAssemblyInfo assemblyInfo)
|
||||||
{
|
{
|
||||||
_xmlSerializer = xmlSerializer;
|
_xmlSerializer = xmlSerializer;
|
||||||
_fileSystem = fileSystem;
|
_fileSystem = fileSystem;
|
||||||
_appPaths = appPaths;
|
_appPaths = appPaths;
|
||||||
_logger = logger;
|
_logger = loggerFactory.CreateLogger("Dlna");
|
||||||
_jsonSerializer = jsonSerializer;
|
_jsonSerializer = jsonSerializer;
|
||||||
_appHost = appHost;
|
_appHost = appHost;
|
||||||
_assemblyInfo = assemblyInfo;
|
_assemblyInfo = assemblyInfo;
|
||||||
@ -241,9 +240,7 @@ namespace Emby.Dlna
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
string value;
|
if (headers.TryGetValue(header.Name, out string value))
|
||||||
|
|
||||||
if (headers.TryGetValue(header.Name, out value))
|
|
||||||
{
|
{
|
||||||
switch (header.Match)
|
switch (header.Match)
|
||||||
{
|
{
|
||||||
@ -263,21 +260,9 @@ namespace Emby.Dlna
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private string UserProfilesPath
|
private string UserProfilesPath => Path.Combine(_appPaths.ConfigurationDirectoryPath, "dlna", "user");
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return Path.Combine(_appPaths.ConfigurationDirectoryPath, "dlna", "user");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private string SystemProfilesPath
|
private string SystemProfilesPath => Path.Combine(_appPaths.ConfigurationDirectoryPath, "dlna", "system");
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return Path.Combine(_appPaths.ConfigurationDirectoryPath, "dlna", "system");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private IEnumerable<DeviceProfile> GetProfiles(string path, DeviceProfileType type)
|
private IEnumerable<DeviceProfile> GetProfiles(string path, DeviceProfileType type)
|
||||||
{
|
{
|
||||||
@ -302,8 +287,7 @@ namespace Emby.Dlna
|
|||||||
{
|
{
|
||||||
lock (_profiles)
|
lock (_profiles)
|
||||||
{
|
{
|
||||||
Tuple<InternalProfileInfo, DeviceProfile> profileTuple;
|
if (_profiles.TryGetValue(path, out Tuple<InternalProfileInfo, DeviceProfile> profileTuple))
|
||||||
if (_profiles.TryGetValue(path, out profileTuple))
|
|
||||||
{
|
{
|
||||||
return profileTuple.Item2;
|
return profileTuple.Item2;
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="..\SharedVersion.cs" Link="SharedVersion.cs" />
|
<Compile Include="..\SharedVersion.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace Emby.Dlna
|
namespace Emby.Dlna
|
||||||
{
|
{
|
||||||
|
@ -1,7 +1,3 @@
|
|||||||
using MediaBrowser.Common.Extensions;
|
|
||||||
using MediaBrowser.Common.Net;
|
|
||||||
using MediaBrowser.Controller.Dlna;
|
|
||||||
using Microsoft.Extensions.Logging;
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
@ -9,6 +5,9 @@ using System.Globalization;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using MediaBrowser.Common.Extensions;
|
||||||
|
using MediaBrowser.Common.Net;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
namespace Emby.Dlna.Eventing
|
namespace Emby.Dlna.Eventing
|
||||||
{
|
{
|
||||||
@ -83,9 +82,7 @@ namespace Emby.Dlna.Eventing
|
|||||||
// Starts with SECOND-
|
// Starts with SECOND-
|
||||||
header = header.Split('-').Last();
|
header = header.Split('-').Last();
|
||||||
|
|
||||||
int val;
|
if (int.TryParse(header, NumberStyles.Integer, _usCulture, out var val))
|
||||||
|
|
||||||
if (int.TryParse(header, NumberStyles.Integer, _usCulture, out val))
|
|
||||||
{
|
{
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
@ -98,8 +95,7 @@ namespace Emby.Dlna.Eventing
|
|||||||
{
|
{
|
||||||
_logger.LogDebug("Cancelling event subscription {0}", subscriptionId);
|
_logger.LogDebug("Cancelling event subscription {0}", subscriptionId);
|
||||||
|
|
||||||
EventSubscription sub;
|
_subscriptions.TryRemove(subscriptionId, out EventSubscription sub);
|
||||||
_subscriptions.TryRemove(subscriptionId, out sub);
|
|
||||||
|
|
||||||
return new EventSubscriptionResponse
|
return new EventSubscriptionResponse
|
||||||
{
|
{
|
||||||
@ -130,9 +126,7 @@ namespace Emby.Dlna.Eventing
|
|||||||
|
|
||||||
private EventSubscription GetSubscription(string id, bool throwOnMissing)
|
private EventSubscription GetSubscription(string id, bool throwOnMissing)
|
||||||
{
|
{
|
||||||
EventSubscription e;
|
if (!_subscriptions.TryGetValue(id, out EventSubscription e) && throwOnMissing)
|
||||||
|
|
||||||
if (!_subscriptions.TryGetValue(id, out e) && throwOnMissing)
|
|
||||||
{
|
{
|
||||||
throw new ResourceNotFoundException("Event with Id " + id + " not found.");
|
throw new ResourceNotFoundException("Event with Id " + id + " not found.");
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace Emby.Dlna.Eventing
|
namespace Emby.Dlna.Eventing
|
||||||
{
|
{
|
||||||
@ -23,12 +23,6 @@ namespace Emby.Dlna.Eventing
|
|||||||
TriggerCount++;
|
TriggerCount++;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool IsExpired
|
public bool IsExpired => SubscriptionTime.AddSeconds(TimeoutSeconds) >= DateTime.UtcNow;
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return SubscriptionTime.AddSeconds(TimeoutSeconds) >= DateTime.UtcNow;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
|
|
||||||
namespace Emby.Dlna
|
namespace Emby.Dlna
|
||||||
{
|
{
|
||||||
public interface IConnectionManager : IEventManager, IUpnpService
|
public interface IConnectionManager : IEventManager, IUpnpService
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
|
|
||||||
namespace Emby.Dlna
|
namespace Emby.Dlna
|
||||||
{
|
{
|
||||||
public interface IContentDirectory : IEventManager, IUpnpService
|
public interface IContentDirectory : IEventManager, IUpnpService
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
|
|
||||||
namespace Emby.Dlna
|
namespace Emby.Dlna
|
||||||
{
|
{
|
||||||
public interface IEventManager
|
public interface IEventManager
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
|
|
||||||
namespace Emby.Dlna
|
namespace Emby.Dlna
|
||||||
{
|
{
|
||||||
public interface IMediaReceiverRegistrar : IEventManager, IUpnpService
|
public interface IMediaReceiverRegistrar : IEventManager, IUpnpService
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace Emby.Dlna
|
namespace Emby.Dlna
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,10 @@
|
|||||||
using MediaBrowser.Common.Configuration;
|
using System;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Emby.Dlna.PlayTo;
|
||||||
|
using Emby.Dlna.Ssdp;
|
||||||
|
using MediaBrowser.Common.Configuration;
|
||||||
using MediaBrowser.Common.Extensions;
|
using MediaBrowser.Common.Extensions;
|
||||||
using MediaBrowser.Common.Net;
|
using MediaBrowser.Common.Net;
|
||||||
using MediaBrowser.Controller;
|
using MediaBrowser.Controller;
|
||||||
@ -6,25 +12,19 @@ using MediaBrowser.Controller.Configuration;
|
|||||||
using MediaBrowser.Controller.Dlna;
|
using MediaBrowser.Controller.Dlna;
|
||||||
using MediaBrowser.Controller.Drawing;
|
using MediaBrowser.Controller.Drawing;
|
||||||
using MediaBrowser.Controller.Library;
|
using MediaBrowser.Controller.Library;
|
||||||
|
using MediaBrowser.Controller.MediaEncoding;
|
||||||
using MediaBrowser.Controller.Plugins;
|
using MediaBrowser.Controller.Plugins;
|
||||||
using MediaBrowser.Controller.Session;
|
using MediaBrowser.Controller.Session;
|
||||||
using MediaBrowser.Controller.TV;
|
using MediaBrowser.Controller.TV;
|
||||||
using Emby.Dlna.PlayTo;
|
|
||||||
using Emby.Dlna.Ssdp;
|
|
||||||
using Microsoft.Extensions.Logging;
|
|
||||||
using System;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using MediaBrowser.Controller.MediaEncoding;
|
|
||||||
using MediaBrowser.Model.Dlna;
|
using MediaBrowser.Model.Dlna;
|
||||||
using MediaBrowser.Model.Globalization;
|
using MediaBrowser.Model.Globalization;
|
||||||
using MediaBrowser.Model.Net;
|
using MediaBrowser.Model.Net;
|
||||||
using MediaBrowser.Model.System;
|
using MediaBrowser.Model.System;
|
||||||
using MediaBrowser.Model.Threading;
|
using MediaBrowser.Model.Threading;
|
||||||
using MediaBrowser.Model.Xml;
|
using MediaBrowser.Model.Xml;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
using Rssdp;
|
using Rssdp;
|
||||||
using Rssdp.Infrastructure;
|
using Rssdp.Infrastructure;
|
||||||
using System.Threading;
|
|
||||||
|
|
||||||
namespace Emby.Dlna.Main
|
namespace Emby.Dlna.Main
|
||||||
{
|
{
|
||||||
@ -282,7 +282,7 @@ namespace Emby.Dlna.Main
|
|||||||
SetProperies(device, fullService);
|
SetProperies(device, fullService);
|
||||||
_Publisher.AddDevice(device);
|
_Publisher.AddDevice(device);
|
||||||
|
|
||||||
var embeddedDevices = new []
|
var embeddedDevices = new[]
|
||||||
{
|
{
|
||||||
"urn:schemas-upnp-org:service:ContentDirectory:1",
|
"urn:schemas-upnp-org:service:ContentDirectory:1",
|
||||||
"urn:schemas-upnp-org:service:ConnectionManager:1",
|
"urn:schemas-upnp-org:service:ConnectionManager:1",
|
||||||
@ -308,8 +308,7 @@ namespace Emby.Dlna.Main
|
|||||||
|
|
||||||
private string CreateUuid(string text)
|
private string CreateUuid(string text)
|
||||||
{
|
{
|
||||||
Guid guid;
|
if (!Guid.TryParse(text, out var guid))
|
||||||
if (!Guid.TryParse(text, out guid))
|
|
||||||
{
|
{
|
||||||
guid = text.GetMD5();
|
guid = text.GetMD5();
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,10 @@
|
|||||||
using MediaBrowser.Common.Extensions;
|
|
||||||
using MediaBrowser.Controller.Configuration;
|
|
||||||
using Emby.Dlna.Server;
|
|
||||||
using Emby.Dlna.Service;
|
|
||||||
using Microsoft.Extensions.Logging;
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using Emby.Dlna.Service;
|
||||||
|
using MediaBrowser.Common.Extensions;
|
||||||
|
using MediaBrowser.Controller.Configuration;
|
||||||
using MediaBrowser.Model.Xml;
|
using MediaBrowser.Model.Xml;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
namespace Emby.Dlna.MediaReceiverRegistrar
|
namespace Emby.Dlna.MediaReceiverRegistrar
|
||||||
{
|
{
|
||||||
|
@ -1,11 +1,9 @@
|
|||||||
using MediaBrowser.Common.Net;
|
|
||||||
using MediaBrowser.Controller.Configuration;
|
|
||||||
using MediaBrowser.Controller.Dlna;
|
|
||||||
using Emby.Dlna.Service;
|
|
||||||
using Microsoft.Extensions.Logging;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using Emby.Dlna.Service;
|
||||||
|
using MediaBrowser.Common.Net;
|
||||||
|
using MediaBrowser.Controller.Configuration;
|
||||||
using MediaBrowser.Model.Xml;
|
using MediaBrowser.Model.Xml;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
namespace Emby.Dlna.MediaReceiverRegistrar
|
namespace Emby.Dlna.MediaReceiverRegistrar
|
||||||
{
|
{
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
using Emby.Dlna.Common;
|
using Emby.Dlna.Common;
|
||||||
using Emby.Dlna.Service;
|
using Emby.Dlna.Service;
|
||||||
using System.Collections.Generic;
|
|
||||||
|
|
||||||
namespace Emby.Dlna.MediaReceiverRegistrar
|
namespace Emby.Dlna.MediaReceiverRegistrar
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
using Emby.Dlna.Common;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using Emby.Dlna.Common;
|
||||||
|
|
||||||
namespace Emby.Dlna.MediaReceiverRegistrar
|
namespace Emby.Dlna.MediaReceiverRegistrar
|
||||||
{
|
{
|
||||||
@ -7,7 +7,7 @@ namespace Emby.Dlna.MediaReceiverRegistrar
|
|||||||
{
|
{
|
||||||
public IEnumerable<ServiceAction> GetActions()
|
public IEnumerable<ServiceAction> GetActions()
|
||||||
{
|
{
|
||||||
return new []
|
return new[]
|
||||||
{
|
{
|
||||||
GetIsValidated(),
|
GetIsValidated(),
|
||||||
GetIsAuthorized(),
|
GetIsAuthorized(),
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace Emby.Dlna.PlayTo
|
namespace Emby.Dlna.PlayTo
|
||||||
{
|
{
|
||||||
public class CurrentIdEventArgs : EventArgs
|
public class CurrentIdEventArgs : EventArgs
|
||||||
{
|
{
|
||||||
public string Id { get; set; }
|
public string Id { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,21 +1,17 @@
|
|||||||
using MediaBrowser.Common.Net;
|
|
||||||
using MediaBrowser.Controller.Configuration;
|
|
||||||
using Emby.Dlna.Common;
|
|
||||||
using Emby.Dlna.Ssdp;
|
|
||||||
using Microsoft.Extensions.Logging;
|
|
||||||
using MediaBrowser.Model.Net;
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Net;
|
|
||||||
using System.Security;
|
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Xml.Linq;
|
using System.Xml.Linq;
|
||||||
|
using Emby.Dlna.Common;
|
||||||
using Emby.Dlna.Server;
|
using Emby.Dlna.Server;
|
||||||
|
using Emby.Dlna.Ssdp;
|
||||||
|
using MediaBrowser.Common.Net;
|
||||||
|
using MediaBrowser.Controller.Configuration;
|
||||||
using MediaBrowser.Model.Threading;
|
using MediaBrowser.Model.Threading;
|
||||||
using MediaBrowser.Model.Extensions;
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
namespace Emby.Dlna.PlayTo
|
namespace Emby.Dlna.PlayTo
|
||||||
{
|
{
|
||||||
@ -39,10 +35,7 @@ namespace Emby.Dlna.PlayTo
|
|||||||
RefreshVolumeIfNeeded();
|
RefreshVolumeIfNeeded();
|
||||||
return _volume;
|
return _volume;
|
||||||
}
|
}
|
||||||
set
|
set => _volume = value;
|
||||||
{
|
|
||||||
_volume = value;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public TimeSpan? Duration { get; set; }
|
public TimeSpan? Duration { get; set; }
|
||||||
@ -50,41 +43,17 @@ namespace Emby.Dlna.PlayTo
|
|||||||
private TimeSpan _position = TimeSpan.FromSeconds(0);
|
private TimeSpan _position = TimeSpan.FromSeconds(0);
|
||||||
public TimeSpan Position
|
public TimeSpan Position
|
||||||
{
|
{
|
||||||
get
|
get => _position;
|
||||||
{
|
set => _position = value;
|
||||||
return _position;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
_position = value;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public TRANSPORTSTATE TransportState { get; private set; }
|
public TRANSPORTSTATE TransportState { get; private set; }
|
||||||
|
|
||||||
public bool IsPlaying
|
public bool IsPlaying => TransportState == TRANSPORTSTATE.PLAYING;
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return TransportState == TRANSPORTSTATE.PLAYING;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool IsPaused
|
public bool IsPaused => TransportState == TRANSPORTSTATE.PAUSED || TransportState == TRANSPORTSTATE.PAUSED_PLAYBACK;
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return TransportState == TRANSPORTSTATE.PAUSED || TransportState == TRANSPORTSTATE.PAUSED_PLAYBACK;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool IsStopped
|
public bool IsStopped => TransportState == TRANSPORTSTATE.STOPPED;
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return TransportState == TRANSPORTSTATE.STOPPED;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
@ -620,9 +589,7 @@ namespace Emby.Dlna.PlayTo
|
|||||||
|
|
||||||
if (transportStateValue != null)
|
if (transportStateValue != null)
|
||||||
{
|
{
|
||||||
TRANSPORTSTATE state;
|
if (Enum.TryParse(transportStateValue, true, out TRANSPORTSTATE state))
|
||||||
|
|
||||||
if (Enum.TryParse(transportStateValue, true, out state))
|
|
||||||
{
|
{
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
using Emby.Dlna.Common;
|
|
||||||
using MediaBrowser.Model.Dlna;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using Emby.Dlna.Common;
|
||||||
|
using MediaBrowser.Model.Dlna;
|
||||||
|
|
||||||
namespace Emby.Dlna.PlayTo
|
namespace Emby.Dlna.PlayTo
|
||||||
{
|
{
|
||||||
@ -34,26 +34,14 @@ namespace Emby.Dlna.PlayTo
|
|||||||
private string _baseUrl = string.Empty;
|
private string _baseUrl = string.Empty;
|
||||||
public string BaseUrl
|
public string BaseUrl
|
||||||
{
|
{
|
||||||
get
|
get => _baseUrl;
|
||||||
{
|
set => _baseUrl = value;
|
||||||
return _baseUrl;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
_baseUrl = value;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public DeviceIcon Icon { get; set; }
|
public DeviceIcon Icon { get; set; }
|
||||||
|
|
||||||
private readonly List<DeviceService> _services = new List<DeviceService>();
|
private readonly List<DeviceService> _services = new List<DeviceService>();
|
||||||
public List<DeviceService> Services
|
public List<DeviceService> Services => _services;
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _services;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public DeviceIdentification ToDeviceIdentification()
|
public DeviceIdentification ToDeviceIdentification()
|
||||||
{
|
{
|
||||||
|
@ -1,28 +1,25 @@
|
|||||||
using MediaBrowser.Controller.Dlna;
|
|
||||||
using MediaBrowser.Controller.Drawing;
|
|
||||||
using MediaBrowser.Controller.Entities;
|
|
||||||
using MediaBrowser.Controller.Library;
|
|
||||||
using MediaBrowser.Controller.Session;
|
|
||||||
using Emby.Dlna.Didl;
|
|
||||||
using MediaBrowser.Model.Dlna;
|
|
||||||
using MediaBrowser.Model.Dto;
|
|
||||||
using MediaBrowser.Model.Entities;
|
|
||||||
using Microsoft.Extensions.Logging;
|
|
||||||
using MediaBrowser.Model.Session;
|
|
||||||
using MediaBrowser.Model.System;
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using Emby.Dlna.Didl;
|
||||||
using MediaBrowser.Common.Configuration;
|
using MediaBrowser.Common.Configuration;
|
||||||
|
using MediaBrowser.Controller.Dlna;
|
||||||
|
using MediaBrowser.Controller.Drawing;
|
||||||
|
using MediaBrowser.Controller.Entities;
|
||||||
|
using MediaBrowser.Controller.Library;
|
||||||
using MediaBrowser.Controller.MediaEncoding;
|
using MediaBrowser.Controller.MediaEncoding;
|
||||||
|
using MediaBrowser.Controller.Session;
|
||||||
|
using MediaBrowser.Model.Dlna;
|
||||||
|
using MediaBrowser.Model.Dto;
|
||||||
|
using MediaBrowser.Model.Entities;
|
||||||
using MediaBrowser.Model.Events;
|
using MediaBrowser.Model.Events;
|
||||||
using MediaBrowser.Model.Globalization;
|
using MediaBrowser.Model.Globalization;
|
||||||
using MediaBrowser.Model.Extensions;
|
|
||||||
using System.Net.Http;
|
|
||||||
using MediaBrowser.Model.Services;
|
using MediaBrowser.Model.Services;
|
||||||
|
using MediaBrowser.Model.Session;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
namespace Emby.Dlna.PlayTo
|
namespace Emby.Dlna.PlayTo
|
||||||
{
|
{
|
||||||
@ -47,18 +44,9 @@ namespace Emby.Dlna.PlayTo
|
|||||||
private readonly string _accessToken;
|
private readonly string _accessToken;
|
||||||
private readonly DateTime _creationTime;
|
private readonly DateTime _creationTime;
|
||||||
|
|
||||||
public bool IsSessionActive
|
public bool IsSessionActive => !_disposed && _device != null;
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return !_disposed && _device != null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool SupportsMediaControl
|
public bool SupportsMediaControl => IsSessionActive;
|
||||||
{
|
|
||||||
get { return IsSessionActive; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public PlayToController(SessionInfo session, ISessionManager sessionManager, ILibraryManager libraryManager, ILogger logger, IDlnaManager dlnaManager, IUserManager userManager, IImageProcessor imageProcessor, string serverAddress, string accessToken, IDeviceDiscovery deviceDiscovery, IUserDataManager userDataManager, ILocalizationManager localization, IMediaSourceManager mediaSourceManager, IConfigurationManager config, IMediaEncoder mediaEncoder)
|
public PlayToController(SessionInfo session, ISessionManager sessionManager, ILibraryManager libraryManager, ILogger logger, IDlnaManager dlnaManager, IUserManager userManager, IImageProcessor imageProcessor, string serverAddress, string accessToken, IDeviceDiscovery deviceDiscovery, IUserDataManager userDataManager, ILocalizationManager localization, IMediaSourceManager mediaSourceManager, IConfigurationManager config, IMediaEncoder mediaEncoder)
|
||||||
{
|
{
|
||||||
@ -110,14 +98,11 @@ namespace Emby.Dlna.PlayTo
|
|||||||
{
|
{
|
||||||
var info = e.Argument;
|
var info = e.Argument;
|
||||||
|
|
||||||
string nts;
|
info.Headers.TryGetValue("NTS", out string nts);
|
||||||
info.Headers.TryGetValue("NTS", out nts);
|
|
||||||
|
|
||||||
string usn;
|
if (!info.Headers.TryGetValue("USN", out string usn)) usn = string.Empty;
|
||||||
if (!info.Headers.TryGetValue("USN", out usn)) usn = string.Empty;
|
|
||||||
|
|
||||||
string nt;
|
if (!info.Headers.TryGetValue("NT", out string nt)) nt = string.Empty;
|
||||||
if (!info.Headers.TryGetValue("NT", out nt)) nt = string.Empty;
|
|
||||||
|
|
||||||
if (usn.IndexOf(_device.Properties.UUID, StringComparison.OrdinalIgnoreCase) != -1 &&
|
if (usn.IndexOf(_device.Properties.UUID, StringComparison.OrdinalIgnoreCase) != -1 &&
|
||||||
!_disposed)
|
!_disposed)
|
||||||
@ -439,13 +424,7 @@ namespace Emby.Dlna.PlayTo
|
|||||||
|
|
||||||
private int _currentPlaylistIndex;
|
private int _currentPlaylistIndex;
|
||||||
private readonly List<PlaylistItem> _playlist = new List<PlaylistItem>();
|
private readonly List<PlaylistItem> _playlist = new List<PlaylistItem>();
|
||||||
private List<PlaylistItem> Playlist
|
private List<PlaylistItem> Playlist => _playlist;
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _playlist;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void AddItemFromId(Guid id, List<BaseItem> list)
|
private void AddItemFromId(Guid id, List<BaseItem> list)
|
||||||
{
|
{
|
||||||
@ -641,9 +620,7 @@ namespace Emby.Dlna.PlayTo
|
|||||||
|
|
||||||
private Task SendGeneralCommand(GeneralCommand command, CancellationToken cancellationToken)
|
private Task SendGeneralCommand(GeneralCommand command, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
GeneralCommandType commandType;
|
if (Enum.TryParse(command.Name, true, out GeneralCommandType commandType))
|
||||||
|
|
||||||
if (Enum.TryParse(command.Name, true, out commandType))
|
|
||||||
{
|
{
|
||||||
switch (commandType)
|
switch (commandType)
|
||||||
{
|
{
|
||||||
@ -659,13 +636,9 @@ namespace Emby.Dlna.PlayTo
|
|||||||
return _device.ToggleMute(cancellationToken);
|
return _device.ToggleMute(cancellationToken);
|
||||||
case GeneralCommandType.SetAudioStreamIndex:
|
case GeneralCommandType.SetAudioStreamIndex:
|
||||||
{
|
{
|
||||||
string arg;
|
if (command.Arguments.TryGetValue("Index", out string arg))
|
||||||
|
|
||||||
if (command.Arguments.TryGetValue("Index", out arg))
|
|
||||||
{
|
{
|
||||||
int val;
|
if (int.TryParse(arg, NumberStyles.Integer, _usCulture, out var val))
|
||||||
|
|
||||||
if (int.TryParse(arg, NumberStyles.Integer, _usCulture, out val))
|
|
||||||
{
|
{
|
||||||
return SetAudioStreamIndex(val);
|
return SetAudioStreamIndex(val);
|
||||||
}
|
}
|
||||||
@ -677,13 +650,9 @@ namespace Emby.Dlna.PlayTo
|
|||||||
}
|
}
|
||||||
case GeneralCommandType.SetSubtitleStreamIndex:
|
case GeneralCommandType.SetSubtitleStreamIndex:
|
||||||
{
|
{
|
||||||
string arg;
|
if (command.Arguments.TryGetValue("Index", out string arg))
|
||||||
|
|
||||||
if (command.Arguments.TryGetValue("Index", out arg))
|
|
||||||
{
|
{
|
||||||
int val;
|
if (int.TryParse(arg, NumberStyles.Integer, _usCulture, out var val))
|
||||||
|
|
||||||
if (int.TryParse(arg, NumberStyles.Integer, _usCulture, out val))
|
|
||||||
{
|
{
|
||||||
return SetSubtitleStreamIndex(val);
|
return SetSubtitleStreamIndex(val);
|
||||||
}
|
}
|
||||||
@ -695,13 +664,9 @@ namespace Emby.Dlna.PlayTo
|
|||||||
}
|
}
|
||||||
case GeneralCommandType.SetVolume:
|
case GeneralCommandType.SetVolume:
|
||||||
{
|
{
|
||||||
string arg;
|
if (command.Arguments.TryGetValue("Volume", out string arg))
|
||||||
|
|
||||||
if (command.Arguments.TryGetValue("Volume", out arg))
|
|
||||||
{
|
{
|
||||||
int volume;
|
if (int.TryParse(arg, NumberStyles.Integer, _usCulture, out var volume))
|
||||||
|
|
||||||
if (int.TryParse(arg, NumberStyles.Integer, _usCulture, out volume))
|
|
||||||
{
|
{
|
||||||
return _device.SetVolume(volume, cancellationToken);
|
return _device.SetVolume(volume, cancellationToken);
|
||||||
}
|
}
|
||||||
@ -896,8 +861,7 @@ namespace Emby.Dlna.PlayTo
|
|||||||
{
|
{
|
||||||
var value = values.Get(name);
|
var value = values.Get(name);
|
||||||
|
|
||||||
int result;
|
if (int.TryParse(value, NumberStyles.Integer, CultureInfo.InvariantCulture, out var result))
|
||||||
if (int.TryParse(value, NumberStyles.Integer, CultureInfo.InvariantCulture, out result))
|
|
||||||
{
|
{
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -909,8 +873,7 @@ namespace Emby.Dlna.PlayTo
|
|||||||
{
|
{
|
||||||
var value = values.Get(name);
|
var value = values.Get(name);
|
||||||
|
|
||||||
long result;
|
if (long.TryParse(value, NumberStyles.Integer, CultureInfo.InvariantCulture, out var result))
|
||||||
if (long.TryParse(value, NumberStyles.Integer, CultureInfo.InvariantCulture, out result))
|
|
||||||
{
|
{
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -1,26 +1,23 @@
|
|||||||
using MediaBrowser.Common.Net;
|
using System;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using MediaBrowser.Common.Extensions;
|
||||||
|
using MediaBrowser.Common.Net;
|
||||||
using MediaBrowser.Controller;
|
using MediaBrowser.Controller;
|
||||||
using MediaBrowser.Controller.Configuration;
|
using MediaBrowser.Controller.Configuration;
|
||||||
using MediaBrowser.Controller.Dlna;
|
using MediaBrowser.Controller.Dlna;
|
||||||
using MediaBrowser.Controller.Drawing;
|
using MediaBrowser.Controller.Drawing;
|
||||||
using MediaBrowser.Controller.Library;
|
using MediaBrowser.Controller.Library;
|
||||||
using MediaBrowser.Controller.Session;
|
|
||||||
using Microsoft.Extensions.Logging;
|
|
||||||
using MediaBrowser.Model.Session;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Net;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using MediaBrowser.Controller.MediaEncoding;
|
using MediaBrowser.Controller.MediaEncoding;
|
||||||
|
using MediaBrowser.Controller.Session;
|
||||||
using MediaBrowser.Model.Dlna;
|
using MediaBrowser.Model.Dlna;
|
||||||
using MediaBrowser.Model.Events;
|
using MediaBrowser.Model.Events;
|
||||||
using MediaBrowser.Model.Globalization;
|
using MediaBrowser.Model.Globalization;
|
||||||
using MediaBrowser.Model.Net;
|
using MediaBrowser.Model.Net;
|
||||||
|
using MediaBrowser.Model.Session;
|
||||||
using MediaBrowser.Model.Threading;
|
using MediaBrowser.Model.Threading;
|
||||||
using System.Threading;
|
using Microsoft.Extensions.Logging;
|
||||||
using MediaBrowser.Common.Extensions;
|
|
||||||
using MediaBrowser.Controller.Devices;
|
|
||||||
|
|
||||||
namespace Emby.Dlna.PlayTo
|
namespace Emby.Dlna.PlayTo
|
||||||
{
|
{
|
||||||
@ -81,11 +78,9 @@ namespace Emby.Dlna.PlayTo
|
|||||||
|
|
||||||
var info = e.Argument;
|
var info = e.Argument;
|
||||||
|
|
||||||
string usn;
|
if (!info.Headers.TryGetValue("USN", out string usn)) usn = string.Empty;
|
||||||
if (!info.Headers.TryGetValue("USN", out usn)) usn = string.Empty;
|
|
||||||
|
|
||||||
string nt;
|
if (!info.Headers.TryGetValue("NT", out string nt)) nt = string.Empty;
|
||||||
if (!info.Headers.TryGetValue("NT", out nt)) nt = string.Empty;
|
|
||||||
|
|
||||||
string location = info.Location.ToString();
|
string location = info.Location.ToString();
|
||||||
|
|
||||||
@ -158,8 +153,7 @@ namespace Emby.Dlna.PlayTo
|
|||||||
_logger.LogDebug("Attempting to create PlayToController from location {0}", location);
|
_logger.LogDebug("Attempting to create PlayToController from location {0}", location);
|
||||||
|
|
||||||
_logger.LogDebug("Logging session activity from location {0}", location);
|
_logger.LogDebug("Logging session activity from location {0}", location);
|
||||||
string uuid;
|
if (info.Headers.TryGetValue("USN", out string uuid))
|
||||||
if (info.Headers.TryGetValue("USN", out uuid))
|
|
||||||
{
|
{
|
||||||
uuid = GetUuid(uuid);
|
uuid = GetUuid(uuid);
|
||||||
}
|
}
|
||||||
@ -170,7 +164,7 @@ namespace Emby.Dlna.PlayTo
|
|||||||
|
|
||||||
string deviceName = null;
|
string deviceName = null;
|
||||||
|
|
||||||
var sessionInfo = _sessionManager.LogSessionActivity("DLNA", _appHost.ApplicationVersion.ToString(), uuid, deviceName, uri.OriginalString, null);
|
var sessionInfo = _sessionManager.LogSessionActivity("DLNA", _appHost.ApplicationVersion, uuid, deviceName, uri.OriginalString, null);
|
||||||
|
|
||||||
var controller = sessionInfo.SessionControllers.OfType<PlayToController>().FirstOrDefault();
|
var controller = sessionInfo.SessionControllers.OfType<PlayToController>().FirstOrDefault();
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace Emby.Dlna.PlayTo
|
namespace Emby.Dlna.PlayTo
|
||||||
{
|
{
|
||||||
@ -6,4 +6,4 @@ namespace Emby.Dlna.PlayTo
|
|||||||
{
|
{
|
||||||
public uBaseObject MediaInfo { get; set; }
|
public uBaseObject MediaInfo { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace Emby.Dlna.PlayTo
|
namespace Emby.Dlna.PlayTo
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace Emby.Dlna.PlayTo
|
namespace Emby.Dlna.PlayTo
|
||||||
{
|
{
|
||||||
@ -12,4 +12,4 @@ namespace Emby.Dlna.PlayTo
|
|||||||
public uBaseObject OldMediaInfo { get; set; }
|
public uBaseObject OldMediaInfo { get; set; }
|
||||||
public uBaseObject NewMediaInfo { get; set; }
|
public uBaseObject NewMediaInfo { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
using MediaBrowser.Model.Dlna;
|
using MediaBrowser.Model.Dlna;
|
||||||
|
|
||||||
namespace Emby.Dlna.PlayTo
|
namespace Emby.Dlna.PlayTo
|
||||||
{
|
{
|
||||||
@ -12,4 +12,4 @@ namespace Emby.Dlna.PlayTo
|
|||||||
|
|
||||||
public DeviceProfile Profile { get; set; }
|
public DeviceProfile Profile { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,9 @@
|
|||||||
using MediaBrowser.Controller.Entities;
|
|
||||||
using MediaBrowser.Model.Dlna;
|
|
||||||
using MediaBrowser.Model.Session;
|
|
||||||
using System;
|
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using MediaBrowser.Controller.Entities;
|
||||||
|
using MediaBrowser.Model.Dlna;
|
||||||
|
using MediaBrowser.Model.Session;
|
||||||
|
|
||||||
namespace Emby.Dlna.PlayTo
|
namespace Emby.Dlna.PlayTo
|
||||||
{
|
{
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
using MediaBrowser.Common.Net;
|
|
||||||
using MediaBrowser.Controller.Configuration;
|
|
||||||
using Emby.Dlna.Common;
|
|
||||||
using System;
|
using System;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Xml.Linq;
|
using System.Xml.Linq;
|
||||||
using System.Threading;
|
using Emby.Dlna.Common;
|
||||||
|
using MediaBrowser.Common.Net;
|
||||||
|
using MediaBrowser.Controller.Configuration;
|
||||||
|
|
||||||
namespace Emby.Dlna.PlayTo
|
namespace Emby.Dlna.PlayTo
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
namespace Emby.Dlna.PlayTo
|
namespace Emby.Dlna.PlayTo
|
||||||
{
|
{
|
||||||
public enum TRANSPORTSTATE
|
public enum TRANSPORTSTATE
|
||||||
{
|
{
|
||||||
@ -8,4 +8,4 @@
|
|||||||
PAUSED_PLAYBACK,
|
PAUSED_PLAYBACK,
|
||||||
PAUSED
|
PAUSED
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
using System;
|
using System;
|
||||||
using Emby.Dlna.Common;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Xml.Linq;
|
using System.Xml.Linq;
|
||||||
|
using Emby.Dlna.Common;
|
||||||
using Emby.Dlna.Ssdp;
|
using Emby.Dlna.Ssdp;
|
||||||
|
|
||||||
namespace Emby.Dlna.PlayTo
|
namespace Emby.Dlna.PlayTo
|
||||||
@ -12,27 +12,15 @@ namespace Emby.Dlna.PlayTo
|
|||||||
private List<StateVariable> _stateVariables = new List<StateVariable>();
|
private List<StateVariable> _stateVariables = new List<StateVariable>();
|
||||||
public List<StateVariable> StateVariables
|
public List<StateVariable> StateVariables
|
||||||
{
|
{
|
||||||
get
|
get => _stateVariables;
|
||||||
{
|
set => _stateVariables = value;
|
||||||
return _stateVariables;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
_stateVariables = value;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<ServiceAction> _serviceActions = new List<ServiceAction>();
|
private List<ServiceAction> _serviceActions = new List<ServiceAction>();
|
||||||
public List<ServiceAction> ServiceActions
|
public List<ServiceAction> ServiceActions
|
||||||
{
|
{
|
||||||
get
|
get => _serviceActions;
|
||||||
{
|
set => _serviceActions = value;
|
||||||
return _serviceActions;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
_serviceActions = value;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static TransportCommands Create(XDocument document)
|
public static TransportCommands Create(XDocument document)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace Emby.Dlna.PlayTo
|
namespace Emby.Dlna.PlayTo
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Xml.Linq;
|
using System.Xml.Linq;
|
||||||
using Emby.Dlna.Ssdp;
|
using Emby.Dlna.Ssdp;
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace Emby.Dlna.PlayTo
|
namespace Emby.Dlna.PlayTo
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Xml.Linq;
|
using System.Xml.Linq;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
using System.Xml.Linq;
|
using System.Xml.Linq;
|
||||||
|
|
||||||
namespace Emby.Dlna.PlayTo
|
namespace Emby.Dlna.PlayTo
|
||||||
{
|
{
|
||||||
@ -6,4 +6,4 @@ namespace Emby.Dlna.PlayTo
|
|||||||
{
|
{
|
||||||
public XElement Element { get; set; }
|
public XElement Element { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
using System.Xml.Linq;
|
using System.Xml.Linq;
|
||||||
|
|
||||||
namespace Emby.Dlna.PlayTo
|
namespace Emby.Dlna.PlayTo
|
||||||
{
|
{
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
using MediaBrowser.Model.Dlna;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Xml.Serialization;
|
using MediaBrowser.Model.Dlna;
|
||||||
using MediaBrowser.Model.Extensions;
|
|
||||||
|
|
||||||
namespace Emby.Dlna.Profiles
|
namespace Emby.Dlna.Profiles
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
using MediaBrowser.Model.Dlna;
|
using MediaBrowser.Model.Dlna;
|
||||||
using System.Xml.Serialization;
|
|
||||||
|
|
||||||
namespace Emby.Dlna.Profiles
|
namespace Emby.Dlna.Profiles
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
using MediaBrowser.Model.Dlna;
|
using MediaBrowser.Model.Dlna;
|
||||||
using System.Xml.Serialization;
|
|
||||||
|
|
||||||
namespace Emby.Dlna.Profiles
|
namespace Emby.Dlna.Profiles
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
using MediaBrowser.Model.Dlna;
|
using MediaBrowser.Model.Dlna;
|
||||||
using System.Xml.Serialization;
|
|
||||||
|
|
||||||
namespace Emby.Dlna.Profiles
|
namespace Emby.Dlna.Profiles
|
||||||
{
|
{
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user