#375: earwax audio filter generates wrong pts and af_sox filter can not be applied. -------------------------------------+------------------------------------ Reporter: chinshou | Owner: Type: defect | Status: new Priority: normal | Component: avfilter Version: unspecified | Resolution: Keywords: | Blocked By: Blocking: | Reproduced by developer: 0 Analyzed by developer: 0 | -------------------------------------+------------------------------------ Description changed by cehoyos:
Old description: > Sorry, I do not know is it appropriate to report bug for audio filter > branch at https://github.com/mnzaki/FFmpeg/commits/audio-filters-20110726 > . > > I just try the audio filter branch for a while and noticed that when i > set -af earwax , the generated audio data pts always 0. > I added the avfilter_copy_buffer_ref_props(outref, insamples); call to > copy original pts to new samplesref and it seems to fix the problem. > > static void filter_samples(AVFilterLink *inlink, AVFilterBufferRef > *insamples) > { > int16_t *taps, *endin, *in, *out; > AVFilterBufferRef *outref = > avfilter_get_audio_buffer(inlink, AV_PERM_WRITE, > inlink->format, > insamples->audio->nb_samples, > inlink->channel_layout, > 0); > + avfilter_copy_buffer_ref_props(outref, insamples);//<<--copy pts > > taps = ((EarwaxContext*)inlink->dst->priv)->taps; > out = (int16_t*)outref->data[0]; > in = (int16_t*)insamples->data[0]; > ... > > second, I guess we should add packing negotiate code to af_sox filter's > query_formats , > static int query_formats(AVFilterContext *ctx) > { > AVFilterFormats *formats = NULL; > avfilter_add_format(&formats, AV_SAMPLE_FMT_S32); > avfilter_set_common_sample_formats(ctx, formats); > avfilter_set_common_channel_layouts(ctx, > avfilter_all_channel_layouts()); > + avfilter_set_common_packing_formats(ctx, > avfilter_all_packing_formats());// << ---- packing negotiation > > return 0; > } > > otherwise avfilter_graph_config call will fail at > static int query_formats(AVFilterGraph *graph, AVClass *log_ctx) > { > ... > else if (link->type == AVMEDIA_TYPE_AUDIO) { > if (!link->in_chlayouts || !link->out_chlayouts || > !link->in_packing || !link->out_packing) > return AVERROR(EINVAL); <<------fail at here > > if (!avfilter_merge_formats(link->in_formats, > link->out_formats) || > !avfilter_merge_formats(link->in_chlayouts, > link->out_chlayouts) || > !avfilter_merge_formats(link->in_packing, > link->out_packing)) > ...} > > best regards > chinshou New description: Sorry, I do not know is it appropriate to report bug for audio filter branch at https://github.com/mnzaki/FFmpeg/commits/audio-filters-20110726 . I just try the audio filter branch for a while and noticed that when i set -af earwax , the generated audio data pts always 0. I added the avfilter_copy_buffer_ref_props(outref, insamples); call to copy original pts to new samplesref and it seems to fix the problem. {{{ static void filter_samples(AVFilterLink *inlink, AVFilterBufferRef *insamples) { int16_t *taps, *endin, *in, *out; AVFilterBufferRef *outref = avfilter_get_audio_buffer(inlink, AV_PERM_WRITE, inlink->format, insamples->audio->nb_samples, inlink->channel_layout, 0); + avfilter_copy_buffer_ref_props(outref, insamples);//<<--copy pts taps = ((EarwaxContext*)inlink->dst->priv)->taps; out = (int16_t*)outref->data[0]; in = (int16_t*)insamples->data[0]; ... second, I guess we should add packing negotiate code to af_sox filter's query_formats , static int query_formats(AVFilterContext *ctx) { AVFilterFormats *formats = NULL; avfilter_add_format(&formats, AV_SAMPLE_FMT_S32); avfilter_set_common_sample_formats(ctx, formats); avfilter_set_common_channel_layouts(ctx, avfilter_all_channel_layouts()); + avfilter_set_common_packing_formats(ctx, avfilter_all_packing_formats());// << ---- packing negotiation return 0; } otherwise avfilter_graph_config call will fail at static int query_formats(AVFilterGraph *graph, AVClass *log_ctx) { ... else if (link->type == AVMEDIA_TYPE_AUDIO) { if (!link->in_chlayouts || !link->out_chlayouts || !link->in_packing || !link->out_packing) return AVERROR(EINVAL); <<------fail at here if (!avfilter_merge_formats(link->in_formats, link->out_formats) || !avfilter_merge_formats(link->in_chlayouts, link->out_chlayouts) || !avfilter_merge_formats(link->in_packing, link->out_packing)) ...} }}} best regards chinshou -- -- Ticket URL: <https://ffmpeg.org/trac/ffmpeg/ticket/375#comment:6> FFmpeg <http://ffmpeg.org> FFmpeg issue tracker _______________________________________________ FFmpeg-trac mailing list FFmpeg-trac@avcodec.org http://avcodec.org/mailman/listinfo/ffmpeg-trac