private MediaInfoData GetMediaInfo(string location, MediaType mediaType)
        {
            Logger.ReportInfo("Getting media info from " + location);
            MediaInfoLib.MediaInfo mediaInfo = new MediaInfoLib.MediaInfo();
            mediaInfo.Option("ParseSpeed", "0.2");
            int i = mediaInfo.Open(location);
            MediaInfoData mediaInfoData = null;
            if (i != 0)
            {
                string subtitles = mediaInfo.Get(StreamKind.General, 0, "Text_Language_List");
                string scanType = mediaInfo.Get(StreamKind.Video, 0, "ScanType");
                int width;
                Int32.TryParse(mediaInfo.Get(StreamKind.Video, 0, "Width"), out width);
                int height;
                Int32.TryParse(mediaInfo.Get(StreamKind.Video, 0, "Height"), out height);
                int videoBitRate;
                Int32.TryParse(mediaInfo.Get(StreamKind.Video, 0, "BitRate"), out videoBitRate);

                int audioBitRate;
                string aBitRate = mediaInfo.Get(StreamKind.Audio, 0, "BitRate");
                int ABindex = aBitRate.IndexOf(" /");
                if (ABindex > 0)
                    aBitRate = aBitRate.Remove(ABindex);
                Int32.TryParse(aBitRate, out audioBitRate);

                int runTime;
                Int32.TryParse(mediaInfo.Get(StreamKind.General, 0, "PlayTime"), out runTime);
                int streamCount;
                Int32.TryParse(mediaInfo.Get(StreamKind.Audio, 0, "StreamCount"), out streamCount);

                string audioChannels = mediaInfo.Get(StreamKind.Audio, 0, "Channel(s)");
                int ACindex = audioChannels.IndexOf(" /");
                if (ACindex > 0)
                    audioChannels = audioChannels.Remove(ACindex);

                string audioLanguages = mediaInfo.Get(StreamKind.General, 0, "Audio_Language_List");

                string videoFrameRate = mediaInfo.Get(StreamKind.Video, 0, "FrameRate");

                string audioProfile = mediaInfo.Get(StreamKind.Audio, 0, "Format_Profile");
                int APindex = audioProfile.IndexOf(" /");
                if (APindex > 0)
                    audioProfile = audioProfile.Remove(APindex);

                mediaInfoData = new MediaInfoData
                {
                    PluginData = new MediaInfoData.MIData()
                    {
                        VideoCodec = mediaInfo.Get(StreamKind.Video, 0, "Codec/String"),
                        VideoBitRate = videoBitRate,
                        //MI.Get(StreamKind.Video, 0, "DisplayAspectRatio")),
                        Height = height,
                        Width = width,
                        //MI.Get(StreamKind.Video, 0, "Duration/String3")),
                        AudioFormat = mediaInfo.Get(StreamKind.Audio, 0, "Format"),
                        AudioBitRate = audioBitRate,
                        RunTime = (runTime / 60000),
                        AudioStreamCount = streamCount,
                        AudioChannelCount = audioChannels.Trim(),
                        AudioProfile = audioProfile.Trim(),
                        VideoFPS = videoFrameRate,
                        AudioLanguages = audioLanguages,
                        Subtitles = subtitles,
                        ScanType = scanType
                    }
                };
            }
            else
            {
                Logger.ReportInfo("Could not extract media information from " + location);
            }
            if (mediaType == MediaType.DVD && i != 0)
            {
                mediaInfo.Close();
                location = location.Replace("0.IFO", "1.vob");
                Logger.ReportInfo("Getting additional media info from " + location);
                mediaInfo.Option("ParseSpeed", "0.0");
                i = mediaInfo.Open(location);
                if (i != 0)
                {
                    int videoBitRate;
                    Int32.TryParse(mediaInfo.Get(StreamKind.Video, 0, "BitRate"), out videoBitRate);

                    int audioBitRate;
                    string aBitRate = mediaInfo.Get(StreamKind.Audio, 0, "BitRate");
                    int ABindex = aBitRate.IndexOf(" /");
                    if (ABindex > 0)
                        aBitRate = aBitRate.Remove(ABindex);
                    Int32.TryParse(aBitRate, out audioBitRate);
                    string scanType = mediaInfo.Get(StreamKind.Video, 0, "ScanType");

                    mediaInfoData.PluginData.AudioBitRate = audioBitRate;
                    mediaInfoData.PluginData.VideoBitRate = videoBitRate;
                    mediaInfoData.PluginData.ScanType = scanType;
                }
                else
                {
                    Logger.ReportInfo("Could not extract additional media info from " + location);
                }
            }
            mediaInfo.Close();
            return mediaInfoData;
        }
 private MediaInfoData Merge(MediaInfoData original, MediaInfoData acquired)
 {
     if (original == null) return acquired;
     if (original.PluginData.AudioBitRate == 0) original.PluginData.AudioBitRate = acquired.AudioBitRate;
     if (original.PluginData.AudioChannelCount == "") original.PluginData.AudioChannelCount = acquired.AudioChannelCount;
     if (original.PluginData.AudioFormat == "")
     {
         original.PluginData.AudioProfile = acquired.AudioProfile;
         original.PluginData.AudioFormat = acquired.AudioFormat;
     }
     if (original.PluginData.AudioStreamCount == 0) original.PluginData.AudioStreamCount = acquired.AudioStreamCount;
     if (original.PluginData.AudioLanguages == "") original.PluginData.AudioLanguages = acquired.AudioLanguages;
     if (original.PluginData.Height == 0) original.PluginData.Height = acquired.Height;
     if (original.PluginData.RunTime == 0) original.PluginData.RunTime = acquired.RunTime;
     if (original.PluginData.Subtitles == "") original.PluginData.Subtitles = acquired.Subtitles;
     if (original.PluginData.VideoBitRate == 0) original.PluginData.VideoBitRate = acquired.VideoBitRate;
     if (original.PluginData.VideoCodec == "") original.PluginData.VideoCodec = acquired.VideoCodec;
     if (original.PluginData.VideoFPS == "") original.PluginData.VideoFPS = acquired.VideoFPS;
     if (original.PluginData.ScanType == "") original.PluginData.ScanType = acquired.ScanType;
     if (original.PluginData.Width == 0) original.PluginData.Width = acquired.Width;
     return original;
 }
 private MediaInfoData GetMediaInfo(string location)
 {
     Logger.ReportInfo("getting media info from " + location);
     MediaInfo mediaInfo = new MediaInfo();
     int i = mediaInfo.Open(location);
     MediaInfoData mediaInfoData = null;
     if (i != 0)
     {
         int width;
         Int32.TryParse(mediaInfo.Get(StreamKind.Video, 0, "Width"), out width);
         int height;
         Int32.TryParse(mediaInfo.Get(StreamKind.Video, 0, "Height"), out height);
         int videoBitRate;
         Int32.TryParse(mediaInfo.Get(StreamKind.Video, 0, "BitRate"), out videoBitRate);
         int audioBitRate;
         Int32.TryParse(mediaInfo.Get(StreamKind.Audio, 0, "BitRate"), out audioBitRate);
         mediaInfoData = new MediaInfoData
         {
             VideoCodec = mediaInfo.Get(StreamKind.Video, 0, "CodecID/Hint"),
             VideoBitRate = videoBitRate,
             //MI.Get(StreamKind.Video, 0, "DisplayAspectRatio")),
             Height = height,
             Width = width,
             //MI.Get(StreamKind.Video, 0, "Duration/String3")),
             AudioFormat = mediaInfo.Get(StreamKind.Audio, 0, "Format"),
             AudioBitRate = audioBitRate
         };
     }
     else
     {
         Logger.ReportInfo("Could not extract media information from " + location);
     }
     mediaInfo.Close();
     return mediaInfoData;
 }