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__
} param;
};
+struct hb_work_object_s
+{
+ int id;
+ char * name;
+
+ 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_lock_t * lock;
+ int used;
+ uint64_t time;
+
+ hb_work_object_t * next;
+};
+
+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
hb_work_object_t hb_encavcodec =
{
- WORK_DECSUB,
+ WORK_ENCAVCODEC,
"MPEG-4 encoder (libavcodec)",
encavcodecInit,
encavcodecWork,
hb_lock_t * pause_lock;
};
+hb_work_object_t * hb_objects = NULL;
+
static void thread_func( void * );
-hb_handle_t * hb_init( int verbose, int update_check )
+void hb_register( hb_work_object_t * w )
+{
+ w->next = hb_objects;
+ hb_objects = w;
+}
+
+hb_handle_t * hb_init_real( int verbose, int update_check )
{
hb_handle_t * h = calloc( sizeof( hb_handle_t ), 1 );
uint64_t date;
etc) */
#define HB_DEBUG_NONE 0
#define HB_DEBUG_ALL 1
-hb_handle_t * hb_init( int verbose, int update_check );
+void hb_register( hb_work_object_t * );
+hb_handle_t * hb_init_real( int verbose, int update_check );
+
+#define hb_init(v,u) \
+hb_init_real( v, u ); \
+hb_register( &hb_sync ); \
+hb_register( &hb_decmpeg2 ); \
+hb_register( &hb_decsub ); \
+hb_register( &hb_render ); \
+hb_register( &hb_encavcodec ); \
+hb_register( &hb_encxvid ); \
+hb_register( &hb_encx264 ); \
+hb_register( &hb_deca52 ); \
+hb_register( &hb_decavcodec ); \
+hb_register( &hb_declpcm ); \
+hb_register( &hb_encfaac ); \
+hb_register( &hb_enclame ); \
+hb_register( &hb_encvorbis ); \
+
+#define hb_init_express(v,u) \
+hb_init_real( v, u ); \
+hb_register( &hb_sync ); \
+hb_register( &hb_decmpeg2 ); \
+hb_register( &hb_decsub ); \
+hb_register( &hb_render ); \
+hb_register( &hb_encavcodec ); \
+hb_register( &hb_encx264 ); \
+hb_register( &hb_deca52 ); \
+hb_register( &hb_decavcodec ); \
+hb_register( &hb_declpcm ); \
+hb_register( &hb_encfaac ); \
/* hb_get_version() */
char * hb_get_version( hb_handle_t * );
/***********************************************************************
* fifo.c
**********************************************************************/
-typedef struct hb_buffer_s hb_buffer_t;
struct hb_buffer_s
{
int size;
void hb_buffer_realloc( hb_buffer_t *, int size );
void hb_buffer_close( hb_buffer_t ** );
-typedef struct hb_fifo_s hb_fifo_t;
hb_fifo_t * hb_fifo_init();
int hb_fifo_size( hb_fifo_t * );
* Work objects
**********************************************************************/
#define HB_CONFIG_MAX_SIZE 8192
-typedef union hb_esconfig_u
+union hb_esconfig_u
{
struct
{
{
uint8_t headers[3][HB_CONFIG_MAX_SIZE];
} vorbis;
-} hb_esconfig_t;
-
-typedef struct hb_work_private_s hb_work_private_t;
-typedef struct hb_work_object_s hb_work_object_t;
-struct hb_work_object_s
-{
- int id;
- char * name;
-
- 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_lock_t * lock;
- int used;
- uint64_t time;
};
enum
WORK_ENCVORBIS
};
-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;
+extern hb_work_object_t * hb_objects;
#define HB_WORK_IDLE 0
#define HB_WORK_OK 1
/************************************************************************
* Mutexes
***********************************************************************/
-typedef struct hb_lock_s hb_lock_t;
hb_lock_t * hb_lock_init();
void hb_lock_close( hb_lock_t ** );
static hb_work_object_t * getWork( int id )
{
- switch( id )
+ hb_work_object_t * w;
+ for( w = hb_objects; w; w = w->next )
{
- case WORK_SYNC: return &hb_sync;
- case WORK_DECMPEG2: return &hb_decmpeg2;
- case WORK_DECSUB: return &hb_decsub;
- case WORK_RENDER: return &hb_render;
- case WORK_ENCAVCODEC: return &hb_encavcodec;
- case WORK_ENCXVID: return &hb_encxvid;
- case WORK_ENCX264: return &hb_encx264;
- case WORK_DECA52: return &hb_deca52;
- case WORK_DECAVCODEC: return &hb_decavcodec;
- case WORK_DECLPCM: return &hb_declpcm;
- case WORK_ENCFAAC: return &hb_encfaac;
- case WORK_ENCLAME: return &hb_enclame;
- case WORK_ENCVORBIS: return &hb_encvorbis;
+ if( w->id == id )
+ {
+ return w;
+ }
}
return NULL;
}