OSDN Git Service

Opens up another way to give x264 a constant QP or RF, by passing a direct value...
[handbrake-jp/handbrake-jp-git.git] / libhb / internal.h
index bc6f506..5f3baec 100644 (file)
@@ -1,13 +1,14 @@
 /* $Id: internal.h,v 1.41 2005/11/25 15:05:25 titer Exp $
 
    This file is part of the HandBrake source code.
-   Homepage: <http://handbrake.m0k.org/>.
+   Homepage: <http://handbrake.fr/>.
    It may be used under the terms of the GNU General Public License. */
 
 /***********************************************************************
  * common.c
  **********************************************************************/
 void hb_log( char * log, ... );
+void hb_error( char * fmt, ...);
 
 int  hb_list_bytes( hb_list_t * );
 void hb_list_seebytes( hb_list_t * l, uint8_t * dst, int size );
@@ -18,6 +19,8 @@ void hb_list_empty( hb_list_t ** );
 hb_title_t * hb_title_init( char * dvd, int index );
 void         hb_title_close( hb_title_t ** );
 
+void         hb_filter_close( hb_filter_object_t ** );
+
 /***********************************************************************
  * hb.c
  **********************************************************************/
@@ -34,13 +37,26 @@ struct hb_buffer_s
     uint8_t *     data;
     int           cur;
 
+    int64_t       sequence;
+
     int           id;
     int64_t       start;
     int64_t       stop;
-    int           key;
+    int           new_chap;
+
+#define HB_FRAME_IDR    0x01
+#define HB_FRAME_I      0x02
+#define HB_FRAME_AUDIO  0x04
+#define HB_FRAME_P      0x10
+#define HB_FRAME_B      0x20
+#define HB_FRAME_BREF   0x40
+#define HB_FRAME_KEY    0x0F
+#define HB_FRAME_REF    0xF0
+    uint8_t       frametype;
+    uint16_t       flags;
 
     /* Holds the output PTS from x264, for use by b-frame offsets in muxmp4.c */
-    int64_t     encodedPTS;
+    int64_t     renderOffset;
 
     int           x;
     int           y;
@@ -52,10 +68,14 @@ struct hb_buffer_s
     hb_buffer_t * next;
 };
 
+void hb_buffer_pool_init( void );
+void hb_buffer_pool_free( void );
+
 hb_buffer_t * hb_buffer_init( int size );
 void          hb_buffer_realloc( hb_buffer_t *, int size );
 void          hb_buffer_close( hb_buffer_t ** );
-
+void          hb_buffer_copy_settings( hb_buffer_t * dst,
+                                       const hb_buffer_t * src );
 
 hb_fifo_t   * hb_fifo_init();
 int           hb_fifo_size( hb_fifo_t * );
@@ -74,7 +94,7 @@ hb_thread_t * hb_update_init( int * build, char * version );
 hb_thread_t * hb_scan_init( hb_handle_t *, const char * path,
                             int title_index, hb_list_t * list_title );
 hb_thread_t * hb_work_init( hb_list_t * jobs, int cpu_count,
-                            volatile int * die, int * error );
+                            volatile int * die, int * error, hb_job_t ** job );
 hb_thread_t  * hb_reader_init( hb_job_t * );
 hb_thread_t  * hb_muxer_init( hb_job_t * );
 
@@ -90,18 +110,26 @@ int              hb_libmpeg2_decode( hb_libmpeg2_t *,
                                       hb_buffer_t * es_buf,
                                       hb_list_t * raw_list );
 void             hb_libmpeg2_info( hb_libmpeg2_t * m, int * width,
-                                    int * height, int * rate );
+                                    int * height, int * rate, int * aspect_ratio );
 void             hb_libmpeg2_close( hb_libmpeg2_t ** );
+int              hb_libmpeg2_clear_aspect_ratio( hb_libmpeg2_t * );
 
 /***********************************************************************
  * mpegdemux.c
  **********************************************************************/
-int hb_demux_ps( hb_buffer_t * ps_buf, hb_list_t * es_list );
+typedef struct {
+    int64_t last_scr;       /* unadjusted SCR from most recent pack */
+    int64_t scr_offset;     /* discontinuity correction adjustment */
+    int     scr_changes;    /* number of SCR discontinuities */
+} hb_psdemux_t;
+
+int hb_demux_ps( hb_buffer_t * ps_buf, hb_list_t * es_list, hb_psdemux_t * );
 
 /***********************************************************************
  * dvd.c
  **********************************************************************/
 typedef struct hb_dvd_s hb_dvd_t;
+typedef struct hb_stream_s hb_stream_t;
 
 hb_dvd_t *   hb_dvd_init( char * path );
 int          hb_dvd_title_count( hb_dvd_t * );
@@ -111,8 +139,15 @@ void         hb_dvd_stop( hb_dvd_t * );
 int          hb_dvd_seek( hb_dvd_t *, float );
 int          hb_dvd_read( hb_dvd_t *, hb_buffer_t * );
 int          hb_dvd_chapter( hb_dvd_t * );
+int          hb_dvd_is_break( hb_dvd_t * d );
 void         hb_dvd_close( hb_dvd_t ** );
 
+hb_stream_t * hb_stream_open( char * path, int opentype );
+void            hb_stream_close( hb_stream_t ** );
+hb_title_t * hb_stream_title_scan( hb_stream_t *);
+int          hb_stream_read( hb_stream_t *, hb_buffer_t *);
+int          hb_stream_seek( hb_stream_t *, float );
+
 /***********************************************************************
  * Work objects
  **********************************************************************/
@@ -136,6 +171,11 @@ union hb_esconfig_u
 
     struct
     {
+        uint8_t headers[3][HB_CONFIG_MAX_SIZE];
+    } theora;
+
+    struct
+    {
         uint8_t bytes[HB_CONFIG_MAX_SIZE];
         int     length;
     } aac;
@@ -145,13 +185,19 @@ union hb_esconfig_u
         uint8_t headers[3][HB_CONFIG_MAX_SIZE];
         char *language;
     } vorbis;
-    
+
     struct
     {
        /* ac3flags stores the flags from the AC3 source, as found in scan.c */
        int  ac3flags;
     } a52;
 
+    struct
+    {
+       /* dcaflags stores the flags from the DCA source, as found in scan.c */
+       int  dcaflags;
+    } dca;
+
 };
 
 enum
@@ -163,7 +209,9 @@ enum
     WORK_ENCAVCODEC,
     WORK_ENCXVID,
     WORK_ENCX264,
+    WORK_ENCTHEORA,
     WORK_DECA52,
+    WORK_DECDCA,
     WORK_DECAVCODEC,
     WORK_DECLPCM,
     WORK_ENCFAAC,
@@ -171,6 +219,14 @@ enum
     WORK_ENCVORBIS
 };
 
+enum
+{
+    FILTER_DEINTERLACE = 1,
+    FILTER_DEBLOCK,
+    FILTER_DENOISE,
+    FILTER_DETELECINE
+};
+
 extern hb_work_object_t * hb_objects;
 
 #define HB_WORK_IDLE     0
@@ -196,4 +252,5 @@ typedef struct hb_mux_data_s   hb_mux_data_t;
 DECLARE_MUX( mp4 );
 DECLARE_MUX( avi );
 DECLARE_MUX( ogm );
+DECLARE_MUX( mkv );