@ -37,18 +37,23 @@ typedef struct {
char sws_param [ 256 ] ;
} BufferSourceContext ;
int av_vsrc_buffer_add_video_buffer_ref ( AVFilterContext * buffer_filter , AVFilterBufferRef * picref )
int av_vsrc_buffer_add_video_buffer_ref ( AVFilterContext * buffer_filter ,
AVFilterBufferRef * picref , int flags )
{
BufferSourceContext * c = buffer_filter - > priv ;
AVFilterLink * outlink = buffer_filter - > outputs [ 0 ] ;
int ret ;
if ( c - > picref ) {
av_log ( buffer_filter , AV_LOG_ERROR ,
" Buffering several frames is not supported. "
" Please consume all available frames before adding a new one. \n "
) ;
//return -1;
if ( flags & AV_VSRC_BUF_FLAG_OVERWRITE ) {
avfilter_unref_buffer ( c - > picref ) ;
c - > picref = NULL ;
} else {
av_log ( buffer_filter , AV_LOG_ERROR ,
" Buffering several frames is not supported. "
" Please consume all available frames before adding a new one. \n " ) ;
return AVERROR ( EINVAL ) ;
}
}
if ( picref - > video - > w ! = c - > w | | picref - > video - > h ! = c - > h | | picref - > format ! = c - > pix_fmt ) {
@ -109,14 +114,15 @@ int av_vsrc_buffer_add_video_buffer_ref(AVFilterContext *buffer_filter, AVFilter
# if CONFIG_AVCODEC
# include "avcodec.h"
int av_vsrc_buffer_add_frame ( AVFilterContext * buffer_src , const AVFrame * frame )
int av_vsrc_buffer_add_frame ( AVFilterContext * buffer_src ,
const AVFrame * frame , int flags )
{
int ret ;
AVFilterBufferRef * picref =
avfilter_get_video_buffer_ref_from_frame ( frame , AV_PERM_WRITE ) ;
if ( ! picref )
return AVERROR ( ENOMEM ) ;
ret = av_vsrc_buffer_add_video_buffer_ref ( buffer_src , picref ) ;
ret = av_vsrc_buffer_add_video_buffer_ref ( buffer_src , picref , flags ) ;
picref - > buf - > data [ 0 ] = NULL ;
avfilter_unref_buffer ( picref ) ;