@ -143,7 +143,10 @@ int av_buffersink_get_buffer_ref(AVFilterContext *ctx,
int ret ;
* bufref = NULL ;
av_assert0 ( ! strcmp ( ctx - > filter - > name , " buffersink " ) | | ! strcmp ( ctx - > filter - > name , " abuffersink " ) ) ;
av_assert0 ( ! strcmp ( ctx - > filter - > name , " buffersink " )
| | ! strcmp ( ctx - > filter - > name , " abuffersink " )
| | ! strcmp ( ctx - > filter - > name , " ffbuffersink " )
| | ! strcmp ( ctx - > filter - > name , " ffabuffersink " ) ) ;
/* no picref available, fetch it from the filterchain */
if ( ! av_fifo_size ( buf - > fifo ) ) {
@ -166,7 +169,8 @@ int av_buffersink_get_buffer_ref(AVFilterContext *ctx,
AVRational av_buffersink_get_frame_rate ( AVFilterContext * ctx )
{
av_assert0 ( ! strcmp ( ctx - > filter - > name , " buffersink " ) ) ;
av_assert0 ( ! strcmp ( ctx - > filter - > name , " buffersink " )
| | ! strcmp ( ctx - > filter - > name , " ffbuffersink " ) ) ;
return ctx - > inputs [ 0 ] - > frame_rate ;
}
@ -176,7 +180,10 @@ int av_buffersink_poll_frame(AVFilterContext *ctx)
BufferSinkContext * buf = ctx - > priv ;
AVFilterLink * inlink = ctx - > inputs [ 0 ] ;
av_assert0 ( ! strcmp ( ctx - > filter - > name , " buffersink " ) | | ! strcmp ( ctx - > filter - > name , " abuffersink " ) ) ;
av_assert0 ( ! strcmp ( ctx - > filter - > name , " buffersink " )
| | ! strcmp ( ctx - > filter - > name , " abuffersink " )
| | ! strcmp ( ctx - > filter - > name , " ffbuffersink " )
| | ! strcmp ( ctx - > filter - > name , " ffabuffersink " ) ) ;
return av_fifo_size ( buf - > fifo ) / sizeof ( AVFilterBufferRef * ) + ff_poll_frame ( inlink ) ;
}
@ -218,6 +225,23 @@ static int vsink_query_formats(AVFilterContext *ctx)
return 0 ;
}
AVFilter avfilter_vsink_ffbuffersink = {
. name = " ffbuffersink " ,
. description = NULL_IF_CONFIG_SMALL ( " Buffer video frames, and make them available to the end of the filter graph. " ) ,
. priv_size = sizeof ( BufferSinkContext ) ,
. init_opaque = vsink_init ,
. uninit = vsink_uninit ,
. query_formats = vsink_query_formats ,
. inputs = ( const AVFilterPad [ ] ) { { . name = " default " ,
. type = AVMEDIA_TYPE_VIDEO ,
. end_frame = end_frame ,
. min_perms = AV_PERM_READ | AV_PERM_PRESERVE , } ,
{ . name = NULL } } ,
. outputs = ( const AVFilterPad [ ] ) { { . name = NULL } } ,
} ;
AVFilter avfilter_vsink_buffersink = {
. name = " buffersink " ,
. description = NULL_IF_CONFIG_SMALL ( " Buffer video frames, and make them available to the end of the filter graph. " ) ,
@ -299,6 +323,22 @@ static int asink_query_formats(AVFilterContext *ctx)
return 0 ;
}
AVFilter avfilter_asink_ffabuffersink = {
. name = " ffabuffersink " ,
. description = NULL_IF_CONFIG_SMALL ( " Buffer audio frames, and make them available to the end of the filter graph. " ) ,
. init_opaque = asink_init ,
. uninit = asink_uninit ,
. priv_size = sizeof ( BufferSinkContext ) ,
. query_formats = asink_query_formats ,
. inputs = ( const AVFilterPad [ ] ) { { . name = " default " ,
. type = AVMEDIA_TYPE_AUDIO ,
. filter_samples = filter_samples ,
. min_perms = AV_PERM_READ | AV_PERM_PRESERVE , } ,
{ . name = NULL } } ,
. outputs = ( const AVFilterPad [ ] ) { { . name = NULL } } ,
} ;
AVFilter avfilter_asink_abuffersink = {
. name = " abuffersink " ,
. description = NULL_IF_CONFIG_SMALL ( " Buffer audio frames, and make them available to the end of the filter graph. " ) ,