@ -218,6 +218,7 @@ typedef struct SchMux {
*/
atomic_int mux_started ;
ThreadQueue * queue ;
unsigned queue_size ;
AVPacket * sub_heartbeat_pkt ;
} SchMux ;
@ -360,6 +361,8 @@ static int queue_alloc(ThreadQueue **ptq, unsigned nb_streams, unsigned queue_si
ThreadQueue * tq ;
ObjPool * op ;
queue_size = queue_size > 0 ? queue_size : 8 ;
op = ( type = = QUEUE_PACKETS ) ? objpool_alloc_packets ( ) :
objpool_alloc_frames ( ) ;
if ( ! op )
@ -655,7 +658,7 @@ static const AVClass sch_mux_class = {
} ;
int sch_add_mux ( Scheduler * sch , SchThreadFunc func , int ( * init ) ( void * ) ,
void * arg , int sdp_auto )
void * arg , int sdp_auto , unsigned thread_queue_size )
{
const unsigned idx = sch - > nb_mux ;
@ -669,6 +672,7 @@ int sch_add_mux(Scheduler *sch, SchThreadFunc func, int (*init)(void *),
mux = & sch - > mux [ idx ] ;
mux - > class = & sch_mux_class ;
mux - > init = init ;
mux - > queue_size = thread_queue_size ;
task_init ( sch , & mux - > task , SCH_NODE_TYPE_MUX , idx , func , arg ) ;
@ -775,7 +779,7 @@ int sch_add_dec(Scheduler *sch, SchThreadFunc func, void *ctx,
if ( ! dec - > send_frame )
return AVERROR ( ENOMEM ) ;
ret = queue_alloc ( & dec - > queue , 1 , 1 , QUEUE_PACKETS ) ;
ret = queue_alloc ( & dec - > queue , 1 , 0 , QUEUE_PACKETS ) ;
if ( ret < 0 )
return ret ;
@ -815,7 +819,7 @@ int sch_add_enc(Scheduler *sch, SchThreadFunc func, void *ctx,
task_init ( sch , & enc - > task , SCH_NODE_TYPE_ENC , idx , func , ctx ) ;
ret = queue_alloc ( & enc - > queue , 1 , 1 , QUEUE_FRAMES ) ;
ret = queue_alloc ( & enc - > queue , 1 , 0 , QUEUE_FRAMES ) ;
if ( ret < 0 )
return ret ;
@ -863,7 +867,7 @@ int sch_add_filtergraph(Scheduler *sch, unsigned nb_inputs, unsigned nb_outputs,
if ( ret < 0 )
return ret ;
ret = queue_alloc ( & fg - > queue , fg - > nb_inputs + 1 , 1 , QUEUE_FRAMES ) ;
ret = queue_alloc ( & fg - > queue , fg - > nb_inputs + 1 , 0 , QUEUE_FRAMES ) ;
if ( ret < 0 )
return ret ;
@ -1315,7 +1319,8 @@ int sch_start(Scheduler *sch)
}
}
ret = queue_alloc ( & mux - > queue , mux - > nb_streams , 1 , QUEUE_PACKETS ) ;
ret = queue_alloc ( & mux - > queue , mux - > nb_streams , mux - > queue_size ,
QUEUE_PACKETS ) ;
if ( ret < 0 )
return ret ;