* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111, USA.
*****************************************************************************/
-#include "muxers.h"
-
-extern cli_input_t input;
+#include "input.h"
typedef struct
{
cli_input_t input;
hnd_t p_handle;
- x264_picture_t pic;
+ cli_pic_t pic;
x264_threadpool_t *pool;
int next_frame;
int frame_total;
typedef struct thread_input_arg_t
{
thread_hnd_t *h;
- x264_picture_t *pic;
+ cli_pic_t *pic;
int i_frame;
int status;
} thread_input_arg_t;
static int open_file( char *psz_filename, hnd_t *p_handle, video_info_t *info, cli_input_opt_t *opt )
{
thread_hnd_t *h = malloc( sizeof(thread_hnd_t) );
- if( !h || input.picture_alloc( &h->pic, info->csp, info->width, info->height ) )
- {
- fprintf( stderr, "x264 [error]: malloc failed\n" );
- return -1;
- }
+ FAIL_IF_ERR( !h || input.picture_alloc( &h->pic, info->csp, info->width, info->height ),
+ "x264", "malloc failed\n" )
h->input = input;
h->p_handle = *p_handle;
h->next_frame = -1;
return -1;
h->next_args->h = h;
h->next_args->status = 0;
- h->frame_total = input.get_frame_total( h->p_handle );
+ h->frame_total = info->num_frames;
thread_input.picture_alloc = h->input.picture_alloc;
thread_input.picture_clean = h->input.picture_clean;
return 0;
}
-static int get_frame_total( hnd_t handle )
-{
- thread_hnd_t *h = handle;
- return h->frame_total;
-}
-
static void read_frame_thread_int( thread_input_arg_t *i )
{
i->status = i->h->input.read_frame( i->pic, i->h->p_handle, i->i_frame );
}
-static int read_frame( x264_picture_t *p_pic, hnd_t handle, int i_frame )
+static int read_frame( cli_pic_t *p_pic, hnd_t handle, int i_frame )
{
thread_hnd_t *h = handle;
int ret = 0;
}
if( h->next_frame == i_frame )
- XCHG( x264_picture_t, *p_pic, h->pic );
+ XCHG( cli_pic_t, *p_pic, h->pic );
else
ret |= h->input.read_frame( p_pic, h->p_handle, i_frame );
return ret;
}
-static int release_frame( x264_picture_t *pic, hnd_t handle )
+static int release_frame( cli_pic_t *pic, hnd_t handle )
{
thread_hnd_t *h = handle;
if( h->input.release_frame )
return 0;
}
-cli_input_t thread_input = { open_file, get_frame_total, NULL, read_frame, release_frame, NULL, close_file };
+cli_input_t thread_input = { open_file, NULL, read_frame, release_frame, NULL, close_file };