Changeset 1434fee


Ignore:
Timestamp:
10/08/11 02:12:46 (5 years ago)
Author:
randomengy <david.rickard@…>
Children:
cdfffee
Parents:
2c022699
Message:

Interop: Updating structs to keep up with libhb. Adding support for x264 profile/preset/tune and updating to use built in auto-passthrough.

git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk/win/CS@4270 b64f7644-9d1e-0410-96f1-a4d463321fa5

Location:
HandBrake.Interop/HandBrakeInterop
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • HandBrake.Interop/HandBrakeInterop/Converters.cs

    r39b4d96 r1434fee  
    1919        public static class Converters
    2020        {
    21             /// <summary>
    22             /// Video Frame Rates
    23             /// </summary>
    24             private static Dictionary<double, int> vrates = new Dictionary<double, int>
     21                /// <summary>
     22                /// Video Frame Rates
     23                /// </summary>
     24                private static Dictionary<double, int> vrates = new Dictionary<double, int>
    2525                {
    2626                        {5, 5400000},
     
    3434                };
    3535
    36             /// <summary>
    37         /// Convert Framerate to Video Rates
    38             /// </summary>
    39             /// <param name="framerate">
    40             /// The framerate.
    41             /// </param>
    42             /// <returns>
    43             /// The vrate if a valid framerate is passed in.
    44             /// </returns>
    45             /// <exception cref="ArgumentException">
    46             /// Thrown when framerate is invalid.
    47             /// </exception>
    48             public static int FramerateToVrate(double framerate)
     36                /// <summary>
     37                /// Convert Framerate to Video Rates
     38                /// </summary>
     39                /// <param name="framerate">
     40                /// The framerate.
     41                /// </param>
     42                /// <returns>
     43                /// The vrate if a valid framerate is passed in.
     44                /// </returns>
     45                /// <exception cref="ArgumentException">
     46                /// Thrown when framerate is invalid.
     47                /// </exception>
     48                public static int FramerateToVrate(double framerate)
    4949                {
    5050                        if (!vrates.ContainsKey(framerate))
     
    5656                }
    5757
    58             /// <summary>
    59             /// Convert a Mixdown object to HandBrakes native mixdown constant.
    60             /// </summary>
    61             /// <param name="mixdown">
    62             /// The mixdown.
    63             /// </param>
    64             /// <returns>
    65             /// NativeContstant that represents the mixdown.
    66             /// </returns>
    67             /// <exception cref="ArgumentException">
    68             /// Thrown for an invalid mixodown.
    69             /// </exception>
    70             public static int MixdownToNative(Mixdown mixdown)
     58                /// <summary>
     59                /// Convert a Mixdown object to HandBrakes native mixdown constant.
     60                /// </summary>
     61                /// <param name="mixdown">
     62                /// The mixdown.
     63                /// </param>
     64                /// <returns>
     65                /// NativeContstant that represents the mixdown.
     66                /// </returns>
     67                /// <exception cref="ArgumentException">
     68                /// Thrown for an invalid mixodown.
     69                /// </exception>
     70                public static int MixdownToNative(Mixdown mixdown)
    7171                {
    7272                        if (mixdown == Mixdown.Auto)
     
    7777                        switch (mixdown)
    7878                        {
     79                                case Mixdown.None:
     80                                        return NativeConstants.HB_AMIXDOWN_NONE;
    7981                                case Mixdown.DolbyProLogicII:
    8082                                        return NativeConstants.HB_AMIXDOWN_DOLBYPLII;
     
    9294                }
    9395
    94             /// <summary>
    95             /// Convert an native internal handbrake mixdown to a local mixdown enum.
    96             /// </summary>
    97             /// <param name="mixdown">
    98             /// The mixdown.
    99             /// </param>
    100             /// <returns>
    101             /// A mixdown object.
    102             /// </returns>
    103             /// <exception cref="ArgumentException">
    104             /// thrown when mixdown is invalid.
    105             /// </exception>
    106             public static Mixdown NativeToMixdown(int mixdown)
     96                /// <summary>
     97                /// Convert an native internal handbrake mixdown to a local mixdown enum.
     98                /// </summary>
     99                /// <param name="mixdown">
     100                /// The mixdown.
     101                /// </param>
     102                /// <returns>
     103                /// A mixdown object.
     104                /// </returns>
     105                /// <exception cref="ArgumentException">
     106                /// thrown when mixdown is invalid.
     107                /// </exception>
     108                public static Mixdown NativeToMixdown(int mixdown)
    107109                {
    108110                        switch (mixdown)
    109111                        {
     112                                case NativeConstants.HB_AMIXDOWN_NONE:
     113                                        return Mixdown.None;
    110114                                case NativeConstants.HB_AMIXDOWN_MONO:
    111115                                        return Mixdown.Mono;
     
    126130                /// Gets the native code for the given encoder.
    127131                /// </summary>
    128                 /// <param name="encoder">The audio encoder to convert. Cannot be AudioEncoder.Passthrough.</param>
     132                /// <param name="encoder">The audio encoder to convert.</param>
    129133                /// <returns>The native code for the encoder.</returns>
    130134                public static uint AudioEncoderToNative(AudioEncoder encoder)
     
    132136                        switch (encoder)
    133137                        {
     138                                case AudioEncoder.Passthrough:
     139                                        return NativeConstants.HB_ACODEC_AUTO_PASS;
    134140                                case AudioEncoder.Ac3Passthrough:
    135141                                        return NativeConstants.HB_ACODEC_AC3_PASS;
    136                 case AudioEncoder.Ac3:
    137                     return NativeConstants.HB_ACODEC_AC3;
     142                                case AudioEncoder.Ac3:
     143                                        return NativeConstants.HB_ACODEC_AC3;
    138144                                case AudioEncoder.Faac:
    139145                                        return NativeConstants.HB_ACODEC_FAAC;
    140                 case AudioEncoder.ffaac:
    141                                 return NativeConstants.HB_ACODEC_FFAAC;
    142                 case AudioEncoder.AacPassthru:
    143                                 return NativeConstants.HB_ACODEC_AAC_PASS;
     146                                case AudioEncoder.ffaac:
     147                                        return NativeConstants.HB_ACODEC_FFAAC;
     148                                case AudioEncoder.AacPassthru:
     149                                        return NativeConstants.HB_ACODEC_AAC_PASS;
    144150                                case AudioEncoder.Lame:
    145151                                        return NativeConstants.HB_ACODEC_LAME;
    146                 case AudioEncoder.Mp3Passthru:
    147                     return NativeConstants.HB_ACODEC_MP3_PASS;
    148                 case AudioEncoder.DtsPassthrough:
    149                                 return NativeConstants.HB_ACODEC_DCA_PASS;
    150                 case AudioEncoder.DtsHDPassthrough:
    151                                 return NativeConstants.HB_ACODEC_DCA_HD_PASS;
     152                                case AudioEncoder.Mp3Passthru:
     153                                        return NativeConstants.HB_ACODEC_MP3_PASS;
     154                                case AudioEncoder.DtsPassthrough:
     155                                        return NativeConstants.HB_ACODEC_DCA_PASS;
     156                                case AudioEncoder.DtsHDPassthrough:
     157                                        return NativeConstants.HB_ACODEC_DCA_HD_PASS;
    152158                                case AudioEncoder.Vorbis:
    153159                                        return NativeConstants.HB_ACODEC_VORBIS;
     
    157163                }
    158164
    159             /// <summary>
    160             /// Convert Native HB Internal Audio int to a AudioCodec model.
    161             /// </summary>
    162             /// <param name="codec">
    163             /// The codec.
    164             /// </param>
    165             /// <returns>
    166             /// An AudioCodec object.
    167             /// </returns>
    168             public static AudioCodec NativeToAudioCodec(uint codec)
     165                /// <summary>
     166                /// Convert Native HB Internal Audio int to a AudioCodec model.
     167                /// </summary>
     168                /// <param name="codec">
     169                /// The codec.
     170                /// </param>
     171                /// <returns>
     172                /// An AudioCodec object.
     173                /// </returns>
     174                public static AudioCodec NativeToAudioCodec(uint codec)
    169175                {
    170176                        switch (codec)
  • HandBrake.Interop/HandBrakeInterop/HandBrakeInstance.cs

    r39b4d96 r1434fee  
    2222        using HandBrake.Interop.SourceData;
    2323
    24     /// <summary>
     24        /// <summary>
    2525        /// A wrapper for a HandBrake instance.
    2626        /// </summary>
     
    432432                        IntPtr originalX264Options = Marshal.StringToHGlobalAnsi(x264Options);
    433433                        this.encodeAllocatedMemory.Add(originalX264Options);
     434
     435                        if (!string.IsNullOrEmpty(job.EncodingProfile.X264Profile))
     436                        {
     437                                nativeJob.x264_profile = Marshal.StringToHGlobalAnsi(job.EncodingProfile.X264Profile);
     438                                this.encodeAllocatedMemory.Add(nativeJob.x264_profile);
     439                        }
     440
     441                        if (!string.IsNullOrEmpty(job.EncodingProfile.X264Preset))
     442                        {
     443                                nativeJob.x264_preset = Marshal.StringToHGlobalAnsi(job.EncodingProfile.X264Preset);
     444                                this.encodeAllocatedMemory.Add(nativeJob.x264_preset);
     445                        }
     446
     447                        if (!string.IsNullOrEmpty(job.EncodingProfile.X264Tune))
     448                        {
     449                                nativeJob.x264_tune = Marshal.StringToHGlobalAnsi(job.EncodingProfile.X264Tune);
     450                                this.encodeAllocatedMemory.Add(nativeJob.x264_tune);
     451                        }
    434452
    435453                        if (this.subtitleScan)
     
    10801098
    10811099                        List<Tuple<AudioEncoding, int>> outputTrackList = this.GetOutputTracks(job, title);
     1100                        nativeJob.acodec_fallback = (int)Converters.AudioEncoderToNative(profile.AudioEncoderFallback);
     1101                        nativeJob.acodec_copy_mask = (int)NativeConstants.HB_ACODEC_ANY;
    10821102
    10831103                        foreach (Tuple<AudioEncoding, int> outputTrack in outputTrackList)
     
    12381258                                        foreach (int chosenTrack in job.ChosenAudioTracks)
    12391259                                        {
    1240                                                 list.Add(new Tuple<AudioEncoding, int>(encoding, chosenTrack));
     1260                                                // In normal cases we'll never have a chosen audio track that doesn't exist but when batch encoding
     1261                                                // we just choose the first audio track without checking if it exists.
     1262                                                if (chosenTrack <= title.AudioTracks.Count)
     1263                                                {
     1264                                                        list.Add(new Tuple<AudioEncoding, int>(encoding, chosenTrack));
     1265                                                }
    12411266                                        }
    12421267                                }
     
    13171342
    13181343                        nativeAudio.config.output.track = outputTrack;
    1319 
    1320                         if (encoding.Encoder == AudioEncoder.Passthrough)
    1321                         {
    1322                                 // If we've been given a general "Passthrough" codec, see if it's valid for this input track.
    1323                                 uint audioCodec = baseStruct.config.input.codec & NativeConstants.HB_ACODEC_PASS_MASK;
    1324                                 if (audioCodec > 0)
    1325                                 {
    1326                                         // We can do passthrough for this input.
    1327                                         //nativeAudio.config.output.codec = NativeConstants.HB_ACODEC_PASS_MASK | NativeConstants.HB_ACODEC_PASS_FLAG;
    1328                                         nativeAudio.config.output.codec = audioCodec | NativeConstants.HB_ACODEC_PASS_FLAG;
    1329                                 }
    1330                                 else
    1331                                 {
    1332                                         // We can't do passthrough for this input. Set it to a DTS passthrough, which will cause the track to be dropped.
    1333                                         nativeAudio.config.output.codec = NativeConstants.HB_ACODEC_DCA_PASS;
    1334                                 }
    1335                         }
    1336                         else
    1337                         {
    1338                                 nativeAudio.config.output.codec = Converters.AudioEncoderToNative(encoding.Encoder);
    1339                         }
     1344                        nativeAudio.config.output.codec = Converters.AudioEncoderToNative(encoding.Encoder);
    13401345
    13411346                        if (!Utilities.IsPassthrough(encoding.Encoder))
  • HandBrake.Interop/HandBrakeInterop/HandBrakeUtils.cs

    r39b4d96 r1434fee  
    1818        using HandBrake.Interop.SourceData;
    1919
    20     /// <summary>
    21     /// HandBrake Interop Utilities
    22     /// </summary>
    23     public static class HandBrakeUtils
     20        /// <summary>
     21        /// HandBrake Interop Utilities
     22        /// </summary>
     23        public static class HandBrakeUtils
    2424        {
    2525                /// <summary>
     
    4848                public static event EventHandler<MessageLoggedEventArgs> ErrorLogged;
    4949
    50             /// <summary>
    51             /// Register the logger.
    52             /// </summary>
    53             public static void RegisterLogger()
     50                /// <summary>
     51                /// Register the logger.
     52                /// </summary>
     53                public static void RegisterLogger()
    5454                {
    5555                        // Register the logger if we have not already
     
    212212                        {
    213213                                case AudioEncoder.Faac:
    214                 case AudioEncoder.ffaac:
    215                 case AudioEncoder.AacPassthru:
     214                                case AudioEncoder.ffaac:
     215                                case AudioEncoder.AacPassthru:
    216216                                case AudioEncoder.Vorbis:
    217217                                        return 1024;
    218218                                case AudioEncoder.Lame:
    219                 case AudioEncoder.Mp3Passthru:
     219                                case AudioEncoder.Mp3Passthru:
    220220                                        return 1152;
    221221                                case AudioEncoder.Ac3:
    222222                                case AudioEncoder.Passthrough:
    223223                                case AudioEncoder.Ac3Passthrough:
    224                 case AudioEncoder.DtsPassthrough:
    225                 case AudioEncoder.DtsHDPassthrough:
     224                                case AudioEncoder.DtsPassthrough:
     225                                case AudioEncoder.DtsHDPassthrough:
    226226                                        return 1536;
    227227                        }
  • HandBrake.Interop/HandBrakeInterop/HbLib/Misc.cs

    r8de65ea r1434fee  
    101101        }
    102102
    103         public enum hb_title_type_anon
    104         {
    105                 HB_DVD_TYPE,
    106 
    107                 HB_BD_TYPE,
    108 
    109                 HB_STREAM_TYPE,
    110 
    111                 HB_FF_STREAM_TYPE,
    112         }
    113 
    114         public enum Anonymous_618ebeca_0ad9_4a71_9a49_18e50ac2e9db
    115         {
    116                 /// HB_MPEG2_PS_DEMUXER -> 0
    117                 HB_MPEG2_PS_DEMUXER = 0,
    118 
    119                 HB_MPEG2_TS_DEMUXER,
    120 
    121                 HB_NULL_DEMUXER,
    122         }
    123 
    124103        [StructLayout(LayoutKind.Sequential)]
    125104        public struct hb_state_scanning_anon
  • HandBrake.Interop/HandBrakeInterop/HbLib/NativeConstants.cs

    r9b6a24a5 r1434fee  
    2929                public const uint HB_ACODEC_PASS_FLAG = 0x40000000;
    3030                public const uint HB_ACODEC_PASS_MASK = (HB_ACODEC_MP3 | HB_ACODEC_FFAAC | HB_ACODEC_DCA_HD | HB_ACODEC_AC3 | HB_ACODEC_DCA);
     31                public const uint HB_ACODEC_AUTO_PASS = (HB_ACODEC_PASS_MASK | HB_ACODEC_PASS_FLAG);
    3132                public const uint HB_ACODEC_MP3_PASS = (HB_ACODEC_MP3 | HB_ACODEC_PASS_FLAG);
    3233                public const uint HB_ACODEC_AAC_PASS = (HB_ACODEC_FFAAC | HB_ACODEC_PASS_FLAG);
     
    4445                public const int HB_AMIXDOWN_A52_FORMAT_MASK = 0x00000FF0;
    4546                public const int HB_AMIXDOWN_DISCRETE_CHANNEL_COUNT_MASK = 0x0000000F;
     47                public const int HB_AMIXDOWN_NONE = 0x00000000;
    4648                public const int HB_AMIXDOWN_MONO = 0x01000001;
    4749                public const int HB_AMIXDOWN_STEREO = 0x02002022;
  • HandBrake.Interop/HandBrakeInterop/HbLib/hb_job_s.cs

    r9b6a24a5 r1434fee  
    1111namespace HandBrake.Interop.HbLib
    1212{
    13     using System;
    14     using System.Runtime.InteropServices;
     13        using System;
     14        using System.Runtime.InteropServices;
    1515
    16     [StructLayout(LayoutKind.Sequential)]
     16        [StructLayout(LayoutKind.Sequential)]
    1717        public struct hb_job_s
    1818        {
     
    9393                public IntPtr advanced_opts;
    9494
     95                public IntPtr x264_profile;
     96
     97                public IntPtr x264_preset;
     98
     99                public IntPtr x264_tune;
     100
    95101                /// int
    96102                public int areBframes;
    97103
    98         public int color_matrix_code;
     104                public int color_matrix_code;
    99105
    100         public int color_prim;
     106                public int color_prim;
    101107
    102         public int color_transfer;
     108                public int color_transfer;
    103109
    104110                /// int
     
    107113                /// hb_list_t*
    108114                public IntPtr list_audio;
     115
     116                public int acodec_copy_mask;
     117                public int acodec_fallback;
    109118
    110119                /// hb_list_t*
  • HandBrake.Interop/HandBrakeInterop/HbLib/hb_title_s.cs

    r9b6a24a5 r1434fee  
    3232                /// int
    3333                public int index;
     34
     35                public int playlist;
    3436
    3537                /// int
     
    99101                public int[] crop;
    100102
    101                 //public fixed int crop[4];
    102 
    103                 /// Anonymous_618ebeca_0ad9_4a71_9a49_18e50ac2e9db
    104                 public Anonymous_618ebeca_0ad9_4a71_9a49_18e50ac2e9db demuxer;
     103                public hb_title_demuxer_anon demuxer;
    105104
    106105                /// int
     
    155154                public uint flags;
    156155        }
     156
     157        public enum hb_title_type_anon
     158        {
     159                HB_DVD_TYPE,
     160
     161                HB_BD_TYPE,
     162
     163                HB_STREAM_TYPE,
     164
     165                HB_FF_STREAM_TYPE,
     166        }
     167
     168        public enum hb_title_demuxer_anon
     169        {
     170                HB_DVD_DEMUXER = 0,
     171
     172                HB_MPEG_DEMUXER,
     173
     174                HB_NULL_DEMUXER,
     175        }
    157176}
  • HandBrake.Interop/HandBrakeInterop/Model/Encoding/AudioEncoder.cs

    r8dfcbeb r1434fee  
    1717                Faac = 0,
    1818
    19         [Display(Name = "AAC (ffmpeg)")]
    20         ffaac,
     19                [Display(Name = "AAC (ffmpeg)")]
     20                ffaac,
    2121
    2222                [Display(Name = "MP3 (lame)")]
     
    3232                Ac3Passthrough,
    3333
    34         [Display(Name = "DTS Passthru")]
    35         DtsPassthrough,
     34                [Display(Name = "DTS Passthru")]
     35                DtsPassthrough,
    3636
    37         [Display(Name = "DTS-HD Passthru")]
    38         DtsHDPassthrough,
     37                [Display(Name = "DTS-HD Passthru")]
     38                DtsHDPassthrough,
    3939
    40         [Display(Name = "AAC Passthru")]
    41         AacPassthru,
     40                [Display(Name = "AAC Passthru")]
     41                AacPassthru,
    4242
    43         [Display(Name = "MP3 Passthru")]
    44         Mp3Passthru,
     43                [Display(Name = "MP3 Passthru")]
     44                Mp3Passthru,
    4545
    4646                [Display(Name = "Vorbis (vorbis)")]
  • HandBrake.Interop/HandBrakeInterop/Model/Encoding/AudioEncoding.cs

    r0da482e9 r1434fee  
    1818        {
    1919                /// <summary>
    20                 /// Gets or sets InputNumber.
     20                /// Gets or sets the chosen track to apply the encoding to.
    2121                /// </summary>
     22                /// <remarks>1-based index. 0 means apply to all tracks.</remarks>
    2223                public int InputNumber { get; set; }
    2324
    2425                /// <summary>
    25                 /// Gets or sets Encoder.
     26                /// Gets or sets the encoder to use.
    2627                /// </summary>
    2728                public AudioEncoder Encoder { get; set; }
     
    3334
    3435                /// <summary>
    35                 /// Gets or sets Mixdown.
     36                /// Gets or sets the mixdown.
    3637                /// </summary>
    3738                public Mixdown Mixdown { get; set; }
  • HandBrake.Interop/HandBrakeInterop/Model/Encoding/EncodingProfile.cs

    r35bb58b r1434fee  
    1010namespace HandBrake.Interop.Model.Encoding
    1111{
    12     using System.Collections.Generic;
     12        using System.Collections.Generic;
    1313
    14     using HandBrake.Interop.Model;
     14        using HandBrake.Interop.Model;
    1515
    16     public class EncodingProfile
     16        public class EncodingProfile
    1717        {
    1818                public EncodingProfile()
     
    5555                public VideoEncoder VideoEncoder { get; set; }
    5656                public string X264Options { get; set; }
     57                public string X264Profile { get; set; }
     58                public string X264Preset { get; set; }
     59                public string X264Tune { get; set; }
    5760                public VideoEncodeRateType VideoEncodeRateType { get; set; }
    5861                public double Quality { get; set; }
     
    6568
    6669                public List<AudioEncoding> AudioEncodings { get; set; }
     70                public AudioEncoder AudioEncoderFallback { get; set; }
    6771
    6872                public EncodingProfile Clone()
     
    104108                                VideoEncoder = this.VideoEncoder,
    105109                                X264Options = this.X264Options,
     110                                X264Profile = this.X264Profile,
     111                                X264Preset = this.X264Preset,
     112                                X264Tune = this.X264Tune,
    106113                                VideoEncodeRateType = this.VideoEncodeRateType,
    107114                                Quality = this.Quality,
  • HandBrake.Interop/HandBrakeInterop/Model/Encoding/Mixdown.cs

    r2c022699 r1434fee  
    1212        using System.ComponentModel.DataAnnotations;
    1313
    14     /// <summary>
    15     /// The Audio Mixdown Enumeration
    16     /// </summary>
    17     public enum Mixdown
     14        /// <summary>
     15        /// The Audio Mixdown Enumeration
     16        /// </summary>
     17        public enum Mixdown
    1818        {
    1919                [Display(Name = "Dolby Pro Logic II")]
  • HandBrake.Interop/HandBrakeInterop/Properties/AssemblyInfo.cs

    r9b6a24a5 r1434fee  
    3333// by using the '*' as shown below:
    3434// [assembly: AssemblyVersion("1.0.*")]
    35 [assembly: AssemblyVersion("1.20.0.0")]
    36 [assembly: AssemblyFileVersion("1.20.0.0")]
     35[assembly: AssemblyVersion("1.22.0.0")]
     36[assembly: AssemblyFileVersion("1.22.0.0")]
Note: See TracChangeset for help on using the changeset viewer.