On 12/02/16 10:14, Anton Khirnov wrote:
> Quoting Anton Khirnov (2016-02-12 10:09:15)
>> ---
>>  avconv_filter.c          | 70 
>> +++++++++++++++++++++++++++++++++---------------
>>  tests/ref/fate/zmbv-8bit |  2 +-
>>  2 files changed, 50 insertions(+), 22 deletions(-)
>>
>> diff --git a/avconv_filter.c b/avconv_filter.c
>> index 0127580..aaf5851 100644
>> --- a/avconv_filter.c
>> +++ b/avconv_filter.c
>> @@ -23,6 +23,7 @@
>>  #include "avconv.h"
>>  
>>  #include "libavfilter/avfilter.h"
>> +#include "libavfilter/buffersrc.h"
>>  
>>  #include "libavresample/avresample.h"
>>  
>> @@ -489,24 +490,39 @@ static int configure_input_video_filter(FilterGraph 
>> *fg, InputFilter *ifilter,
>>      InputFile     *f = input_files[ist->file_index];
>>      AVRational tb = ist->framerate.num ? av_inv_q(ist->framerate) :
>>                                           ist->st->time_base;
>> -    AVRational sar;
>> -    char args[255], name[255];
>> +    AVBufferSrcParameters *par;
>> +    char name[255];
>>      int ret, pad_idx = 0;
>>  
>> -    sar = ist->st->sample_aspect_ratio.num ?
>> -          ist->st->sample_aspect_ratio :
>> -          ist->dec_ctx->sample_aspect_ratio;
>> -    snprintf(args, sizeof(args),
>> -             "width=%d:height=%d:pix_fmt=%d:time_base=%d/%d:sar=%d/%d",
>> -             ist->dec_ctx->width, ist->dec_ctx->height,
>> -             ist->hwaccel_retrieve_data ? ist->hwaccel_retrieved_pix_fmt : 
>> ist->dec_ctx->pix_fmt,
>> -             tb.num, tb.den, sar.num, sar.den);
>>      snprintf(name, sizeof(name), "graph %d input from stream %d:%d", 
>> fg->index,
>>               ist->file_index, ist->st->index);
>>  
>> -    if ((ret = avfilter_graph_create_filter(&ifilter->filter, buffer_filt, 
>> name,
>> -                                            args, NULL, fg->graph)) < 0)
>> +    ifilter->filter = avfilter_graph_alloc_filter(fg->graph, buffer_filt, 
>> name);
>> +    if (!ifilter->filter)
>> +        return AVERROR(ENOMEM);
>> +
>> +    par = av_buffersrc_parameters_alloc();
>> +    if (!par)
>> +        return AVERROR(ENOMEM);
>> +
>> +    par->sample_aspect_ratio = ist->st->sample_aspect_ratio.num ?
>> +                               ist->st->sample_aspect_ratio :
>> +                               ist->dec_ctx->sample_aspect_ratio;
>> +    par->width               = ist->dec_ctx->width;
>> +    par->height              = ist->dec_ctx->height;
>> +    par->format              = ist->hwaccel_retrieve_data ?
>> +                               ist->hwaccel_retrieved_pix_fmt : 
>> ist->dec_ctx->pix_fmt;
>> +    par->time_base           = tb;
>> +
>> +    ret = av_buffersrc_parameters_set(ifilter->filter, par);
>> +    av_freep(&par);
>> +    if (ret < 0)
>> +        return ret;
>> +
>> +    ret = avfilter_init_str(ifilter->filter, NULL);
>> +    if (ret < 0)
>>          return ret;
>> +
>>      last_filter = ifilter->filter;
>>  
>>      if (ist->autorotate) {
>> @@ -565,21 +581,33 @@ static int configure_input_audio_filter(FilterGraph 
>> *fg, InputFilter *ifilter,
>>      const AVFilter *abuffer_filt = avfilter_get_by_name("abuffer");
>>      InputStream *ist = ifilter->ist;
>>      InputFile     *f = input_files[ist->file_index];
>> +    AVBufferSrcParameters *par;
>>      char args[255], name[255];
>>      int ret, pad_idx = 0;
>>  
>> -    snprintf(args, sizeof(args), 
>> "time_base=%d/%d:sample_rate=%d:sample_fmt=%s"
>> -             ":channel_layout=0x%"PRIx64,
>> -             1, ist->dec_ctx->sample_rate,
>> -             ist->dec_ctx->sample_rate,
>> -             av_get_sample_fmt_name(ist->dec_ctx->sample_fmt),
>> -             ist->dec_ctx->channel_layout);
>>      snprintf(name, sizeof(name), "graph %d input from stream %d:%d", 
>> fg->index,
>>               ist->file_index, ist->st->index);
>>  
>> -    if ((ret = avfilter_graph_create_filter(&ifilter->filter, abuffer_filt,
>> -                                            name, args, NULL,
>> -                                            fg->graph)) < 0)
>> +    ifilter->filter = avfilter_graph_alloc_filter(fg->graph, abuffer_filt, 
>> name);
>> +    if (!ifilter->filter)
>> +        return AVERROR(ENOMEM);
>> +
>> +    par = av_buffersrc_parameters_alloc();
>> +    if (!par)
>> +        return AVERROR(ENOMEM);
>> +
>> +    par->time_base      = (AVRational){ 1, ist->dec_ctx->sample_rate };
>> +    par->sample_rate    = ist->dec_ctx->sample_rate;
>> +    par->format         = ist->dec_ctx->sample_fmt;
>> +    par->channel_layout = ist->dec_ctx->channel_layout;
>> +
>> +    ret = av_buffersrc_parameters_set(ifilter->filter, par);
>> +    av_freep(&par);
>> +    if (ret < 0)
>> +        return ret;
>> +
>> +    ret = avfilter_init_str(ifilter->filter, NULL);
>> +    if (ret < 0)
>>          return ret;
>>      last_filter = ifilter->filter;
>>  
>> diff --git a/tests/ref/fate/zmbv-8bit b/tests/ref/fate/zmbv-8bit
>> index f104c98..9f02ae3 100644
>> --- a/tests/ref/fate/zmbv-8bit
>> +++ b/tests/ref/fate/zmbv-8bit
>> @@ -1,4 +1,4 @@
>> -#tb 0: 15967/1119068
>> +#tb 0: 1000000/70086303
> 
> Amended locally to explain this change:
> The timebase change in the zmbv-8bit test is due to the fact that
> previously the timebase string was evaluated as floating point, then
> converted to a rational. After this commit, the timebase is passed
> directly as is.
> 

Lovely, sounds like a good improvement.
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to