From 6ff517c3741cf3476e035ae3f35ac908d2f79d15 Mon Sep 17 00:00:00 2001 From: randomengy Date: Mon, 31 Mar 2014 03:17:42 +0000 Subject: Interop: Added methods to dynamically pull the preset, profile, level and tune values. Replaced encoder-specific fields on EncodingProfile with general fields. Standardized the InteropUtilities conversion function names. git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@6142 b64f7644-9d1e-0410-96f1-a4d463321fa5 --- .../Utilities/InteropModelCreator.cs | 34 +++++++----- .../HandBrakeInterop/Converters/Converters.cs | 4 +- .../HandBrakeInterop/HandBrakeInstance.cs | 62 ++++++++++----------- .../HandBrakeInterop/HbLib/HbFunctions.cs | 13 +++++ .../HandBrakeInterop/Helpers/InteropUtilities.cs | 60 +++++++++++++++----- .../HandBrakeInterop/Helpers/Languages.cs | 4 +- .../HandBrakeInterop/Model/Encoders.cs | 14 ++--- .../Model/Encoding/EncodingProfile.cs | 64 +++++++--------------- .../Model/Encoding/HBVideoEncoder.cs | 53 ++++++++++++++++-- 9 files changed, 190 insertions(+), 118 deletions(-) diff --git a/win/CS/HandBrake.ApplicationServices/Utilities/InteropModelCreator.cs b/win/CS/HandBrake.ApplicationServices/Utilities/InteropModelCreator.cs index 5ff4924eb..9e8bc3c32 100644 --- a/win/CS/HandBrake.ApplicationServices/Utilities/InteropModelCreator.cs +++ b/win/CS/HandBrake.ApplicationServices/Utilities/InteropModelCreator.cs @@ -181,24 +181,30 @@ namespace HandBrake.ApplicationServices.Utilities profile.VideoEncodeRateType = work.VideoEncodeRateType; profile.VideoEncoder = Converters.GetVideoEncoder(work.VideoEncoder); - profile.H264Level = work.H264Level; - profile.X264Profile = work.H264Profile.ToString().ToLower().Replace(" ", string.Empty); // TODO change these away from strings. - profile.X264Preset = work.X264Preset.ToString().ToLower().Replace(" ", string.Empty); - profile.X264Tunes = new List(); - - if (work.X264Tune != x264Tune.None) + if (work.VideoEncoder == VideoEncoder.X264) { - profile.X264Tunes.Add(work.X264Tune.ToString().ToLower().Replace(" ", string.Empty)); - } + profile.VideoPreset = work.X264Preset.ToString().ToLower().Replace(" ", string.Empty); + profile.VideoTunes = new List(); + + if (work.X264Tune != x264Tune.None) + { + profile.VideoTunes.Add(work.X264Tune.ToString().ToLower().Replace(" ", string.Empty)); + } - if (work.FastDecode) + if (work.FastDecode) + { + profile.VideoTunes.Add("fastdecode"); + } + } + else if (work.VideoEncoder == VideoEncoder.X265) { - profile.X264Tunes.Add("fastdecode"); + profile.VideoPreset = work.X265Preset.ToString().ToLower().Replace(" ", string.Empty); + profile.VideoProfile = work.H265Profile.ToString().ToLower().Replace(" ", string.Empty); + profile.VideoTunes = new List(); } - profile.X265Preset = work.X265Preset.ToString().ToLower().Replace(" ", string.Empty); - profile.X265Profile = work.H265Profile.ToString().ToLower().Replace(" ", string.Empty); - profile.X265Tunes = new List(); + profile.VideoLevel = work.H264Level; + profile.VideoProfile = work.H264Profile.ToString().ToLower().Replace(" ", string.Empty); // TODO change these away from strings. // Chapter Markers profile.IncludeChapterMarkers = work.IncludeChapterMarkers; @@ -206,7 +212,7 @@ namespace HandBrake.ApplicationServices.Utilities job.UseDefaultChapterNames = work.IncludeChapterMarkers; // Advanced Settings - profile.X264Options = work.AdvancedEncoderOptions; + profile.VideoOptions = work.AdvancedEncoderOptions; // Subtitles job.Subtitles = new Subtitles { SourceSubtitles = new List(), SrtSubtitles = new List() }; diff --git a/win/CS/HandBrake.Interop/HandBrakeInterop/Converters/Converters.cs b/win/CS/HandBrake.Interop/HandBrakeInterop/Converters/Converters.cs index a707e0eb5..d0468ec27 100644 --- a/win/CS/HandBrake.Interop/HandBrakeInterop/Converters/Converters.cs +++ b/win/CS/HandBrake.Interop/HandBrakeInterop/Converters/Converters.cs @@ -192,8 +192,8 @@ namespace HandBrake.Interop.Converters /// The converted structure. public static Language NativeToLanguage(iso639_lang_t language) { - string englishName = InteropUtilities.ReadUtf8Ptr(language.eng_name); - string nativeName = InteropUtilities.ReadUtf8Ptr(language.native_name); + string englishName = InteropUtilities.ToStringFromUtf8Ptr(language.eng_name); + string nativeName = InteropUtilities.ToStringFromUtf8Ptr(language.native_name); return new Language { Code = language.iso639_2, diff --git a/win/CS/HandBrake.Interop/HandBrakeInterop/HandBrakeInstance.cs b/win/CS/HandBrake.Interop/HandBrakeInterop/HandBrakeInstance.cs index 54a2135ee..e97343852 100644 --- a/win/CS/HandBrake.Interop/HandBrakeInterop/HandBrakeInstance.cs +++ b/win/CS/HandBrake.Interop/HandBrakeInterop/HandBrakeInstance.cs @@ -245,7 +245,7 @@ namespace HandBrake.Interop { this.previewCount = previewCount; - IntPtr pathPtr = InteropUtilities.CreateUtf8Ptr(path); + IntPtr pathPtr = InteropUtilities.ToUtf8PtrFromString(path); HBFunctions.hb_scan(this.hbHandle, pathPtr, titleIndex, previewCount, 1, (ulong)(minDuration.TotalSeconds * 90000)); Marshal.FreeHGlobal(pathPtr); @@ -280,7 +280,7 @@ namespace HandBrake.Interop public BitmapImage GetPreview(EncodeJob job, int previewNumber) { IntPtr nativeJobPtr = HBFunctions.hb_job_init_by_index(this.hbHandle, this.GetTitleIndex(job.Title)); - var nativeJob = InteropUtilities.ReadStructure(nativeJobPtr); + var nativeJob = InteropUtilities.ToStructureFromPtr(nativeJobPtr); List allocatedMemory = this.ApplyJob(ref nativeJob, job); @@ -473,7 +473,7 @@ namespace HandBrake.Interop this.currentJob = job; IntPtr nativeJobPtr = HBFunctions.hb_job_init_by_index(this.hbHandle, this.GetTitleIndex(job.Title)); - var nativeJob = InteropUtilities.ReadStructure(nativeJobPtr); + var nativeJob = InteropUtilities.ToStructureFromPtr(nativeJobPtr); this.encodeAllocatedMemory = this.ApplyJob(ref nativeJob, job, preview, previewNumber, previewSeconds, overallSelectedLengthSeconds); @@ -490,31 +490,31 @@ namespace HandBrake.Interop } } - string x264Options = profile.X264Options ?? string.Empty; - IntPtr originalX264Options = Marshal.StringToHGlobalAnsi(x264Options); - this.encodeAllocatedMemory.Add(originalX264Options); + string videoOptions = profile.VideoOptions ?? string.Empty; + IntPtr originalVideoOptions = Marshal.StringToHGlobalAnsi(videoOptions); + this.encodeAllocatedMemory.Add(originalVideoOptions); - if (!string.IsNullOrEmpty(profile.X264Profile)) + if (!string.IsNullOrEmpty(profile.VideoProfile)) { - nativeJob.encoder_profile = Marshal.StringToHGlobalAnsi(profile.X264Profile); + nativeJob.encoder_profile = Marshal.StringToHGlobalAnsi(profile.VideoProfile); this.encodeAllocatedMemory.Add(nativeJob.encoder_profile); } - if (!string.IsNullOrEmpty(profile.X264Preset)) + if (!string.IsNullOrEmpty(profile.VideoPreset)) { - nativeJob.encoder_preset = Marshal.StringToHGlobalAnsi(profile.X264Preset); + nativeJob.encoder_preset = Marshal.StringToHGlobalAnsi(profile.VideoPreset); this.encodeAllocatedMemory.Add(nativeJob.encoder_preset); } - if (profile.X264Tunes != null && profile.X264Tunes.Count > 0) + if (profile.VideoTunes != null && profile.VideoTunes.Count > 0) { - nativeJob.encoder_tune = Marshal.StringToHGlobalAnsi(string.Join(",", profile.X264Tunes)); + nativeJob.encoder_tune = Marshal.StringToHGlobalAnsi(string.Join(",", profile.VideoTunes)); this.encodeAllocatedMemory.Add(nativeJob.encoder_tune); } - if (!string.IsNullOrEmpty(job.EncodingProfile.H264Level)) + if (!string.IsNullOrEmpty(job.EncodingProfile.VideoLevel)) { - nativeJob.encoder_level = Marshal.StringToHGlobalAnsi(job.EncodingProfile.H264Level); + nativeJob.encoder_level = Marshal.StringToHGlobalAnsi(job.EncodingProfile.VideoLevel); this.encodeAllocatedMemory.Add(nativeJob.encoder_level); } @@ -535,7 +535,7 @@ namespace HandBrake.Interop { // First pass. Apply turbo options if needed. nativeJob.pass = 1; - string firstPassAdvancedOptions = x264Options; + string firstPassAdvancedOptions = videoOptions; if (job.EncodingProfile.TurboFirstPass) { if (firstPassAdvancedOptions == string.Empty) @@ -555,7 +555,7 @@ namespace HandBrake.Interop // Second pass. Apply normal options. nativeJob.pass = 2; - nativeJob.encoder_options = originalX264Options; + nativeJob.encoder_options = originalVideoOptions; HBFunctions.hb_add(this.hbHandle, ref nativeJob); } @@ -563,7 +563,7 @@ namespace HandBrake.Interop { // One pass job. nativeJob.pass = 0; - nativeJob.encoder_options = originalX264Options; + nativeJob.encoder_options = originalVideoOptions; HBFunctions.hb_add(this.hbHandle, ref nativeJob); } @@ -647,7 +647,7 @@ namespace HandBrake.Interop } IntPtr nativeJobPtr = HBFunctions.hb_job_init_by_index(this.hbHandle, this.GetTitleIndex(title)); - var nativeJob = InteropUtilities.ReadStructure(nativeJobPtr); + var nativeJob = InteropUtilities.ToStructureFromPtr(nativeJobPtr); List allocatedMemory = this.ApplyJob(ref nativeJob, job); InteropUtilities.FreeMemory(allocatedMemory); @@ -825,8 +825,8 @@ namespace HandBrake.Interop this.titles = new List(); IntPtr titleSetPtr = HBFunctions.hb_get_title_set(this.hbHandle); - hb_title_set_s titleSet = InteropUtilities.ReadStructure<hb_title_set_s>(titleSetPtr); - this.originalTitles = titleSet.list_title.ToList<hb_title_s>(); + hb_title_set_s titleSet = InteropUtilities.ToStructureFromPtr<hb_title_set_s>(titleSetPtr); + this.originalTitles = titleSet.list_title.ToListFromHandBrakeList<hb_title_s>(); foreach (hb_title_s title in this.originalTitles) { @@ -1068,11 +1068,11 @@ namespace HandBrake.Interop if (string.IsNullOrWhiteSpace(job.CustomChapterNames[i])) { - chapterNamePtr = InteropUtilities.CreateUtf8Ptr("Chapter " + (i + 1)); + chapterNamePtr = InteropUtilities.ToUtf8PtrFromString("Chapter " + (i + 1)); } else { - chapterNamePtr = InteropUtilities.CreateUtf8Ptr(job.CustomChapterNames[i]); + chapterNamePtr = InteropUtilities.ToUtf8PtrFromString(job.CustomChapterNames[i]); } HBFunctions.hb_chapter_set_title__ptr(nativeChapters[i], chapterNamePtr); @@ -1398,7 +1398,7 @@ namespace HandBrake.Interop // areBframes // color_matrix - List<hb_audio_s> titleAudio = originalTitle.list_audio.ToList<hb_audio_s>(); + List<hb_audio_s> titleAudio = originalTitle.list_audio.ToListFromHandBrakeList<hb_audio_s>(); var audioList = new List<hb_audio_s>(); int numTracks = 0; @@ -1423,7 +1423,7 @@ namespace HandBrake.Interop audioList.Add(this.ConvertAudioBack(outputTrack.Item1, titleAudio[outputTrack.Item2 - 1], numTracks++, allocatedMemory)); } - NativeList nativeAudioList = InteropUtilities.ConvertListBack<hb_audio_s>(audioList); + NativeList nativeAudioList = InteropUtilities.ToHandBrakeListFromList<hb_audio_s>(audioList); nativeJob.list_audio = nativeAudioList.Ptr; allocatedMemory.AddRange(nativeAudioList.AllocatedMemory); @@ -1431,7 +1431,7 @@ namespace HandBrake.Interop { if (job.Subtitles.SourceSubtitles != null && job.Subtitles.SourceSubtitles.Count > 0) { - List<hb_subtitle_s> titleSubtitles = originalTitle.list_subtitle.ToList<hb_subtitle_s>(); + List<hb_subtitle_s> titleSubtitles = originalTitle.list_subtitle.ToListFromHandBrakeList<hb_subtitle_s>(); foreach (SourceSubtitle sourceSubtitle in job.Subtitles.SourceSubtitles) { @@ -1529,7 +1529,7 @@ namespace HandBrake.Interop } else { - IntPtr outputPathPtr = InteropUtilities.CreateUtf8Ptr(job.OutputPath); + IntPtr outputPathPtr = InteropUtilities.ToUtf8PtrFromString(job.OutputPath); allocatedMemory.Add(outputPathPtr); nativeJob.file = outputPathPtr; } @@ -1618,7 +1618,7 @@ namespace HandBrake.Interop private void AddFilter(List<hb_filter_object_s> filterList, int filterType, string settings, List<IntPtr> allocatedMemory) { IntPtr settingsNativeString = Marshal.StringToHGlobalAnsi(settings); - hb_filter_object_s filter = InteropUtilities.ReadStructure<hb_filter_object_s>(HBFunctions.hb_filter_init(filterType)); + hb_filter_object_s filter = InteropUtilities.ToStructureFromPtr<hb_filter_object_s>(HBFunctions.hb_filter_init(filterType)); filter.settings = settingsNativeString; allocatedMemory.Add(settingsNativeString); @@ -1647,7 +1647,7 @@ namespace HandBrake.Interop filterPtrList.Add(filterPtr); } - NativeList filterListNative = InteropUtilities.CreateIntPtrList(filterPtrList); + NativeList filterListNative = InteropUtilities.ToHandBrakeListFromPtrList(filterPtrList); allocatedMemory.AddRange(filterListNative.AllocatedMemory); return filterListNative; @@ -1831,7 +1831,7 @@ namespace HandBrake.Interop } int currentSubtitleTrack = 1; - List<hb_subtitle_s> subtitleList = title.list_subtitle.ToList<hb_subtitle_s>(); + List<hb_subtitle_s> subtitleList = title.list_subtitle.ToListFromHandBrakeList<hb_subtitle_s>(); foreach (hb_subtitle_s subtitle in subtitleList) { var newSubtitle = new Subtitle @@ -1888,7 +1888,7 @@ namespace HandBrake.Interop } int currentAudioTrack = 1; - List<hb_audio_s> audioList = title.list_audio.ToList<hb_audio_s>(); + List<hb_audio_s> audioList = title.list_audio.ToListFromHandBrakeList<hb_audio_s>(); foreach (hb_audio_s audio in audioList) { var newAudio = new AudioTrack @@ -1910,7 +1910,7 @@ namespace HandBrake.Interop currentAudioTrack++; } - List<hb_chapter_s> chapterList = title.list_chapter.ToList<hb_chapter_s>(); + List<hb_chapter_s> chapterList = title.list_chapter.ToListFromHandBrakeList<hb_chapter_s>(); foreach (hb_chapter_s chapter in chapterList) { var newChapter = new Chapter diff --git a/win/CS/HandBrake.Interop/HandBrakeInterop/HbLib/HbFunctions.cs b/win/CS/HandBrake.Interop/HandBrakeInterop/HbLib/HbFunctions.cs index 0f8d59c86..9402d0940 100644 --- a/win/CS/HandBrake.Interop/HandBrakeInterop/HbLib/HbFunctions.cs +++ b/win/CS/HandBrake.Interop/HandBrakeInterop/HbLib/HbFunctions.cs @@ -373,6 +373,19 @@ namespace HandBrake.Interop.HbLib [DllImport("hb.dll", EntryPoint = "hb_container_get_next", CallingConvention = CallingConvention.Cdecl)] public static extern IntPtr hb_container_get_next(IntPtr last); + [DllImport("hb.dll", EntryPoint = "hb_video_encoder_get_presets", CallingConvention = CallingConvention.Cdecl)] + public static extern IntPtr hb_video_encoder_get_presets(int encoder); + + [DllImport("hb.dll", EntryPoint = "hb_video_encoder_get_tunes", CallingConvention = CallingConvention.Cdecl)] + public static extern IntPtr hb_video_encoder_get_tunes(int encoder); + + [DllImport("hb.dll", EntryPoint = "hb_video_encoder_get_profiles", CallingConvention = CallingConvention.Cdecl)] + public static extern IntPtr hb_video_encoder_get_profiles(int encoder); + + [DllImport("hb.dll", EntryPoint = "hb_video_encoder_get_levels", CallingConvention = CallingConvention.Cdecl)] + public static extern IntPtr hb_video_encoder_get_levels(int encoder); + + [DllImport("hb.dll", EntryPoint = "lang_get_next", CallingConvention = CallingConvention.Cdecl)] public static extern IntPtr lang_get_next(IntPtr last); diff --git a/win/CS/HandBrake.Interop/HandBrakeInterop/Helpers/InteropUtilities.cs b/win/CS/HandBrake.Interop/HandBrakeInterop/Helpers/InteropUtilities.cs index 0019aa2d2..6399beee2 100644 --- a/win/CS/HandBrake.Interop/HandBrakeInterop/Helpers/InteropUtilities.cs +++ b/win/CS/HandBrake.Interop/HandBrakeInterop/Helpers/InteropUtilities.cs @@ -28,7 +28,7 @@ namespace HandBrake.Interop.Helpers /// <typeparam name="T">The type to convert the structure to.</typeparam> /// <param name="structPtr">The pointer to the native structure.</param> /// <returns>The converted structure.</returns> - public static T ReadStructure<T>(IntPtr structPtr) + public static T ToStructureFromPtr<T>(IntPtr structPtr) { return (T)Marshal.PtrToStructure(structPtr, typeof(T)); } @@ -38,7 +38,7 @@ namespace HandBrake.Interop.Helpers /// </summary> /// <param name="stringPtr">The pointer to the string.</param> /// <returns>The resulting string.</returns> - public static string ReadUtf8Ptr(IntPtr stringPtr) + public static string ToStringFromUtf8Ptr(IntPtr stringPtr) { var data = new List<byte>(); var ptr = stringPtr; @@ -66,7 +66,7 @@ namespace HandBrake.Interop.Helpers /// <returns> /// The <see cref="IntPtr"/>. /// </returns> - public static IntPtr CreateUtf8Ptr(string str) + public static IntPtr ToUtf8PtrFromString(string str) { byte[] bytes = Encoding.UTF8.GetBytes(str); IntPtr stringPtr = Marshal.AllocHGlobal(bytes.Length + 1); @@ -87,7 +87,7 @@ namespace HandBrake.Interop.Helpers /// <typeparam name="T">The type of structure in the list.</typeparam> /// <param name="listPtr">The pointer to the native list.</param> /// <returns>The converted managed list.</returns> - public static List<T> ToList<T>(this IntPtr listPtr) + public static List<T> ToListFromHandBrakeList<T>(this IntPtr listPtr) { List<T> returnList = new List<T>(); NativeList nativeList = new NativeList(listPtr); @@ -95,7 +95,7 @@ namespace HandBrake.Interop.Helpers for (int i = 0; i < nativeList.Count; i++) { IntPtr itemPtr = nativeList[i]; - returnList.Add(ReadStructure<T>(itemPtr)); + returnList.Add(ToStructureFromPtr<T>(itemPtr)); } return returnList; @@ -127,14 +127,14 @@ namespace HandBrake.Interop.Helpers /// <param name="arrayPtr">The pointer to the array.</param> /// <param name="count">The number of items in the array.</param> /// <returns>The converted collection.</returns> - public static IEnumerable<T> ConvertArray<T>(IntPtr arrayPtr, int count) + public static List<T> ToListFromNativeArray<T>(IntPtr arrayPtr, int count) { IntPtr currentItem = arrayPtr; var result = new List<T>(); for (int i = 0; i < count; i++) { - T nativeEncoder = ReadStructure<T>(currentItem); + T nativeEncoder = ToStructureFromPtr<T>(currentItem); result.Add(nativeEncoder); currentItem = IntPtr.Add(currentItem, Marshal.SizeOf(typeof(T))); @@ -143,12 +143,46 @@ namespace HandBrake.Interop.Helpers return result; } + /// <summary> + /// Takes an array pointer and converts it into a list of strings. + /// </summary> + /// <param name="arrayPtr">A pointer to a raw list of strings.</param> + /// <returns>The list of strings.</returns> + public static List<string> ToStringListFromArrayPtr(IntPtr arrayPtr) + { + if (arrayPtr == IntPtr.Zero) + { + return null; + } + + return ToPtrListFromPtr(arrayPtr).Select(ptr => Marshal.PtrToStringAnsi(ptr)).ToList(); + } + + /// <summary> + /// Finds all the pointers starting at the given location and puts them in a list. Stops when it finds zero for a pointer. + /// </summary> + /// <param name="arrayPtr">The address of the list of pointers.</param> + /// <returns>The list of pointers.</returns> + public static List<IntPtr> ToPtrListFromPtr(IntPtr arrayPtr) + { + var result = new List<IntPtr>(); + int ptrSize = Marshal.SizeOf(typeof(IntPtr)); + IntPtr currentPtr = Marshal.ReadIntPtr(arrayPtr); + for (int i = 0; currentPtr != IntPtr.Zero; i++) + { + result.Add(currentPtr); + currentPtr = Marshal.ReadIntPtr(arrayPtr, (i + 1) * ptrSize); + } + + return result; + } + /// <summary> /// Creates a native HandBrake list from the given managed list of pointers. /// </summary> /// <param name="list">The managed list to convert.</param> /// <returns>The converted native list.</returns> - public static NativeList CreateIntPtrList(List<IntPtr> list) + public static NativeList ToHandBrakeListFromPtrList(List<IntPtr> list) { NativeList returnList = NativeList.CreateList(); @@ -166,7 +200,7 @@ namespace HandBrake.Interop.Helpers /// <typeparam name="T">The type of structures in the list.</typeparam> /// <param name="list">The managed list to convert.</param> /// <returns>The converted native list.</returns> - public static NativeList ConvertListBack<T>(List<T> list) + public static NativeList ToHandBrakeListFromList<T>(List<T> list) { NativeList returnList = NativeList.CreateList(); foreach (T item in list) @@ -189,9 +223,9 @@ namespace HandBrake.Interop.Helpers /// <param name="iterator">The iterator to use to build the list.</param> /// <param name="converter">The converter to convert from the struct to the object.</param> /// <returns>The list of objects.</returns> - public static List<T2> GetListFromIterator<T1, T2>(Func<IntPtr, IntPtr> iterator, Func<T1, T2> converter) + public static List<T2> ToListFromIterator<T1, T2>(Func<IntPtr, IntPtr> iterator, Func<T1, T2> converter) { - return ReadStructureListFromIterator<T1>(iterator).Select(converter).ToList(); + return ToListFromIterator<T1>(iterator).Select(converter).ToList(); } /// <summary> @@ -200,7 +234,7 @@ namespace HandBrake.Interop.Helpers /// <typeparam name="T">The type of the struct.</typeparam> /// <param name="iterator">The iterator to use to build the list.</param> /// <returns>The list of structs.</returns> - public static List<T> ReadStructureListFromIterator<T>(Func<IntPtr, IntPtr> iterator) + public static List<T> ToListFromIterator<T>(Func<IntPtr, IntPtr> iterator) { var structureList = new List<T>(); IntPtr current = IntPtr.Zero; @@ -208,7 +242,7 @@ namespace HandBrake.Interop.Helpers current = iterator(current); while (current != IntPtr.Zero) { - T encoder = ReadStructure<T>(current); + T encoder = ToStructureFromPtr<T>(current); structureList.Add(encoder); current = iterator(current); diff --git a/win/CS/HandBrake.Interop/HandBrakeInterop/Helpers/Languages.cs b/win/CS/HandBrake.Interop/HandBrakeInterop/Helpers/Languages.cs index b89e190eb..7dfe40301 100644 --- a/win/CS/HandBrake.Interop/HandBrakeInterop/Helpers/Languages.cs +++ b/win/CS/HandBrake.Interop/HandBrakeInterop/Helpers/Languages.cs @@ -33,7 +33,7 @@ namespace HandBrake.Interop.Helpers { return allLanguages ?? (allLanguages = - InteropUtilities.GetListFromIterator<iso639_lang_t, Language>(HBFunctions.lang_get_next, Converters.Converters.NativeToLanguage)); + InteropUtilities.ToListFromIterator<iso639_lang_t, Language>(HBFunctions.lang_get_next, Converters.Converters.NativeToLanguage)); } } @@ -44,7 +44,7 @@ namespace HandBrake.Interop.Helpers /// <returns>Object that describes the language.</returns> public static Language Get(string code) { - iso639_lang_t language = InteropUtilities.ReadStructure<iso639_lang_t>(HBFunctions.lang_for_code2(code)); + iso639_lang_t language = InteropUtilities.ToStructureFromPtr<iso639_lang_t>(HBFunctions.lang_for_code2(code)); return Converters.Converters.NativeToLanguage(language); } } diff --git a/win/CS/HandBrake.Interop/HandBrakeInterop/Model/Encoders.cs b/win/CS/HandBrake.Interop/HandBrakeInterop/Model/Encoders.cs index 593c1015f..ecf1b775a 100644 --- a/win/CS/HandBrake.Interop/HandBrakeInterop/Model/Encoders.cs +++ b/win/CS/HandBrake.Interop/HandBrakeInterop/Model/Encoders.cs @@ -76,7 +76,7 @@ namespace HandBrake.Interop.Model { if (audioEncoders == null) { - audioEncoders = InteropUtilities.GetListFromIterator<hb_encoder_s, HBAudioEncoder>(HBFunctions.hb_audio_encoder_get_next, Converters.NativeToAudioEncoder); + audioEncoders = InteropUtilities.ToListFromIterator<hb_encoder_s, HBAudioEncoder>(HBFunctions.hb_audio_encoder_get_next, Converters.NativeToAudioEncoder); } return audioEncoders; @@ -92,7 +92,7 @@ namespace HandBrake.Interop.Model { if (videoEncoders == null) { - videoEncoders = InteropUtilities.GetListFromIterator<hb_encoder_s, HBVideoEncoder>(HBFunctions.hb_video_encoder_get_next, Converters.NativeToVideoEncoder); + videoEncoders = InteropUtilities.ToListFromIterator<hb_encoder_s, HBVideoEncoder>(HBFunctions.hb_video_encoder_get_next, Converters.NativeToVideoEncoder); } return videoEncoders; @@ -108,7 +108,7 @@ namespace HandBrake.Interop.Model { if (videoFramerates == null) { - videoFramerates = InteropUtilities.GetListFromIterator<hb_rate_s, HBRate>(HBFunctions.hb_video_framerate_get_next, Converters.NativeToRate); + videoFramerates = InteropUtilities.ToListFromIterator<hb_rate_s, HBRate>(HBFunctions.hb_video_framerate_get_next, Converters.NativeToRate); } return videoFramerates; @@ -124,7 +124,7 @@ namespace HandBrake.Interop.Model { if (mixdowns == null) { - mixdowns = InteropUtilities.GetListFromIterator<hb_mixdown_s, HBMixdown>(HBFunctions.hb_mixdown_get_next, Converters.NativeToMixdown); + mixdowns = InteropUtilities.ToListFromIterator<hb_mixdown_s, HBMixdown>(HBFunctions.hb_mixdown_get_next, Converters.NativeToMixdown); } return mixdowns; @@ -140,7 +140,7 @@ namespace HandBrake.Interop.Model { if (audioBitrates == null) { - audioBitrates = InteropUtilities.GetListFromIterator<hb_rate_s, int>(HBFunctions.hb_audio_bitrate_get_next, b => b.rate); + audioBitrates = InteropUtilities.ToListFromIterator<hb_rate_s, int>(HBFunctions.hb_audio_bitrate_get_next, b => b.rate); } return audioBitrates; @@ -156,7 +156,7 @@ namespace HandBrake.Interop.Model { if (audioSampleRates == null) { - audioSampleRates = InteropUtilities.GetListFromIterator<hb_rate_s, HBRate>(HBFunctions.hb_audio_samplerate_get_next, Converters.NativeToRate); + audioSampleRates = InteropUtilities.ToListFromIterator<hb_rate_s, HBRate>(HBFunctions.hb_audio_samplerate_get_next, Converters.NativeToRate); } return audioSampleRates; @@ -172,7 +172,7 @@ namespace HandBrake.Interop.Model { if (containers == null) { - containers = InteropUtilities.GetListFromIterator<hb_container_s, HBContainer>(HBFunctions.hb_container_get_next, Converters.NativeToContainer); + containers = InteropUtilities.ToListFromIterator<hb_container_s, HBContainer>(HBFunctions.hb_container_get_next, Converters.NativeToContainer); } return containers; diff --git a/win/CS/HandBrake.Interop/HandBrakeInterop/Model/Encoding/EncodingProfile.cs b/win/CS/HandBrake.Interop/HandBrakeInterop/Model/Encoding/EncodingProfile.cs index c1947745b..257c324d7 100644 --- a/win/CS/HandBrake.Interop/HandBrakeInterop/Model/Encoding/EncodingProfile.cs +++ b/win/CS/HandBrake.Interop/HandBrakeInterop/Model/Encoding/EncodingProfile.cs @@ -193,60 +193,35 @@ namespace HandBrake.Interop.Model.Encoding public string VideoEncoder { get; set; } /// <summary> - /// Gets or sets the x 264 options. + /// Gets or sets the video encoder options. /// </summary> - public string X264Options { get; set; } + public string VideoOptions { get; set; } /// <summary> - /// Gets or sets the x 264 profile. + /// Gets or sets the video encoder profile name. /// </summary> - public string X264Profile { get; set; } + public string VideoProfile { get; set; } /// <summary> - /// Gets or sets the x 264 preset. + /// Gets or sets the video encoder preset name. /// </summary> - public string X264Preset { get; set; } + public string VideoPreset { get; set; } /// <summary> - /// Gets or sets the x 264 tunes. + /// Gets or sets the video encoder tunes. /// </summary> - public List<string> X264Tunes { get; set; } + public List<string> VideoTunes { get; set; } - /// <summary> - /// Gets or sets the x 265 profile. - /// </summary> - public string X265Profile { get; set; } - - /// <summary> - /// Gets or sets the x 265 preset. - /// </summary> - public string X265Preset { get; set; } + /// <summary> + /// Gets or sets the video encoder level. + /// </summary> + public string VideoLevel { get; set; } /// <summary> - /// Gets or sets the x 265 tunes. - /// </summary> - public List<string> X265Tunes { get; set; } - - /// <summary> - /// Gets or sets the x 265 level. - /// </summary> - public List<string> X265Level { get; set; } - - /// <summary> - /// Gets or sets the qsv preset. - /// </summary> - public string QsvPreset { get; set; } - - /// <summary> - /// Gets or sets a value indicating whether qsv decode. + /// Gets or sets a value indicating whether to use QSV decoding. /// </summary> public bool QsvDecode { get; set; } - /// <summary> - /// Gets or sets the h 264 level. - /// </summary> - public string H264Level { get; set; } - /// <summary> /// Gets or sets the video encode rate type. /// </summary> @@ -345,13 +320,12 @@ namespace HandBrake.Interop.Model.Encoding Grayscale = this.Grayscale, VideoEncoder = this.VideoEncoder, - X264Options = this.X264Options, - X264Profile = this.X264Profile, - X264Preset = this.X264Preset, - X264Tunes = this.X264Tunes, - QsvPreset = this.QsvPreset, - QsvDecode = this.QsvDecode, - H264Level = this.H264Level, + VideoOptions = this.VideoOptions, + VideoProfile = this.VideoProfile, + VideoPreset = this.VideoPreset, + VideoTunes = this.VideoTunes, + VideoLevel = this.VideoLevel, + QsvDecode = this.QsvDecode, VideoEncodeRateType = this.VideoEncodeRateType, Quality = this.Quality, TargetSize = this.TargetSize, diff --git a/win/CS/HandBrake.Interop/HandBrakeInterop/Model/Encoding/HBVideoEncoder.cs b/win/CS/HandBrake.Interop/HandBrakeInterop/Model/Encoding/HBVideoEncoder.cs index 98bbcc319..810994ba8 100644 --- a/win/CS/HandBrake.Interop/HandBrakeInterop/Model/Encoding/HBVideoEncoder.cs +++ b/win/CS/HandBrake.Interop/HandBrakeInterop/Model/Encoding/HBVideoEncoder.cs @@ -9,13 +9,16 @@ namespace HandBrake.Interop.Model.Encoding { - /// <summary> + using System.Collections.Generic; + + using HandBrake.Interop.HbLib; + using HandBrake.Interop.Helpers; + + /// <summary> /// The hb video encoder. /// </summary> public class HBVideoEncoder { - #region Public Properties - /// <summary> /// Gets or sets the compatible containers. /// </summary> @@ -36,6 +39,48 @@ namespace HandBrake.Interop.Model.Encoding /// </summary> public string ShortName { get; set; } - #endregion + /// <summary> + /// Gets the list of presets this encoder supports. (null if the encoder doesn't support presets) + /// </summary> + public List<string> Presets + { + get + { + return InteropUtilities.ToStringListFromArrayPtr(HBFunctions.hb_video_encoder_get_presets(this.Id)); + } + } + + /// <summary> + /// Gets the list of tunes this encoder supports. (null if the encoder doesn't support tunes) + /// </summary> + public List<string> Tunes + { + get + { + return InteropUtilities.ToStringListFromArrayPtr(HBFunctions.hb_video_encoder_get_tunes(this.Id)); + } + } + + /// <summary> + /// Gets the list of profiles this encoder supports. (null if the encoder doesn't support profiles) + /// </summary> + public List<string> Profiles + { + get + { + return InteropUtilities.ToStringListFromArrayPtr(HBFunctions.hb_video_encoder_get_profiles(this.Id)); + } + } + + /// <summary> + /// Gets the list of levels this encoder supports. (null if the encoder doesn't support levels) + /// </summary> + public List<string> Levels + { + get + { + return InteropUtilities.ToStringListFromArrayPtr(HBFunctions.hb_video_encoder_get_levels(this.Id)); + } + } } } \ No newline at end of file -- cgit v1.2.3