/// <summary> /// Converts IAudioProperties to string. /// </summary> /// <param name="props">The props.</param> /// <returns></returns> public static string IAudioPropertiesToString(IAudioProperties props) { CultureInfo curCulture = Thread.CurrentThread.CurrentUICulture; Thread.CurrentThread.CurrentUICulture = LocalizeDictionary.Instance.Culture; string res = string.Empty; if (props.Language != null) { res += props.Language.DisplayName + ", "; } res += string.Format(LocalizeDictionary.Instance.GetLocizedObject <string>("IMovieDataSource", "Resources", "ChannelsText", LocalizeDictionary.Instance.Culture), props.Channels.Value) + ", "; if (props.Format != string.Empty) { res += props.Format; if (props.BitRate.HasValue) { res += " (" + (props.Encoding != string.Empty ? props.Encoding + " @ " : string.Empty) + (props.BitRate.Value / 1000) + " kbps)"; } } res.Trim(',', ' '); Thread.CurrentThread.CurrentUICulture = curCulture; return(res); }
/// <summary> /// Loads the media file into movie. /// </summary> public static void LoadMediaFileIntoMovie(IMovie movie, string filename, IMovieDataSourcePlugin dataSource) { if (filename.Length < 3) { return; } movie.MediaFile = dataSource.CreateMediaFile(filename); if (File.Exists(filename)) { movie.MediaFile.Size = (new FileInfo(filename)).Length; MediaInfoNET.MediaInfo info = new MediaInfoNET.MediaInfo(filename); if (info.VideoStreams.Count > 0) { movie.MediaFile.Video = dataSource.CreateVideoProperties(info.VideoStreams[0].Duration); movie.MediaFile.Video.BitRate = info.VideoStreams[0].BitRate.Value; movie.MediaFile.Video.Encoding = info.VideoStreams[0].EncodedLibrary.Name; movie.MediaFile.Video.Format = info.VideoStreams[0].Format.Name; movie.MediaFile.Video.Height = info.VideoStreams[0].Height; movie.MediaFile.Video.Width = info.VideoStreams[0].Width; } foreach (MediaInfoNET.AudioStream audio in info.AudioStreams) { IAudioProperties props = dataSource.CreateAudioProperties(audio.Channles.Channels); props.BitRate = audio.BitRate.Value; props.Format = audio.Format.Name; props.Encoding = audio.CodecID.Hint; props.Language = (audio.Language == null || audio.Language.TwoLetterISOLanguageName == "iv") ? null : audio.Language; movie.MediaFile.Audio.Add(props); } foreach (string file in Directory.GetFiles(System.IO.Path.GetDirectoryName(filename), System.IO.Path.GetFileNameWithoutExtension(filename) + "*", SearchOption.TopDirectoryOnly)) { if (System.IO.Path.GetExtension(file) == ".ac3" || System.IO.Path.GetExtension(file) == ".dts" || System.IO.Path.GetExtension(file) == ".mka") { MediaInfoNET.MediaInfo audioInfo = new MediaInfoNET.MediaInfo(file); foreach (MediaInfoNET.AudioStream audio in audioInfo.AudioStreams) { IAudioProperties props = dataSource.CreateAudioProperties(audio.Channles.Channels); props.BitRate = audio.BitRate.Value; props.Format = audio.Format.Name; props.Language = audio.Language ?? TryGetCulture(file); movie.MediaFile.Audio.Add(props); movie.MediaFiles.Add(dataSource.CreateMediaFile(file)); } } } } else if (Directory.Exists(filename)) { movie.MediaFile.Size = 0; if (sizeThread != null) { sizeThread.Abort(); } sizeThread = new Thread(new ThreadStart(delegate { try { foreach (FileInfo fileInfo in (new DirectoryInfo(filename)).GetFiles("*.*", SearchOption.AllDirectories)) { try { long size = fileInfo.Length; movie.MediaFile.Size += size; } catch (Exception exp) { Trace.WriteLine(exp.ToString()); } } } catch (Exception exp) { Trace.WriteLine(exp.ToString()); } finally { sizeThread = null; } })); sizeThread.IsBackground = true; sizeThread.Priority = ThreadPriority.Lowest; sizeThread.Name = "Size Thread"; sizeThread.CurrentCulture = Thread.CurrentThread.CurrentCulture; sizeThread.CurrentUICulture = Thread.CurrentThread.CurrentUICulture; sizeThread.Start(); } }