@ -28,6 +28,7 @@
# include "float.h" /* DBL_MIN, DBL_MAX */
# include "float.h" /* DBL_MIN, DBL_MAX */
# include "libavutil/bprint.h"
# include "libavutil/bprint.h"
# include "libavutil/file.h"
# include "libavutil/log.h"
# include "libavutil/log.h"
# include "libavutil/mem.h"
# include "libavutil/mem.h"
# include "libavutil/opt.h"
# include "libavutil/opt.h"
@ -43,6 +44,7 @@
typedef struct {
typedef struct {
AVClass * class ; ///< class for private options
AVClass * class ; ///< class for private options
char * graph_str ;
char * graph_str ;
char * graph_filename ;
char * dump_graph ;
char * dump_graph ;
AVFilterGraph * graph ;
AVFilterGraph * graph ;
AVFilterContext * * sinks ;
AVFilterContext * * sinks ;
@ -104,6 +106,32 @@ av_cold static int lavfi_read_header(AVFormatContext *avctx)
buffersink = avfilter_get_by_name ( " ffbuffersink " ) ;
buffersink = avfilter_get_by_name ( " ffbuffersink " ) ;
abuffersink = avfilter_get_by_name ( " ffabuffersink " ) ;
abuffersink = avfilter_get_by_name ( " ffabuffersink " ) ;
if ( lavfi - > graph_filename & & lavfi - > graph_str ) {
av_log ( avctx , AV_LOG_ERROR ,
" Only one of the graph or graph_file options must be specified \n " ) ;
return AVERROR ( EINVAL ) ;
}
if ( lavfi - > graph_filename ) {
uint8_t * file_buf , * graph_buf ;
size_t file_bufsize ;
ret = av_file_map ( lavfi - > graph_filename ,
& file_buf , & file_bufsize , 0 , avctx ) ;
if ( ret < 0 )
return ret ;
/* create a 0-terminated string based on the read file */
graph_buf = av_malloc ( file_bufsize + 1 ) ;
if ( ! graph_buf ) {
av_file_unmap ( file_buf , file_bufsize ) ;
return AVERROR ( ENOMEM ) ;
}
memcpy ( graph_buf , file_buf , file_bufsize ) ;
graph_buf [ file_bufsize ] = 0 ;
av_file_unmap ( file_buf , file_bufsize ) ;
lavfi - > graph_str = graph_buf ;
}
if ( ! lavfi - > graph_str )
if ( ! lavfi - > graph_str )
lavfi - > graph_str = av_strdup ( avctx - > filename ) ;
lavfi - > graph_str = av_strdup ( avctx - > filename ) ;
@ -376,6 +404,7 @@ static int lavfi_read_packet(AVFormatContext *avctx, AVPacket *pkt)
static const AVOption options [ ] = {
static const AVOption options [ ] = {
{ " graph " , " set libavfilter graph " , OFFSET ( graph_str ) , AV_OPT_TYPE_STRING , { . str = NULL } , 0 , 0 , DEC } ,
{ " graph " , " set libavfilter graph " , OFFSET ( graph_str ) , AV_OPT_TYPE_STRING , { . str = NULL } , 0 , 0 , DEC } ,
{ " graph_file " , " set libavfilter graph filename " , OFFSET ( graph_filename ) , AV_OPT_TYPE_STRING , { . str = NULL } , 0 , 0 , DEC } ,
{ " dumpgraph " , " dump graph to stderr " , OFFSET ( dump_graph ) , AV_OPT_TYPE_STRING , { . str = NULL } , 0 , 0 , DEC } ,
{ " dumpgraph " , " dump graph to stderr " , OFFSET ( dump_graph ) , AV_OPT_TYPE_STRING , { . str = NULL } , 0 , 0 , DEC } ,
{ NULL } ,
{ NULL } ,
} ;
} ;