OSDN Git Service

Ooops -- when copying and pasting code snippets, it helps to have the right types.
[handbrake-jp/handbrake-jp-git.git] / libhb / common.h
index 151b25b..be174d1 100644 (file)
@@ -27,6 +27,9 @@
 
 #define EVEN( a )        ( (a) + ( (a) & 1 ) )
 #define MULTIPLE_16( a ) ( 16 * ( ( (a) + 8 ) / 16 ) )
+#define MULTIPLE_MOD( a, b ) ( b * ( ( (a) + (b / 2) ) / b ) )
+
+#define HB_DVD_READ_BUFFER_SIZE 2048
 
 typedef struct hb_handle_s hb_handle_t;
 typedef struct hb_list_s hb_list_t;
@@ -41,6 +44,8 @@ typedef struct hb_state_s hb_state_t;
 typedef union  hb_esconfig_u     hb_esconfig_t;
 typedef struct hb_work_private_s hb_work_private_t;
 typedef struct hb_work_object_s  hb_work_object_t;
+typedef struct hb_filter_private_s hb_filter_private_t;
+typedef struct hb_filter_object_s  hb_filter_object_t;
 typedef struct hb_buffer_s hb_buffer_t;
 typedef struct hb_fifo_s hb_fifo_t;
 typedef struct hb_lock_s hb_lock_t;
@@ -100,6 +105,9 @@ const char * hb_mixdown_get_short_name_from_mixdown( int amixdown );
  *****************************************************************************/
 struct hb_job_s
 {
+    /* ID assigned by UI so it can groups job passes together */
+    int             sequence_id;
+       
     /* Pointer to the title to be ripped */
     hb_title_t    * title;
     
@@ -124,6 +132,7 @@ struct hb_job_s
 
     int             crop[4];
     int             deinterlace;
+    hb_list_t     * filters;
     int             width;
     int             height;
     int             keep_ratio;
@@ -131,6 +140,7 @@ struct hb_job_s
     int             pixel_ratio;
     int             pixel_aspect_width;
     int             pixel_aspect_height;
+    int             modulus;
        int                             maxWidth;
        int                             maxHeight;
 
@@ -140,12 +150,12 @@ struct hb_job_s
          vquality:          output quality (0.0..1.0)
                             if < 0.0 or > 1.0, bitrate is used instead
          vbitrate:          output bitrate (kbps)
-         pass:              0, 1 or 2
+         pass:              0, 1 or 2 (or -1 for scan)
          vrate, vrate_base: output framerate is vrate / vrate_base
-                h264_level:            boolean for whether or not we're encoding for iPod
-                crf:                           boolean for whether to use constant rate factor with x264
-                x264opts:                      string of extra x264 options 
-                areBframes:            boolean to note if b-frames are included in x264opts */
+         h264_level:        boolean for whether or not we're encoding for iPod
+         crf:               boolean for whether to use constant rate factor with x264
+         x264opts:          string of extra x264 options 
+         areBframes:        boolean to note if b-frames are included in x264opts */
 #define HB_VCODEC_MASK   0x0000FF
 #define HB_VCODEC_FFMPEG 0x000001
 #define HB_VCODEC_XVID   0x000002
@@ -158,15 +168,16 @@ struct hb_job_s
     int             vrate_base;
     int             pass;
     int             h264_13;
-       int                             h264_level;
-       int                             crf;
-       char                *x264opts;
-       int                             areBframes;
-       
+    int             h264_level;
+    int             crf;
+    char            *x264opts;
+    int             areBframes;
+    int             vfr;
+
     /* Audio tracks:
          audios:          Indexes in hb_title_t's audios list, starting from 0.
                           -1 indicates the end of the list
-            audio_mixdowns:  The mixdown to be used for each audio track in audios[] */
+        audio_mixdowns:  The mixdown to be used for each audio track in audios[] */
 
 /* define some masks, used to extract the various information from the HB_AMIXDOWN_XXXX values */
 #define HB_AMIXDOWN_DCA_FORMAT_MASK             0x00FFF000
@@ -225,6 +236,7 @@ struct hb_job_s
     int             acodec;
     int             abitrate;
     int             arate;
+    float           dynamic_range_compression;
 
     /* Subtitle settings:
          subtitle: index in hb_title_t's subtitles list, starting
@@ -241,10 +253,21 @@ struct hb_job_s
 #define HB_MUX_AVI  0x040000
 #define HB_MUX_OGM  0x080000
 #define HB_MUX_IPOD 0x100000
+#define HB_MUX_MKV  0x200000
        
     int             mux;
     const char          * file;
 
+    /* Allow MP4 files > 4 gigs */
+    int             largeFileSize;
+    int             mp4_optimize;
+    int             ipod_atom;
+
+    int indepth_scan;
+    hb_subtitle_t ** select_subtitle;
+    int subtitle_force;
+    char * native_language;
+
 #ifdef __LIBHB__
     /* Internal data */
     hb_handle_t   * h;
@@ -278,16 +301,6 @@ struct hb_audio_s
     int  codec;
     int  rate;
     int  bitrate;
-       /* src_discrete_front_channels: The # of discrete front channels in the source audio
-          src_discrete_rear_channels:  The # of discrete rear channels in the source audio
-          src_discrete_lfe_channels:   The # of discrete lfe channels in the source audio
-          src_encoded_front_channels:  The # of front channels encoded into the source audio
-          src_encoded_rear_channels:   The # of rear channels encoded into the source audio */
-    int src_discrete_front_channels;
-    int src_discrete_rear_channels;
-       int src_discrete_lfe_channels;
-    int src_encoded_front_channels;
-    int src_encoded_rear_channels;
     
     /* ac3flags is only set when the source audio format is HB_ACODEC_AC3 */
     int ac3flags;
@@ -296,11 +309,12 @@ struct hb_audio_s
     int dcaflags;
 
 /* define some masks, used to extract the various information from the HB_AMIXDOWN_XXXX values */
-#define HB_INPUT_CH_LAYOUT_DISCRETE_FRONT_MASK 0xF0000
-#define HB_INPUT_CH_LAYOUT_DISCRETE_REAR_MASK  0x0F000
-#define HB_INPUT_CH_LAYOUT_DISCRETE_LFE_MASK   0x00F00
-#define HB_INPUT_CH_LAYOUT_ENCODED_FRONT_MASK  0x000F0
-#define HB_INPUT_CH_LAYOUT_ENCODED_REAR_MASK   0x0000F
+#define HB_INPUT_CH_LAYOUT_DISCRETE_FRONT_MASK  0x00F0000
+#define HB_INPUT_CH_LAYOUT_DISCRETE_REAR_MASK   0x000F000
+#define HB_INPUT_CH_LAYOUT_DISCRETE_LFE_MASK    0x0000F00
+#define HB_INPUT_CH_LAYOUT_DISCRETE_NO_LFE_MASK 0xFFFF0FF
+#define HB_INPUT_CH_LAYOUT_ENCODED_FRONT_MASK   0x00000F0
+#define HB_INPUT_CH_LAYOUT_ENCODED_REAR_MASK    0x000000F
 
 /* define the input channel layouts used to describe the channel layout of this audio */
 #define HB_INPUT_CH_LAYOUT_MONO    0x0110010
@@ -311,13 +325,14 @@ struct hb_audio_s
 #define HB_INPUT_CH_LAYOUT_3F1R    0x0631031
 #define HB_INPUT_CH_LAYOUT_2F2R    0x0722022
 #define HB_INPUT_CH_LAYOUT_3F2R    0x0832032
-#define HB_INPUT_CH_LAYOUT_3F2RLFE 0x0A32132
 #define HB_INPUT_CH_LAYOUT_4F2R    0x0942042
+#define HB_INPUT_CH_LAYOUT_HAS_LFE 0x0000100
 
 /* define some macros to extract the various information from the HB_AMIXDOWN_XXXX values */
 #define HB_INPUT_CH_LAYOUT_GET_DISCRETE_FRONT_COUNT( a ) ( ( a & HB_INPUT_CH_LAYOUT_DISCRETE_FRONT_MASK ) >> 16 )
 #define HB_INPUT_CH_LAYOUT_GET_DISCRETE_REAR_COUNT( a )  ( ( a & HB_INPUT_CH_LAYOUT_DISCRETE_REAR_MASK ) >> 12 )
 #define HB_INPUT_CH_LAYOUT_GET_DISCRETE_LFE_COUNT( a )   ( ( a & HB_INPUT_CH_LAYOUT_DISCRETE_LFE_MASK ) >> 8 )
+#define HB_INPUT_CH_LAYOUT_GET_DISCRETE_COUNT( a ) ( ( ( a & HB_INPUT_CH_LAYOUT_DISCRETE_FRONT_MASK ) >> 16 ) + ( ( a & HB_INPUT_CH_LAYOUT_DISCRETE_REAR_MASK ) >> 12 ) + ( ( a & HB_INPUT_CH_LAYOUT_DISCRETE_LFE_MASK ) >> 8 ) )
 #define HB_INPUT_CH_LAYOUT_GET_ENCODED_FRONT_COUNT( a )   ( ( a & HB_INPUT_CH_LAYOUT_ENCODED_FRONT_MASK ) >> 4 )
 #define HB_INPUT_CH_LAYOUT_GET_ENCODED_REAR_COUNT( a )   ( ( a & HB_INPUT_CH_LAYOUT_ENCODED_REAR_MASK ) )
 
@@ -338,6 +353,8 @@ struct hb_audio_s
        /* amixdown is the mixdown format to be used for this audio track */
        int amixdown;
 
+       /* Source PID is only valid for MPEG Transport Streams */
+       int source_pid;
 #endif
 };
 
@@ -368,6 +385,9 @@ struct hb_subtitle_s
     char lang[1024];
     char iso639_2[4];
 
+    int hits;     /* How many hits/occurrences of this subtitle */
+    int forced_hits; /* How many forced hits in this subtitle */
+
 #ifdef __LIBHB__
     /* Internal data */
     hb_fifo_t * fifo_in;  /* SPU ES */
@@ -481,6 +501,8 @@ struct hb_work_object_s
 
        /* amixdown is the mixdown format to be used if the work object is an audio track */
        int               amixdown;
+    /* source_acodec is the source audio codec if the work object is an audio track */
+    int               source_acodec;
 
     hb_work_private_t * private_data;
 
@@ -507,4 +529,37 @@ extern hb_work_object_t hb_encfaac;
 extern hb_work_object_t hb_enclame;
 extern hb_work_object_t hb_encvorbis;
 
+#define FILTER_OK      0
+#define FILTER_DELAY   1
+#define FILTER_FAILED  2
+#define FILTER_DROP    3
+
+struct hb_filter_object_s
+{
+    int                     id;
+    char                  * name;
+    char                  * settings;
+
+#ifdef __LIBHB__
+    hb_filter_private_t* (* init)  ( int, int, int, char * );
+    
+    int                  (* work)  ( const hb_buffer_t *, hb_buffer_t **,
+                                     int, int, int, hb_filter_private_t * );
+    
+    void                 (* close) ( hb_filter_private_t * );
+    
+    hb_filter_private_t   * private_data;
+    //hb_buffer_t           * buffer;
+#endif
+};
+
+extern hb_filter_object_t hb_filter_detelecine;
+extern hb_filter_object_t hb_filter_deinterlace;
+extern hb_filter_object_t hb_filter_deblock;
+extern hb_filter_object_t hb_filter_denoise;
+
+typedef void hb_error_handler_t( const char *errmsg );
+
+extern void hb_register_error_handler( hb_error_handler_t * handler );
+
 #endif