]> granicus.if.org Git - handbrake/commitdiff
Interop: Updated some structs to keep up with libhb. Exposed video quality limits...
authorrandomengy <david.rickard@gmail.com>
Fri, 23 Aug 2013 03:06:23 +0000 (03:06 +0000)
committerrandomengy <david.rickard@gmail.com>
Fri, 23 Aug 2013 03:06:23 +0000 (03:06 +0000)
git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@5740 b64f7644-9d1e-0410-96f1-a4d463321fa5

16 files changed:
win/CS/HandBrake.Interop/HandBrakeInterop/Converters.cs
win/CS/HandBrake.Interop/HandBrakeInterop/HandBrakeInstance.cs
win/CS/HandBrake.Interop/HandBrakeInterop/HandBrakeInterop.csproj
win/CS/HandBrake.Interop/HandBrakeInterop/HandBrakeUtils.cs
win/CS/HandBrake.Interop/HandBrakeInterop/HbLib/HbFunctions.cs
win/CS/HandBrake.Interop/HandBrakeInterop/HbLib/Misc.cs
win/CS/HandBrake.Interop/HandBrakeInterop/HbLib/hb_audio.cs
win/CS/HandBrake.Interop/HandBrakeInterop/InteropUtilities.cs
win/CS/HandBrake.Interop/HandBrakeInterop/Language.cs
win/CS/HandBrake.Interop/HandBrakeInterop/LanguageCodes.cs [deleted file]
win/CS/HandBrake.Interop/HandBrakeInterop/Languages.cs [new file with mode: 0644]
win/CS/HandBrake.Interop/HandBrakeInterop/Model/BitrateLimits.cs
win/CS/HandBrake.Interop/HandBrakeInterop/Model/Encoders.cs
win/CS/HandBrake.Interop/HandBrakeInterop/Model/Encoding/EncodingProfile.cs
win/CS/HandBrake.Interop/HandBrakeInterop/Model/VideoQualityLimits.cs [new file with mode: 0644]
win/CS/HandBrake.Interop/HandBrakeInterop/Properties/AssemblyInfo.cs

index 42d200e577f136575c1353311d47f4dc196976df..1369b32c1b8533791e5137fcf8f5ac53b97eefb6 100644 (file)
@@ -11,7 +11,8 @@ namespace HandBrake.Interop
 {\r
        using System;\r
        using System.Collections.Generic;\r
-\r
+       using System.Globalization;\r
+       using System.Runtime.InteropServices;\r
        using HandBrake.Interop.HbLib;\r
        using HandBrake.Interop.Model.Encoding;\r
        using HandBrake.Interop.SourceData;\r
@@ -37,7 +38,7 @@ namespace HandBrake.Interop
                        VideoRates = new Dictionary<double, int>();\r
                        foreach (var framerate in Encoders.VideoFramerates)\r
                        {\r
-                               VideoRates.Add(double.Parse(framerate.Name), framerate.Rate);\r
+                               VideoRates.Add(double.Parse(framerate.Name, CultureInfo.InvariantCulture), framerate.Rate);\r
                        }\r
                }\r
 \r
@@ -230,6 +231,23 @@ namespace HandBrake.Interop
                                };\r
                }\r
 \r
+               /// <summary>\r
+               /// Converts a native language structure to a Language object.\r
+               /// </summary>\r
+               /// <param name="language">The structure to convert.</param>\r
+               /// <returns>The converted structure.</returns>\r
+               public static Language NativeToLanguage(iso639_lang_t language)\r
+               {\r
+                       string englishName = InteropUtilities.ReadUtf8Ptr(language.eng_name);\r
+                       string nativeName = InteropUtilities.ReadUtf8Ptr(language.native_name);\r
+                       return new Language\r
+                               {\r
+                                       Code = language.iso639_2,\r
+                                       EnglishName = englishName,\r
+                                       NativeName = nativeName\r
+                               };\r
+               }\r
+\r
                /// <summary>\r
                /// Converts the PTS amount to a TimeSpan. There may be some accuracy loss here.\r
                /// </summary>\r
index 18beda7cce32296338dd25445cccf8fdd5e498d9..7557ed94f4f3d48f0531961e096cc06fc6670165 100644 (file)
@@ -1650,14 +1650,12 @@ namespace HandBrake.Interop
 \r
                        nativeAudio.config.output.track = outputTrack;\r
                        nativeAudio.config.output.codec = (uint)encoder.Id;\r
+                       nativeAudio.config.output.compression_level = -1;\r
+                       nativeAudio.config.output.samplerate = nativeAudio.config.input.samplerate;\r
 \r
                        if (!encoder.IsPassthrough)\r
                        {\r
-                               if (encoding.SampleRateRaw == 0)\r
-                               {\r
-                                       nativeAudio.config.output.samplerate = nativeAudio.config.input.samplerate;\r
-                               }\r
-                               else\r
+                               if (encoding.SampleRateRaw != 0)\r
                                {\r
                                        nativeAudio.config.output.samplerate = encoding.SampleRateRaw;\r
                                }\r
@@ -1668,7 +1666,7 @@ namespace HandBrake.Interop
                                if (encoding.EncodeRateType == AudioEncodeRateType.Bitrate)\r
                                {\r
                                        // Disable quality targeting.\r
-                                       nativeAudio.config.output.quality = -1;\r
+                                       nativeAudio.config.output.quality = -3;\r
 \r
                                        if (encoding.Bitrate == 0)\r
                                        {\r
index 06e8394e7532f9bed3a71110e6417d003d34723a..d213ca39a80509e1eeec4b89737a5071fd0eb701 100644 (file)
     <Compile Include="Interfaces\IHandBrakeInstance.cs" />\r
     <Compile Include="InteropUtilities.cs" />\r
     <Compile Include="Language.cs" />\r
-    <Compile Include="LanguageCodes.cs" />\r
+    <Compile Include="Languages.cs" />\r
     <Compile Include="MarshalingConstants.cs" />\r
     <Compile Include="EventArgs\MessageLoggedEventArgs.cs" />\r
     <Compile Include="Model\Cropping.cs" />\r
     <Compile Include="Model\SourceType.cs" />\r
     <Compile Include="Model\SrtSubtitle.cs" />\r
     <Compile Include="Model\Subtitles.cs" />\r
+    <Compile Include="Model\VideoQualityLimits.cs" />\r
     <Compile Include="Model\VideoRangeType.cs" />\r
     <Compile Include="NativeList.cs" />\r
     <Compile Include="Properties\AssemblyInfo.cs" />\r
index 48e8117be6c3009703d2b28aaff036ded059acf6..4a99043ef2ed33b9556629010d4fc042fc001350 100644 (file)
@@ -146,8 +146,8 @@ namespace HandBrake.Interop
                {\r
                        if (!string.IsNullOrEmpty(message))\r
                        {\r
-                               // This error happens in normal operations. Log it as a message.\r
-                               if (message == "dvd: ifoOpen failed")\r
+                               // These errors happen in normal operations. Log them as messages.\r
+                               if (message == "dvd: ifoOpen failed" || message.Contains("avformat_seek_file failed"))\r
                                {\r
                                        SendMessageEvent(message);\r
                                        return;\r
@@ -222,7 +222,6 @@ namespace HandBrake.Interop
                                throw new ArgumentException("height must be positive.");\r
                        }\r
 \r
-                       HBFunctions.hb_init(0, 0);\r
                        IntPtr ptr = HBFunctions.hb_x264_param_unparse(\r
                                preset,\r
                                string.Join(",", tunes),\r
index 25f59599592a227b2322eb7ba866c3c606ef0bef..4afcf9b8bc686b9f23b29abc0ee925aa25cd856c 100644 (file)
@@ -244,6 +244,11 @@ namespace HandBrake.Interop.HbLib
                [DllImport("hb.dll", EntryPoint = "hb_audio_bitrate_get_next", CallingConvention = CallingConvention.Cdecl)]\r
                public static extern IntPtr hb_audio_bitrate_get_next(IntPtr last);\r
 \r
+               [DllImport("hb.dll", EntryPoint = "hb_video_quality_get_limits", CallingConvention = CallingConvention.Cdecl)]\r
+               public static extern void hb_video_quality_get_limits(uint codec, ref float low, ref float high, ref float granularity, ref int direction);\r
+\r
+               [DllImport("hb.dll", EntryPoint = "hb_video_quality_get_name", CallingConvention = CallingConvention.Cdecl)]\r
+               public static extern IntPtr hb_video_quality_get_name(uint codec);\r
 \r
                [DllImport("hb.dll", EntryPoint = "hb_audio_quality_get_limits", CallingConvention = CallingConvention.Cdecl)]\r
                public static extern void hb_audio_quality_get_limits(uint codec, ref float low, ref float high, ref float granularity, ref int direction);\r
@@ -322,7 +327,11 @@ namespace HandBrake.Interop.HbLib
                [DllImport("hb.dll", EntryPoint = "hb_audio_encoder_get_next", CallingConvention = CallingConvention.Cdecl)]\r
                public static extern IntPtr hb_audio_encoder_get_next(IntPtr last);\r
 \r
+               [DllImport("hb.dll", EntryPoint = "lang_get_next", CallingConvention = CallingConvention.Cdecl)]\r
+               public static extern IntPtr lang_get_next(IntPtr last);\r
 \r
+               [DllImport("hb.dll", EntryPoint = "lang_for_code2", CallingConvention = CallingConvention.Cdecl)]\r
+               public static extern IntPtr lang_for_code2([In] [MarshalAs(UnmanagedType.LPStr)] string code2);\r
 \r
 \r
 \r
@@ -379,7 +388,7 @@ namespace HandBrake.Interop.HbLib
                public static extern int hb_check_h264_level([In] [MarshalAs(UnmanagedType.LPStr)] string level, int width, int height, int fps_num, int fps_den, int interlaced, int fake_interlaced);\r
 \r
                [DllImport("hb.dll", EntryPoint = "hb_x264_param_unparse", CallingConvention = CallingConvention.Cdecl)]\r
-        public static extern IntPtr hb_x264_param_unparse(\r
+               public static extern IntPtr hb_x264_param_unparse(\r
                        [In] [MarshalAs(UnmanagedType.LPStr)] string x264_preset,\r
                        [In] [MarshalAs(UnmanagedType.LPStr)] string x264_tune,\r
                        [In] [MarshalAs(UnmanagedType.LPStr)] string x264_encopts,\r
index 6d6e62a346376b65f2d8bc778e05e01d0882da6b..aef4c5a691e1d30c4763af1d938e66137602fe19 100644 (file)
@@ -76,6 +76,23 @@ namespace HandBrake.Interop.HbLib
                public int amixdown;\r
        }\r
 \r
+       [StructLayout(LayoutKind.Sequential)]\r
+       public struct iso639_lang_t\r
+       {\r
+               public IntPtr eng_name;\r
+\r
+               public IntPtr native_name;\r
+\r
+               [MarshalAs(UnmanagedType.LPStr)]\r
+               public string iso639_1;\r
+\r
+               [MarshalAs(UnmanagedType.LPStr)]\r
+               public string iso639_2;\r
+\r
+               [MarshalAs(UnmanagedType.LPStr)]\r
+               public string iso639_2b;\r
+       }\r
+\r
        [StructLayout(LayoutKind.Sequential)]\r
        public struct hb_encoder_s\r
        {\r
index a219c3db9a789e95098ac9b673c5cf3b2bfdd18d..a598ccb801e4bc4e8baa5f3e829a461b1eba0e23 100644 (file)
@@ -72,6 +72,8 @@ namespace HandBrake.Interop.HbLib
                public int dither_method;\r
 \r
                public IntPtr name;\r
+\r
+               public int delay;\r
        }\r
 \r
        public enum hb_mixdown\r
index bd58ec6a0f72f3c1d22edadb5c2dfb2b8fc9a4fc..c270860d001a5ce3b5fccea7caa7c681556aab43 100644 (file)
@@ -13,7 +13,7 @@ namespace HandBrake.Interop
        using System.Collections.Generic;\r
        using System.Linq;\r
        using System.Runtime.InteropServices;\r
-\r
+       using System.Text;\r
        using HandBrake.Interop.HbLib;\r
        using Model.Encoding;\r
 \r
@@ -33,6 +33,30 @@ namespace HandBrake.Interop
                        return (T)Marshal.PtrToStructure(structPtr, typeof(T));\r
                }\r
 \r
+               /// <summary>\r
+               /// Reads the given native UTF-8 string.\r
+               /// </summary>\r
+               /// <param name="stringPtr">The pointer to the string.</param>\r
+               /// <returns>The resulting string.</returns>\r
+               public static string ReadUtf8Ptr(IntPtr stringPtr)\r
+               {\r
+                       var data = new List<byte>();\r
+                       var ptr = stringPtr;\r
+                       var offset = 0;\r
+                       while (true)\r
+                       {\r
+                               byte ch = Marshal.ReadByte(ptr, offset++);\r
+                               if (ch == 0)\r
+                               {\r
+                                       break;\r
+                               }\r
+\r
+                               data.Add(ch);\r
+                       }\r
+\r
+                       return Encoding.UTF8.GetString(data.ToArray());\r
+               }\r
+\r
                /// <summary>\r
                /// Converts the given native HandBrake list to a managed list.\r
                /// </summary>\r
index ec55ffeaf05de32194f3d4b2c5ef79ba24f79904..c2f17281e299c20c185fdd504e4ab99afe4267dc 100644 (file)
@@ -9,34 +9,40 @@
 \r
 namespace HandBrake.Interop\r
 {\r
-    /// <summary>\r
+       /// <summary>\r
        /// Represents a language.\r
        /// </summary>\r
        public class Language\r
        {\r
                /// <summary>\r
-               /// Initializes a new instance of the Language class.\r
+               /// Gets or sets the english name of the language.\r
                /// </summary>\r
-               /// <param name="code">The code for the langauge.</param>\r
-               public Language(string code)\r
-               {\r
-                       this.Code = code;\r
-               }\r
+               public string EnglishName { get; set; }\r
 \r
                /// <summary>\r
-               /// Gets the friendly name of the language.\r
+               /// Gets or sets the native name of the language.\r
                /// </summary>\r
-               public string Name\r
-               {\r
-                       get\r
-                       {\r
-                               return LanguageCodes.Decode(this.Code);\r
-                       }\r
-               }\r
+               public string NativeName { get; set; }\r
 \r
                /// <summary>\r
                /// Gets or sets the language code.\r
                /// </summary>\r
                public string Code { get; set; }\r
+\r
+               /// <summary>\r
+               /// Gets the display string for the language.\r
+               /// </summary>\r
+               public string Display\r
+               {\r
+                       get\r
+                       {\r
+                               if (!string.IsNullOrEmpty(this.NativeName) && this.NativeName != this.EnglishName)\r
+                               {\r
+                                       return this.EnglishName + " (" + this.NativeName + ")";\r
+                               }\r
+\r
+                               return this.EnglishName;\r
+                       }\r
+               }\r
        }\r
 }\r
diff --git a/win/CS/HandBrake.Interop/HandBrakeInterop/LanguageCodes.cs b/win/CS/HandBrake.Interop/HandBrakeInterop/LanguageCodes.cs
deleted file mode 100644 (file)
index 7fbb7be..0000000
+++ /dev/null
@@ -1,255 +0,0 @@
-// --------------------------------------------------------------------------------------------------------------------\r
-// <copyright file="LanguageCodes.cs" company="HandBrake Project (http://handbrake.fr)">\r
-//   This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License.\r
-// </copyright>\r
-// <summary>\r
-//   Contains utilities for converting language codes.\r
-// </summary>\r
-// --------------------------------------------------------------------------------------------------------------------\r
-\r
-namespace HandBrake.Interop\r
-{\r
-    using System.Collections.Generic;\r
-    using System.Linq;\r
-\r
-    /// <summary>\r
-       /// Contains utilities for converting language codes.\r
-       /// </summary>\r
-       public static class LanguageCodes\r
-       {\r
-               /// <summary>\r
-               /// The map of language codes to friendly names.\r
-               /// </summary>\r
-               private static Dictionary<string, string> languageMap;\r
-\r
-               /// <summary>\r
-               /// Gets the map of language codes to friendly names.\r
-               /// </summary>\r
-               private static Dictionary<string, string> LanguageMap\r
-               {\r
-                       get\r
-                       {\r
-                               if (languageMap == null)\r
-                               {\r
-                                       languageMap = new Dictionary<string, string>\r
-                                       {\r
-                                               {"und", "Unspecified"},\r
-                                               {"eng", "English"},\r
-                                               {"deu", "Deutsch"},\r
-                                               {"fra", "Français"},\r
-                                               {"spa", "Español"},\r
-                                               {"rus", "Russian"},\r
-                                               {"aar", "Afar"},\r
-                                               {"abk", "Abkhazian"},\r
-                                               {"afr", "Afrikaans"},\r
-                                               {"aka", "Akan"},\r
-                                               {"sqi", "Albanian"},\r
-                                               {"amh", "Amharic"},\r
-                                               {"ara", "Arabic"},\r
-                                               {"arg", "Aragonese"},\r
-                                               {"hye", "Armenian"},\r
-                                               {"asm", "Assamese"},\r
-                                               {"ava", "Avaric"},\r
-                                               {"ave", "Avestan"},\r
-                                               {"aym", "Aymara"},\r
-                                               {"aze", "Azerbaijani"},\r
-                                               {"bak", "Bashkir"},\r
-                                               {"bam", "Bambara"},\r
-                                               {"eus", "Basque"},\r
-                                               {"bel", "Belarusian"},\r
-                                               {"ben", "Bengali"},\r
-                                               {"bih", "Bihari"},\r
-                                               {"bis", "Bislama"},\r
-                                               {"bos", "Bosnian"},\r
-                                               {"bre", "Breton"},\r
-                                               {"bul", "Bulgarian"},\r
-                                               {"mya", "Burmese"},\r
-                                               {"cat", "Catalan"},\r
-                                               {"cha", "Chamorro"},\r
-                                               {"che", "Chechen"},\r
-                                               {"zho", "Chinese"},\r
-                                               {"chu", "Church Slavic"},\r
-                                               {"chv", "Chuvash"},\r
-                                               {"cor", "Cornish"},\r
-                                               {"cos", "Corsican"},\r
-                                               {"cre", "Cree"},\r
-                                               {"ces", "Czech"},\r
-                                               {"dan", "Dansk"},\r
-                                               {"div", "Divehi"},\r
-                                               {"nld", "Nederlands"},\r
-                                               {"dzo", "Dzongkha"},\r
-                                               {"epo", "Esperanto"},\r
-                                               {"est", "Estonian"},\r
-                                               {"ewe", "Ewe"},\r
-                                               {"fao", "Faroese"},\r
-                                               {"fij", "Fijian"},\r
-                                               {"fin", "Suomi"},\r
-                                               {"fry", "Western Frisian"},\r
-                                               {"ful", "Fulah"},\r
-                                               {"kat", "Georgian"},\r
-                                               {"gla", "Gaelic (Scots)"},\r
-                                               {"gle", "Irish"},\r
-                                               {"glg", "Galician"},\r
-                                               {"glv", "Manx"},\r
-                                               {"ell", "Greek Modern"},\r
-                                               {"grn", "Guarani"},\r
-                                               {"guj", "Gujarati"},\r
-                                               {"hat", "Haitian"},\r
-                                               {"hau", "Hausa"},\r
-                                               {"heb", "Hebrew"},\r
-                                               {"her", "Herero"},\r
-                                               {"hin", "Hindi"},\r
-                                               {"hmo", "Hiri Motu"},\r
-                                               {"hun", "Magyar"},\r
-                                               {"ibo", "Igbo"},\r
-                                               {"isl", "Islenska"},\r
-                                               {"ido", "Ido"},\r
-                                               {"iii", "Sichuan Yi"},\r
-                                               {"iku", "Inuktitut"},\r
-                                               {"ile", "Interlingue"},\r
-                                               {"ina", "Interlingua"},\r
-                                               {"ind", "Indonesian"},\r
-                                               {"ipk", "Inupiaq"},\r
-                                               {"ita", "Italiano"},\r
-                                               {"jav", "Javanese"},\r
-                                               {"jpn", "Japanese"},\r
-                                               {"kal", "Kalaallisut"},\r
-                                               {"kan", "Kannada"},\r
-                                               {"kas", "Kashmiri"},\r
-                                               {"kau", "Kanuri"},\r
-                                               {"kaz", "Kazakh"},\r
-                                               {"khm", "Central Khmer"},\r
-                                               {"kik", "Kikuyu"},\r
-                                               {"kin", "Kinyarwanda"},\r
-                                               {"kir", "Kirghiz"},\r
-                                               {"kom", "Komi"},\r
-                                               {"kon", "Kongo"},\r
-                                               {"kor", "Korean"},\r
-                                               {"kua", "Kuanyama"},\r
-                                               {"kur", "Kurdish"},\r
-                                               {"lao", "Lao"},\r
-                                               {"lat", "Latin"},\r
-                                               {"lav", "Latvian"},\r
-                                               {"lim", "Limburgan"},\r
-                                               {"lin", "Lingala"},\r
-                                               {"lit", "Lithuanian"},\r
-                                               {"ltz", "Luxembourgish"},\r
-                                               {"lub", "Luba-Katanga"},\r
-                                               {"lug", "Ganda"},\r
-                                               {"mkd", "Macedonian"},\r
-                                               {"mah", "Marshallese"},\r
-                                               {"mal", "Malayalam"},\r
-                                               {"mri", "Maori"},\r
-                                               {"mar", "Marathi"},\r
-                                               {"msa", "Malay"},\r
-                                               {"mlg", "Malagasy"},\r
-                                               {"mlt", "Maltese"},\r
-                                               {"mol", "Moldavian"},\r
-                                               {"mon", "Mongolian"},\r
-                                               {"nau", "Nauru"},\r
-                                               {"nav", "Navajo"},\r
-                                               {"nbl", "Ndebele, South"},\r
-                                               {"nde", "Ndebele, North"},\r
-                                               {"ndo", "Ndonga"},\r
-                                               {"nep", "Nepali"},\r
-                                               {"nno", "Norwegian Nynorsk"},\r
-                                               {"nob", "Norwegian Bokmål"},\r
-                                               {"nor", "Norsk"},\r
-                                               {"nya", "Chichewa; Nyanja"},\r
-                                               {"oci", "Occitan"},\r
-                                               {"oji", "Ojibwa"},\r
-                                               {"ori", "Oriya"},\r
-                                               {"orm", "Oromo"},\r
-                                               {"oss", "Ossetian"},\r
-                                               {"pan", "Panjabi"},\r
-                                               {"fas", "Persian"},\r
-                                               {"pli", "Pali"},\r
-                                               {"pol", "Polish"},\r
-                                               {"por", "Portugues"},\r
-                                               {"pus", "Pushto"},\r
-                                               {"que", "Quechua"},\r
-                                               {"roh", "Romansh"},\r
-                                               {"ron", "Romanian"},\r
-                                               {"run", "Rundi"},\r
-                                               {"sag", "Sango"},\r
-                                               {"san", "Sanskrit"},\r
-                                               {"srp", "Serbian"},\r
-                                               {"hrv", "Hrvatski"},\r
-                                               {"sin", "Sinhala"},\r
-                                               {"slk", "Slovak"},\r
-                                               {"slv", "Slovenian"},\r
-                                               {"sme", "Northern Sami"},\r
-                                               {"smo", "Samoan"},\r
-                                               {"sna", "Shona"},\r
-                                               {"snd", "Sindhi"},\r
-                                               {"som", "Somali"},\r
-                                               {"sot", "Sotho Southern"},\r
-                                               {"srd", "Sardinian"},\r
-                                               {"ssw", "Swati"},\r
-                                               {"sun", "Sundanese"},\r
-                                               {"swa", "Swahili"},\r
-                                               {"swe", "Svenska"},\r
-                                               {"tah", "Tahitian"},\r
-                                               {"tam", "Tamil"},\r
-                                               {"tat", "Tatar"},\r
-                                               {"tel", "Telugu"},\r
-                                               {"tgk", "Tajik"},\r
-                                               {"tgl", "Tagalog"},\r
-                                               {"tha", "Thai"},\r
-                                               {"bod", "Tibetan"},\r
-                                               {"tir", "Tigrinya"},\r
-                                               {"ton", "Tonga"},\r
-                                               {"tsn", "Tswana"},\r
-                                               {"tso", "Tsonga"},\r
-                                               {"tuk", "Turkmen"},\r
-                                               {"tur", "Turkish"},\r
-                                               {"twi", "Twi"},\r
-                                               {"uig", "Uighur"},\r
-                                               {"ukr", "Ukrainian"},\r
-                                               {"urd", "Urdu"},\r
-                                               {"uzb", "Uzbek"},\r
-                                               {"ven", "Venda"},\r
-                                               {"vie", "Vietnamese"},\r
-                                               {"vol", "Volapük"},\r
-                                               {"cym", "Welsh"},\r
-                                               {"wln", "Walloon"},\r
-                                               {"wol", "Wolof"},\r
-                                               {"xho", "Xhosa"},\r
-                                               {"yid", "Yiddish"},\r
-                                               {"yor", "Yoruba"},\r
-                                               {"zha", "Zhuang"},\r
-                                               {"zul", "Zulu"}\r
-                                       };\r
-                               }\r
-\r
-                               return languageMap;\r
-                       }\r
-               }\r
-\r
-               /// <summary>\r
-               /// Gets a list of all languages.\r
-               /// </summary>\r
-               public static IList<Language> Languages\r
-               {\r
-                       get\r
-                       {\r
-                           return LanguageMap.Keys.Select(languageCode => new Language(languageCode)).ToList();\r
-                       }\r
-               }\r
-\r
-               /// <summary>\r
-               /// Gives the friendly name of the language with the given code.\r
-               /// </summary>\r
-               /// <param name="languageCode">The language code.</param>\r
-               /// <returns>The friendly name of the language.</returns>\r
-               public static string Decode(string languageCode)\r
-               {\r
-                       if (LanguageMap.ContainsKey(languageCode))\r
-                       {\r
-                               return LanguageMap[languageCode];\r
-                       }\r
-\r
-                       return "Unknown";\r
-               }\r
-       }\r
-}\r
diff --git a/win/CS/HandBrake.Interop/HandBrakeInterop/Languages.cs b/win/CS/HandBrake.Interop/HandBrakeInterop/Languages.cs
new file mode 100644 (file)
index 0000000..f8d3db6
--- /dev/null
@@ -0,0 +1,54 @@
+// --------------------------------------------------------------------------------------------------------------------\r
+// <copyright file="LanguageCodes.cs" company="HandBrake Project (http://handbrake.fr)">\r
+//   This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License.\r
+// </copyright>\r
+// <summary>\r
+//   Contains utilities for converting language codes.\r
+// </summary>\r
+// --------------------------------------------------------------------------------------------------------------------\r
+\r
+namespace HandBrake.Interop\r
+{\r
+       using System.Collections.Generic;\r
+       using HbLib;\r
+\r
+       /// <summary>\r
+       /// Contains utilities for converting language codes.\r
+       /// </summary>\r
+       public static class Languages\r
+       {\r
+               /// <summary>\r
+               /// The list of all languages.\r
+               /// </summary>\r
+               private static IList<Language> allLanguages; \r
+\r
+               /// <summary>\r
+               /// Gets a list of all languages.\r
+               /// </summary>\r
+               public static IList<Language> AllLanguages\r
+               {\r
+                       get\r
+                       {\r
+                               if (allLanguages == null)\r
+                               {\r
+                                       allLanguages = InteropUtilities.GetListFromIterator<iso639_lang_t, Language>(\r
+                                               HBFunctions.lang_get_next,\r
+                                               Converters.NativeToLanguage);\r
+                               }\r
+\r
+                               return allLanguages;\r
+                       }\r
+               }\r
+\r
+               /// <summary>\r
+               /// Gets the language object for the given code.\r
+               /// </summary>\r
+               /// <param name="code">The ISO-639-2 code for the language.</param>\r
+               /// <returns>Object that describes the language.</returns>\r
+               public static Language Get(string code)\r
+               {\r
+                       iso639_lang_t language = InteropUtilities.ReadStructure<iso639_lang_t>(HBFunctions.lang_for_code2(code));\r
+                       return Converters.NativeToLanguage(language);\r
+               }\r
+       }\r
+}\r
index ed990596096c7c121e1346dcffec5d44f3b52ab7..322ff5c9c845c76b1ba11c42de6cab83966cadf6 100644 (file)
@@ -5,23 +5,23 @@
 // <summary>\r
 //   Defines the BitrateLimits type.\r
 // </summary>\r
-// --------------------------------------------------------------------------------------------------------------------
-
-namespace HandBrake.Interop.Model
+// --------------------------------------------------------------------------------------------------------------------\r
+\r
+namespace HandBrake.Interop.Model\r
 {\r
-    /// <summary>\r
-    /// The bitrate limits.\r
-    /// </summary>\r
-    public class BitrateLimits
+       /// <summary>\r
+       /// Represents bitrate limits as a range.\r
+       /// </summary>\r
+       public class BitrateLimits\r
        {\r
-        /// <summary>\r
-        /// Gets or sets the low.\r
-        /// </summary>\r
-        public int Low { get; set; }\r
+               /// <summary>\r
+               /// The inclusive lower limit for the bitrate.\r
+               /// </summary>\r
+               public int Low { get; set; }\r
 \r
-        /// <summary>\r
-        /// Gets or sets the high.\r
-        /// </summary>\r
-        public int High { get; set; }
-       }
-}
+               /// <summary>\r
+               /// The inclusive upper limit for the bitrate.\r
+               /// </summary>\r
+               public int High { get; set; }\r
+       }\r
+}\r
index ebfefff0a2c17eeb9cb54e09abb7e276ace2a3cd..e8d5462371f4b8380ce232ee4385c607a5db5212 100644 (file)
@@ -262,6 +262,29 @@ namespace HandBrake.Interop.Model
                        return new BitrateLimits { Low = low, High = high };\r
                }\r
 \r
+               /// <summary>\r
+               /// Gets the video quality limits for the given video codec.\r
+               /// </summary>\r
+               /// <param name="encoder">The video encoder to check.</param>\r
+               /// <returns>Limits on the video quality for the encoder.</returns>\r
+               public static VideoQualityLimits GetVideoQualityLimits(HBVideoEncoder encoder)\r
+               {\r
+                       float low = 0;\r
+                       float high = 0;\r
+                       float granularity = 0;\r
+                       int direction = 0;\r
+\r
+                       HBFunctions.hb_video_quality_get_limits((uint)encoder.Id, ref low, ref high, ref granularity, ref direction);\r
+\r
+                       return new VideoQualityLimits\r
+                               {\r
+                                       Low = low,\r
+                                       High = high,\r
+                                       Granularity = granularity,\r
+                                       Ascending = direction == 0\r
+                               };\r
+               }\r
+\r
                /// <summary>\r
                /// Sanitizes an audio bitrate given the output codec, sample rate and mixdown.\r
                /// </summary>\r
index 6d2aafec327e6851e01ac7dd2a3a244f22250a6e..2863d3b4849781d80ebd5974275a687573fe2673 100644 (file)
@@ -123,7 +123,8 @@ namespace HandBrake.Interop.Model.Encoding
                                Framerate = this.Framerate,\r
                                ConstantFramerate = this.ConstantFramerate,\r
 \r
-                               AudioEncodings = new List<AudioEncoding>(this.AudioEncodings)\r
+                               AudioEncodings = new List<AudioEncoding>(this.AudioEncodings),\r
+                               AudioEncoderFallback = this.AudioEncoderFallback\r
                        };\r
 \r
                        return profile;\r
diff --git a/win/CS/HandBrake.Interop/HandBrakeInterop/Model/VideoQualityLimits.cs b/win/CS/HandBrake.Interop/HandBrakeInterop/Model/VideoQualityLimits.cs
new file mode 100644 (file)
index 0000000..72d5bd9
--- /dev/null
@@ -0,0 +1,37 @@
+// --------------------------------------------------------------------------------------------------------------------\r
+// <copyright file="VideoQualityLimits.cs" company="HandBrake Project (http://handbrake.fr)">\r
+//   This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License.\r
+// </copyright>\r
+// <summary>\r
+//   Defines the VideoQualityLimits type.\r
+// </summary>\r
+// --------------------------------------------------------------------------------------------------------------------\r
+\r
+namespace HandBrake.Interop.Model\r
+{\r
+       /// <summary>\r
+       /// Represents limits on video quality for a particular encoder.\r
+       /// </summary>\r
+       public class VideoQualityLimits\r
+       {\r
+               /// <summary>\r
+               /// Gets or sets the inclusive lower limit for the quality.\r
+               /// </summary>\r
+               public float Low { get; set; }\r
+\r
+               /// <summary>\r
+               /// Gets or sets the inclusive upper limit for the quality.\r
+               /// </summary>\r
+               public float High { get; set; }\r
+\r
+               /// <summary>\r
+               /// Gets or sets the granularity for the quality.\r
+               /// </summary>\r
+               public float Granularity { get; set; }\r
+\r
+               /// <summary>\r
+               /// Gets or sets a value indicating whether the quality increases as the number increases.\r
+               /// </summary>\r
+               public bool Ascending { get; set; }\r
+       }\r
+}\r
index 2902f4f119c9514a8dd2777335fdaa0132ec0886..9f0e040c4562543050c286efacc9ccf3d49e05fa 100644 (file)
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
 // You can specify all the values or you can default the Build and Revision Numbers \r
 // by using the '*' as shown below:\r
 // [assembly: AssemblyVersion("1.0.*")]\r
-[assembly: AssemblyVersion("1.43.0.0")]\r
-[assembly: AssemblyFileVersion("1.43.0.0")]\r
+[assembly: AssemblyVersion("1.47.0.0")]\r
+[assembly: AssemblyFileVersion("1.47.0.0")]\r