OSDN Git Service

MacGui: Thinine's custom file size and x264 fix.
[handbrake-jp/handbrake-jp-git.git] / libhb / common.h
index 7bc4894..d43e516 100644 (file)
@@ -7,6 +7,7 @@
 #ifndef HB_COMMON_H
 #define HB_COMMON_H
 
+#include <math.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdarg.h>
@@ -36,6 +37,12 @@ typedef struct hb_chapter_s hb_chapter_t;
 typedef struct hb_audio_s hb_audio_t;
 typedef struct hb_subtitle_s hb_subtitle_t;
 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_buffer_s hb_buffer_t;
+typedef struct hb_fifo_s hb_fifo_t;
+typedef struct hb_lock_s hb_lock_t;
 
 #include "ports.h"
 #ifdef __LIBHB__
@@ -49,6 +56,8 @@ void        hb_list_rem( hb_list_t *, void * );
 void      * hb_list_item( hb_list_t *, int );
 void        hb_list_close( hb_list_t ** );
 
+void hb_reduce( int *x, int *y, int num, int den );
+
 #define HB_KEEP_WIDTH  0
 #define HB_KEEP_HEIGHT 1
 void hb_fix_aspect( hb_job_t * job, int keep );
@@ -86,17 +95,29 @@ struct hb_job_s
     int             chapter_end;
 
     /* Picture settings:
-         crop:        must be multiples of 2 (top/bottom/left/right)
-         deinterlace: 0 or 1
-         width:       must be a multiple of 16
-         height:      must be a multiple of 16
-         keep_ratio:  used by UIs */
+         crop:                must be multiples of 2 (top/bottom/left/right)
+         deinterlace:         0 or 1
+         width:               must be a multiple of 16
+         height:              must be a multiple of 16
+         keep_ratio:          used by UIs 
+         pixel_ratio:         store pixel aspect ratio in the video
+         pixel_aspect_width:  numerator for pixel aspect ratio
+         pixel_aspect_height: denominator for pixel aspect ratio
+                maxWidth:                        keep width below this
+                maxHeight:                       keep height below this */
+
     int             crop[4];
     int             deinterlace;
     int             width;
     int             height;
     int             keep_ratio;
     int             grayscale;
+    int             pixel_ratio;
+    int             pixel_aspect_width;
+    int             pixel_aspect_height;
+       int                             maxWidth;
+       int                             maxHeight;
+
 
     /* Video settings:
          vcodec:            output codec
@@ -104,11 +125,16 @@ struct hb_job_s
                             if < 0.0 or > 1.0, bitrate is used instead
          vbitrate:          output bitrate (kbps)
          pass:              0, 1 or 2
-         vrate, vrate_base: output framerate is vrate / vrate_base */
+         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 */
 #define HB_VCODEC_MASK   0x0000FF
 #define HB_VCODEC_FFMPEG 0x000001
 #define HB_VCODEC_XVID   0x000002
 #define HB_VCODEC_X264   0x000004
+
     int             vcodec;
     float           vquality;
     int             vbitrate;
@@ -116,11 +142,27 @@ struct hb_job_s
     int             vrate_base;
     int             pass;
     int             h264_13;
-
+       int                             h264_level;
+       int                             crf;
+       const char              *x264opts;
+       int                             areBframes;
+       
     /* Audio tracks:
-         Indexes in hb_title_t's audios list, starting from 0.
-         -1 indicates the end of the list */
+         audios:         Indexes in hb_title_t's audios list, starting from 0.
+                         -1 indicates the end of the list
+                channels:       The # of normal channels in the last used audio
+                lfechannels:    The # of lfe channels in the last used audio
+                channelsused:   The # of channels we will actually use for this job -
+                                calculated based on surround, channels and lfechannels
+                                                in work.c
+         ac3flags:       stores the flags from the AC3 source, as found in scan.c
+            surround:       1 if 5.1 should be preserved for AAC, 0 otherwise */
     int             audios[8];
+    int             channels;
+    int             lfechannels;
+    int             channelsused;
+       int             ac3flags;
+       int             surround;
 
     /* Audio settings:
          acodec:   output codec
@@ -149,10 +191,13 @@ struct hb_job_s
          file: file path */
 #define HB_MUX_MASK 0xFF0000
 #define HB_MUX_MP4  0x010000
-#define HB_MUX_AVI  0x020000
-#define HB_MUX_OGM  0x040000
+#define HB_MUX_PSP  0x020000
+#define HB_MUX_AVI  0x040000
+#define HB_MUX_OGM  0x080000
+#define HB_MUX_IPOD 0x100000
+       
     int             mux;
-    char          * file;
+    const char          * file;
 
 #ifdef __LIBHB__
     /* Internal data */
@@ -182,10 +227,16 @@ struct hb_audio_s
 {
     int  id;
     char lang[1024];
+    char lang_simple[1024];
     int  codec;
     int  rate;
     int  bitrate;
+       /* indicates the number of normal channels the source audio has */
     int  channels;
+       /* indicates the number of lfe channels the source audio has */
+       int  lfechannels;
+       /* stores the flags from the AC3 source, as found in scan.c */
+       int  ac3flags;
 
 #ifdef __LIBHB__
     /* Internal data */
@@ -232,6 +283,7 @@ struct hb_subtitle_s
 struct hb_title_s
 {
     char        dvd[1024];
+    char        name[1024];
     int         index;
     int         vts;
     int         ttn;
@@ -275,6 +327,7 @@ struct hb_state_s
 #define HB_STATE_WORKING  8
 #define HB_STATE_PAUSED   16
 #define HB_STATE_WORKDONE 32
+#define HB_STATE_MUXING   64
     int state;
 
     union
@@ -308,7 +361,51 @@ struct hb_state_s
             int error;
         } workdone;
 
+        struct
+        {
+            /* HB_STATE_MUXING */
+            float progress;
+        } muxing;
     } param;
 };
 
+struct hb_work_object_s
+{
+    int                 id;
+    char              * name;
+
+#ifdef __LIBHB__
+    int              (* init)  ( hb_work_object_t *, hb_job_t * );
+    int              (* work)  ( hb_work_object_t *, hb_buffer_t **,
+                                 hb_buffer_t ** );
+    void             (* close) ( hb_work_object_t * );
+
+    hb_fifo_t         * fifo_in;
+    hb_fifo_t         * fifo_out;
+    hb_esconfig_t     * config;
+
+    hb_work_private_t * private_data;
+
+    hb_thread_t       * thread;
+    volatile int      * done;
+
+    hb_work_object_t  * next;
+       int                               thread_sleep_interval;
+#endif
+};
+
+extern hb_work_object_t hb_sync;
+extern hb_work_object_t hb_decmpeg2;
+extern hb_work_object_t hb_decsub;
+extern hb_work_object_t hb_render;
+extern hb_work_object_t hb_encavcodec;
+extern hb_work_object_t hb_encxvid;
+extern hb_work_object_t hb_encx264;
+extern hb_work_object_t hb_deca52;
+extern hb_work_object_t hb_decavcodec;
+extern hb_work_object_t hb_declpcm;
+extern hb_work_object_t hb_encfaac;
+extern hb_work_object_t hb_enclame;
+extern hb_work_object_t hb_encvorbis;
+
 #endif