Commit 4e797456 authored by Laurent Aimar's avatar Laurent Aimar

Added decoder_New/Delete/Link/UnlinkPicture helpers.

parent f0e63c5d
...@@ -81,29 +81,28 @@ struct decoder_t ...@@ -81,29 +81,28 @@ struct decoder_t
* globaly, not necessary for the current packet */ * globaly, not necessary for the current packet */
block_t * ( * pf_get_cc ) ( decoder_t *, bool pb_present[4] ); block_t * ( * pf_get_cc ) ( decoder_t *, bool pb_present[4] );
/*
* Buffers allocation
*/
/* Video output callbacks */
picture_t * ( * pf_vout_buffer_new) ( decoder_t * );
void ( * pf_vout_buffer_del) ( decoder_t *, picture_t * );
void ( * pf_picture_link) ( decoder_t *, picture_t * );
void ( * pf_picture_unlink) ( decoder_t *, picture_t * );
/* /*
* Owner fields * Owner fields
* XXX You MUST not use them directly.
*/ */
/* Video output callbacks
* XXX use decoder_NewPicture/decoder_DeletePicture
* and decoder_LinkPicture/decoder_UnlinkPicture */
picture_t *(*pf_vout_buffer_new)( decoder_t * );
void (*pf_vout_buffer_del)( decoder_t *, picture_t * );
void (*pf_picture_link) ( decoder_t *, picture_t * );
void (*pf_picture_unlink) ( decoder_t *, picture_t * );
/* Audio output callbacks /* Audio output callbacks
* XXX use decoder_NewAudioBuffer/decoder_DeleteAudioBuffer */ * XXX use decoder_NewAudioBuffer/decoder_DeleteAudioBuffer */
aout_buffer_t * ( * pf_aout_buffer_new) ( decoder_t *, int ); aout_buffer_t *(*pf_aout_buffer_new)( decoder_t *, int );
void ( * pf_aout_buffer_del) ( decoder_t *, aout_buffer_t * ); void (*pf_aout_buffer_del)( decoder_t *, aout_buffer_t * );
/* SPU output callbacks /* SPU output callbacks
* XXX use decoder_NewSubpicture and decoder_DeleteSubpicture */ * XXX use decoder_NewSubpicture and decoder_DeleteSubpicture */
subpicture_t *(*pf_spu_buffer_new) ( decoder_t * ); subpicture_t *(*pf_spu_buffer_new)( decoder_t * );
void (*pf_spu_buffer_del) ( decoder_t *, subpicture_t * ); void (*pf_spu_buffer_del)( decoder_t *, subpicture_t * );
/* Input attachments /* Input attachments
* XXX use decoder_GetInputAttachments */ * XXX use decoder_GetInputAttachments */
...@@ -166,6 +165,30 @@ struct encoder_t ...@@ -166,6 +165,30 @@ struct encoder_t
*/ */
/**
* This function will return a new picture usable by a decoder as an output
* buffer. You have to release it using decoder_DeletePicture or by returning
* it to the caller as a pf_decode_video return value.
*/
VLC_EXPORT( picture_t *, decoder_NewPicture, ( decoder_t * ) );
/**
* This function will release a picture create by decoder_NewPicture.
*/
VLC_EXPORT( void, decoder_DeletePicture, ( decoder_t *, picture_t *p_picture ) );
/**
* This function will increase the picture reference count.
* (picture_Hold is not usable.)
*/
VLC_EXPORT( void, decoder_LinkPicture, ( decoder_t *, picture_t * ) );
/**
* This function will decrease the picture reference count.
* (picture_Release is not usable.)
*/
VLC_EXPORT( void, decoder_UnlinkPicture, ( decoder_t *, picture_t * ) );
/** /**
* This function will return a new audio buffer usable by a decoder as an * This function will return a new audio buffer usable by a decoder as an
* output buffer. You have to release it using decoder_DeleteAudioBuffer * output buffer. You have to release it using decoder_DeleteAudioBuffer
......
...@@ -165,7 +165,7 @@ static inline picture_t *ffmpeg_NewPictBuf( decoder_t *p_dec, ...@@ -165,7 +165,7 @@ static inline picture_t *ffmpeg_NewPictBuf( decoder_t *p_dec,
p_dec->fmt_out.video.i_frame_rate_base = p_context->time_base.num; p_dec->fmt_out.video.i_frame_rate_base = p_context->time_base.num;
} }
p_pic = p_dec->pf_vout_buffer_new( p_dec ); p_pic = decoder_NewPicture( p_dec );
return p_pic; return p_pic;
} }
...@@ -609,7 +609,7 @@ picture_t *DecodeVideo( decoder_t *p_dec, block_t **pp_block ) ...@@ -609,7 +609,7 @@ picture_t *DecodeVideo( decoder_t *p_dec, block_t **pp_block )
/* Do not display the picture */ /* Do not display the picture */
p_pic = (picture_t *)p_sys->p_ff_pic->opaque; p_pic = (picture_t *)p_sys->p_ff_pic->opaque;
if( !b_drawpicture && p_pic ) if( !b_drawpicture && p_pic )
p_dec->pf_vout_buffer_del( p_dec, p_pic ); decoder_DeletePicture( p_dec, p_pic );
ffmpeg_NextPts( p_dec ); ffmpeg_NextPts( p_dec );
continue; continue;
...@@ -699,7 +699,7 @@ picture_t *DecodeVideo( decoder_t *p_dec, block_t **pp_block ) ...@@ -699,7 +699,7 @@ picture_t *DecodeVideo( decoder_t *p_dec, block_t **pp_block )
} }
else else
{ {
p_dec->pf_vout_buffer_del( p_dec, p_pic ); decoder_DeletePicture( p_dec, p_pic );
} }
} }
...@@ -914,7 +914,7 @@ static int ffmpeg_GetFrameBuf( struct AVCodecContext *p_context, ...@@ -914,7 +914,7 @@ static int ffmpeg_GetFrameBuf( struct AVCodecContext *p_context,
if( p_ff_pic->reference != 0 ) if( p_ff_pic->reference != 0 )
{ {
p_dec->pf_picture_link( p_dec, p_pic ); decoder_LinkPicture( p_dec, p_pic );
} }
/* FIXME what is that, should give good value */ /* FIXME what is that, should give good value */
...@@ -996,7 +996,7 @@ static void ffmpeg_ReleaseFrameBuf( struct AVCodecContext *p_context, ...@@ -996,7 +996,7 @@ static void ffmpeg_ReleaseFrameBuf( struct AVCodecContext *p_context,
if( p_ff_pic->reference != 0 ) if( p_ff_pic->reference != 0 )
{ {
p_dec->pf_picture_unlink( p_dec, p_pic ); decoder_UnlinkPicture( p_dec, p_pic );
} }
} }
......
...@@ -153,7 +153,7 @@ static picture_t *Decode( decoder_t *p_dec, block_t **pp_block ) ...@@ -153,7 +153,7 @@ static picture_t *Decode( decoder_t *p_dec, block_t **pp_block )
} }
/* Get a new picture */ /* Get a new picture */
p_pic = p_dec->pf_vout_buffer_new( p_dec ); p_pic = decoder_NewPicture( p_dec );
if( !p_pic ) if( !p_pic )
goto error; goto error;
......
...@@ -168,7 +168,7 @@ static picture_t *GetNewPicture( decoder_t *p_dec ) ...@@ -168,7 +168,7 @@ static picture_t *GetNewPicture( decoder_t *p_dec )
p_sys->p_dirac->src_params.frame_rate.denominator; p_sys->p_dirac->src_params.frame_rate.denominator;
/* Get a new picture */ /* Get a new picture */
p_pic = p_dec->pf_vout_buffer_new( p_dec ); p_pic = decoder_NewPicture( p_dec );
if( p_pic == NULL ) return NULL; if( p_pic == NULL ) return NULL;
p_pic->b_progressive = !p_sys->p_dirac->src_params.source_sampling; p_pic->b_progressive = !p_sys->p_dirac->src_params.source_sampling;
......
...@@ -953,7 +953,7 @@ static void *DecBlock( decoder_t *p_dec, block_t **pp_block ) ...@@ -953,7 +953,7 @@ static void *DecBlock( decoder_t *p_dec, block_t **pp_block )
if( p_dec->fmt_out.i_cat == VIDEO_ES ) if( p_dec->fmt_out.i_cat == VIDEO_ES )
{ {
/* Get a new picture */ /* Get a new picture */
picture_t *p_pic = p_dec->pf_vout_buffer_new( p_dec ); picture_t *p_pic = decoder_NewPicture( p_dec );
if( !p_pic ) return NULL; if( !p_pic ) return NULL;
CopyPicture( p_pic, block_out.p_buffer ); CopyPicture( p_pic, block_out.p_buffer );
......
...@@ -345,7 +345,7 @@ static picture_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block ) ...@@ -345,7 +345,7 @@ static picture_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block )
picture_t *p_pic; picture_t *p_pic;
if( pp_block == NULL || !*pp_block ) return NULL; if( pp_block == NULL || !*pp_block ) return NULL;
p_pic = p_dec->pf_vout_buffer_new( p_dec ); p_pic = decoder_NewPicture( p_dec );
if( p_pic == NULL ) if( p_pic == NULL )
{ {
msg_Err( p_dec, "cannot get picture" ); msg_Err( p_dec, "cannot get picture" );
......
...@@ -341,7 +341,7 @@ static picture_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block ) ...@@ -341,7 +341,7 @@ static picture_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block )
/* For some reason, libmpeg2 will put this pic twice in /* For some reason, libmpeg2 will put this pic twice in
* discard_picture. This can be considered a bug in libmpeg2. */ * discard_picture. This can be considered a bug in libmpeg2. */
p_dec->pf_picture_link( p_dec, p_pic ); decoder_LinkPicture( p_dec, p_pic );
if( p_sys->p_synchro ) if( p_sys->p_synchro )
{ {
...@@ -509,7 +509,7 @@ static picture_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block ) ...@@ -509,7 +509,7 @@ static picture_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block )
if( p_sys->p_info->discard_fbuf && if( p_sys->p_info->discard_fbuf &&
p_sys->p_info->discard_fbuf->id ) p_sys->p_info->discard_fbuf->id )
{ {
p_dec->pf_picture_unlink( p_dec, decoder_UnlinkPicture( p_dec,
p_sys->p_info->discard_fbuf->id ); p_sys->p_info->discard_fbuf->id );
} }
...@@ -639,7 +639,7 @@ static picture_t *GetNewPicture( decoder_t *p_dec, uint8_t **pp_buf ) ...@@ -639,7 +639,7 @@ static picture_t *GetNewPicture( decoder_t *p_dec, uint8_t **pp_buf )
VLC_FOURCC('I','4','2','0') : VLC_FOURCC('I','4','2','2'); VLC_FOURCC('I','4','2','0') : VLC_FOURCC('I','4','2','2');
/* Get a new picture */ /* Get a new picture */
p_pic = p_dec->pf_vout_buffer_new( p_dec ); p_pic = decoder_NewPicture( p_dec );
if( p_pic == NULL ) return NULL; if( p_pic == NULL ) return NULL;
...@@ -650,7 +650,7 @@ static picture_t *GetNewPicture( decoder_t *p_dec, uint8_t **pp_buf ) ...@@ -650,7 +650,7 @@ static picture_t *GetNewPicture( decoder_t *p_dec, uint8_t **pp_buf )
p_pic->i_nb_fields = p_sys->p_info->current_picture != NULL ? p_pic->i_nb_fields = p_sys->p_info->current_picture != NULL ?
p_sys->p_info->current_picture->nb_fields : 2; p_sys->p_info->current_picture->nb_fields : 2;
p_dec->pf_picture_link( p_dec, p_pic ); decoder_LinkPicture( p_dec, p_pic );
pp_buf[0] = p_pic->p[0].p_pixels; pp_buf[0] = p_pic->p[0].p_pixels;
pp_buf[1] = p_pic->p[1].p_pixels; pp_buf[1] = p_pic->p[1].p_pixels;
......
...@@ -202,7 +202,7 @@ static void *DecodeBlock( decoder_t *p_dec, block_t **pp_block ) ...@@ -202,7 +202,7 @@ static void *DecodeBlock( decoder_t *p_dec, block_t **pp_block )
// p_sys->p_decoder->sync(); // p_sys->p_decoder->sync();
if( p_block->i_flags & BLOCK_FLAG_END_OF_FRAME ) if( p_block->i_flags & BLOCK_FLAG_END_OF_FRAME )
{ {
p_pic = p_dec->pf_vout_buffer_new( p_dec ); p_pic = decoder_NewPicture( p_dec );
if( !p_pic ) if( !p_pic )
{ {
block_Release( p_block ); block_Release( p_block );
......
...@@ -206,7 +206,7 @@ static picture_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block ) ...@@ -206,7 +206,7 @@ static picture_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block )
} }
/* Get a new picture */ /* Get a new picture */
p_pic = p_dec->pf_vout_buffer_new( p_dec ); p_pic = decoder_NewPicture( p_dec );
if( !p_pic ) goto error; if( !p_pic ) goto error;
/* Decode picture */ /* Decode picture */
......
...@@ -924,7 +924,7 @@ static picture_t *DecodeVideo( decoder_t *p_dec, block_t **pp_block ) ...@@ -924,7 +924,7 @@ static picture_t *DecodeVideo( decoder_t *p_dec, block_t **pp_block )
vlc_mutex_lock( &qt_mutex ); vlc_mutex_lock( &qt_mutex );
if( ( p_pic = p_dec->pf_vout_buffer_new( p_dec ) ) ) if( ( p_pic = decoder_NewPicture( p_dec ) ) )
{ {
p_sys->decpar.data = (Ptr)p_block->p_buffer; p_sys->decpar.data = (Ptr)p_block->p_buffer;
p_sys->decpar.bufferSize = p_block->i_buffer; p_sys->decpar.bufferSize = p_block->i_buffer;
......
...@@ -289,7 +289,7 @@ static picture_t *DecodeFrame( decoder_t *p_dec, block_t *p_block ) ...@@ -289,7 +289,7 @@ static picture_t *DecodeFrame( decoder_t *p_dec, block_t *p_block )
picture_t *p_pic; picture_t *p_pic;
/* Get a new picture */ /* Get a new picture */
p_pic = p_dec->pf_vout_buffer_new( p_dec ); p_pic = decoder_NewPicture( p_dec );
if( !p_pic ) if( !p_pic )
{ {
block_Release( p_block ); block_Release( p_block );
......
...@@ -463,7 +463,7 @@ static picture_t *DecodeVideo( decoder_t *p_dec, block_t **pp_block ) ...@@ -463,7 +463,7 @@ static picture_t *DecodeVideo( decoder_t *p_dec, block_t **pp_block )
vlc_mutex_lock( &rm_mutex ); vlc_mutex_lock( &rm_mutex );
p_pic = p_dec->pf_vout_buffer_new( p_dec ); p_pic = decoder_NewPicture( p_dec );
if ( p_pic ) if ( p_pic )
{ {
......
...@@ -256,7 +256,7 @@ static void SchroFrameFree( SchroFrame *frame, void *priv) ...@@ -256,7 +256,7 @@ static void SchroFrameFree( SchroFrame *frame, void *priv)
if( !p_free ) if( !p_free )
return; return;
p_free->p_dec->pf_vout_buffer_del( p_free->p_dec, p_free->p_pic ); decoder_DeletePicture( p_free->p_dec, p_free->p_pic );
free(p_free); free(p_free);
(void)frame; (void)frame;
} }
...@@ -274,7 +274,7 @@ static SchroFrame *CreateSchroFrameFromPic( decoder_t *p_dec ) ...@@ -274,7 +274,7 @@ static SchroFrame *CreateSchroFrameFromPic( decoder_t *p_dec )
if( !p_schroframe ) if( !p_schroframe )
return NULL; return NULL;
p_pic = p_dec->pf_vout_buffer_new( p_dec ); p_pic = decoder_NewPicture( p_dec );
if( !p_pic ) if( !p_pic )
return NULL; return NULL;
......
...@@ -171,7 +171,7 @@ static picture_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block ) ...@@ -171,7 +171,7 @@ static picture_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block )
/ p_surface->h; / p_surface->h;
/* Get a new picture. */ /* Get a new picture. */
p_pic = p_dec->pf_vout_buffer_new( p_dec ); p_pic = decoder_NewPicture( p_dec );
if ( p_pic == NULL ) goto error; if ( p_pic == NULL ) goto error;
switch ( p_surface->format->BitsPerPixel ) switch ( p_surface->format->BitsPerPixel )
......
...@@ -266,7 +266,7 @@ static picture_t *DecodePacket( decoder_t *p_dec, block_t **pp_block, ...@@ -266,7 +266,7 @@ static picture_t *DecodePacket( decoder_t *p_dec, block_t **pp_block,
p_dec->fmt_out.i_codec = i_chroma; p_dec->fmt_out.i_codec = i_chroma;
/* Get a new picture */ /* Get a new picture */
if( (p_pic = p_dec->pf_vout_buffer_new( p_dec )) ) if( (p_pic = decoder_NewPicture( p_dec )) )
{ {
tarkin_CopyPicture( p_dec, p_pic, rgb, i_stride ); tarkin_CopyPicture( p_dec, p_pic, rgb, i_stride );
......
...@@ -495,7 +495,7 @@ static picture_t *DecodePacket( decoder_t *p_dec, ogg_packet *p_oggpacket ) ...@@ -495,7 +495,7 @@ static picture_t *DecodePacket( decoder_t *p_dec, ogg_packet *p_oggpacket )
return NULL; return NULL;
/* Get a new picture */ /* Get a new picture */
p_pic = p_dec->pf_vout_buffer_new( p_dec ); p_pic = decoder_NewPicture( p_dec );
if( !p_pic ) return NULL; if( !p_pic ) return NULL;
theora_CopyPicture( p_dec, p_pic, &yuv ); theora_CopyPicture( p_dec, p_pic, &yuv );
......
...@@ -378,7 +378,7 @@ static picture_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block ) ...@@ -378,7 +378,7 @@ static picture_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block )
mpeg2_set_buf( p_sys->p_mpeg2dec, buf, p_pic ); mpeg2_set_buf( p_sys->p_mpeg2dec, buf, p_pic );
p_pic->date = 0; p_pic->date = 0;
p_dec->pf_picture_link( p_dec, p_pic ); decoder_LinkPicture( p_dec, p_pic );
if( p_sys->p_synchro ) if( p_sys->p_synchro )
{ {
...@@ -531,7 +531,7 @@ static picture_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block ) ...@@ -531,7 +531,7 @@ static picture_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block )
if( p_sys->p_info->discard_fbuf && if( p_sys->p_info->discard_fbuf &&
p_sys->p_info->discard_fbuf->id ) p_sys->p_info->discard_fbuf->id )
{ {
p_dec->pf_picture_unlink( p_dec, p_sys->p_info->discard_fbuf->id ); decoder_UnlinkPicture( p_dec, p_sys->p_info->discard_fbuf->id );
} }
/* For still frames */ /* For still frames */
//if( state == STATE_END && p_pic ) p_pic->b_force = true; //if( state == STATE_END && p_pic ) p_pic->b_force = true;
...@@ -703,7 +703,7 @@ static picture_t *GetNewPicture( decoder_t *p_dec, uint8_t **pp_buf ) ...@@ -703,7 +703,7 @@ static picture_t *GetNewPicture( decoder_t *p_dec, uint8_t **pp_buf )
fflush(p_sys->f_wd_nb); fflush(p_sys->f_wd_nb);
} }
#endif #endif
p_pic = p_dec->pf_vout_buffer_new( p_dec ); p_pic = decoder_NewPicture( p_dec );
if( p_pic == NULL ) return NULL; if( p_pic == NULL ) return NULL;
...@@ -716,7 +716,7 @@ static picture_t *GetNewPicture( decoder_t *p_dec, uint8_t **pp_buf ) ...@@ -716,7 +716,7 @@ static picture_t *GetNewPicture( decoder_t *p_dec, uint8_t **pp_buf )
p_pic->format.i_frame_rate = p_dec->fmt_out.video.i_frame_rate; p_pic->format.i_frame_rate = p_dec->fmt_out.video.i_frame_rate;
p_pic->format.i_frame_rate_base = p_dec->fmt_out.video.i_frame_rate_base; p_pic->format.i_frame_rate_base = p_dec->fmt_out.video.i_frame_rate_base;
p_dec->pf_picture_link( p_dec, p_pic ); decoder_LinkPicture( p_dec, p_pic );
pp_buf[0] = p_pic->p[0].p_pixels; pp_buf[0] = p_pic->p[0].p_pixels;
pp_buf[1] = p_pic->p[1].p_pixels; pp_buf[1] = p_pic->p[1].p_pixels;
......
...@@ -72,7 +72,7 @@ static picture_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block ) ...@@ -72,7 +72,7 @@ static picture_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block )
p_dec->fmt_out.video.i_aspect = VOUT_ASPECT_FACTOR; p_dec->fmt_out.video.i_aspect = VOUT_ASPECT_FACTOR;
p_dec->fmt_out.i_codec = VLC_FOURCC('I','4','2','0'); p_dec->fmt_out.i_codec = VLC_FOURCC('I','4','2','0');
p_pic = p_dec->pf_vout_buffer_new( p_dec ); p_pic = decoder_NewPicture( p_dec );
if( p_block->i_buffer == kBufferSize ) if( p_block->i_buffer == kBufferSize )
{ {
......
...@@ -161,6 +161,26 @@ struct decoder_owner_sys_t ...@@ -161,6 +161,26 @@ struct decoder_owner_sys_t
/***************************************************************************** /*****************************************************************************
* Public functions * Public functions
*****************************************************************************/ *****************************************************************************/
picture_t *decoder_NewPicture( decoder_t *p_decoder )
{
picture_t *p_picture = p_decoder->pf_vout_buffer_new( p_decoder );
if( !p_picture )
msg_Warn( p_decoder, "can't get output picture" );
return p_picture;
}
void decoder_DeletePicture( decoder_t *p_decoder, picture_t *p_picture )
{
p_decoder->pf_vout_buffer_del( p_decoder, p_picture );
}
void decoder_LinkPicture( decoder_t *p_decoder, picture_t *p_picture )
{
p_decoder->pf_picture_link( p_decoder, p_picture );
}
void decoder_UnlinkPicture( decoder_t *p_decoder, picture_t *p_picture )
{
p_decoder->pf_picture_unlink( p_decoder, p_picture );
}
aout_buffer_t *decoder_NewAudioBuffer( decoder_t *p_decoder, int i_size ) aout_buffer_t *decoder_NewAudioBuffer( decoder_t *p_decoder, int i_size )
{ {
if( !p_decoder->pf_aout_buffer_new ) if( !p_decoder->pf_aout_buffer_new )
...@@ -169,8 +189,6 @@ aout_buffer_t *decoder_NewAudioBuffer( decoder_t *p_decoder, int i_size ) ...@@ -169,8 +189,6 @@ aout_buffer_t *decoder_NewAudioBuffer( decoder_t *p_decoder, int i_size )
} }
void decoder_DeleteAudioBuffer( decoder_t *p_decoder, aout_buffer_t *p_buffer ) void decoder_DeleteAudioBuffer( decoder_t *p_decoder, aout_buffer_t *p_buffer )
{ {
if( !p_decoder->pf_aout_buffer_del )
return;
p_decoder->pf_aout_buffer_del( p_decoder, p_buffer ); p_decoder->pf_aout_buffer_del( p_decoder, p_buffer );
} }
......
...@@ -78,11 +78,14 @@ date_Init ...@@ -78,11 +78,14 @@ date_Init
date_Move date_Move
date_Set date_Set
decoder_DeleteAudioBuffer decoder_DeleteAudioBuffer
decoder_DeletePicture
decoder_DeleteSubpicture decoder_DeleteSubpicture
decoder_GetDisplayDate decoder_GetDisplayDate
decoder_GetDisplayRate decoder_GetDisplayRate
decoder_GetInputAttachments decoder_GetInputAttachments
decoder_LinkPicture
decoder_NewAudioBuffer decoder_NewAudioBuffer
decoder_NewPicture
decoder_NewSubpicture decoder_NewSubpicture
decoder_SynchroChoose decoder_SynchroChoose
decoder_SynchroDate decoder_SynchroDate
...@@ -93,6 +96,7 @@ decoder_SynchroNewPicture ...@@ -93,6 +96,7 @@ decoder_SynchroNewPicture
decoder_SynchroRelease decoder_SynchroRelease
decoder_SynchroReset decoder_SynchroReset
decoder_SynchroTrash decoder_SynchroTrash
decoder_UnlinkPicture
decode_URI decode_URI
decode_URI_duplicate decode_URI_duplicate
demux_PacketizerDestroy demux_PacketizerDestroy
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment