Opened 13 years ago
Closed 12 years ago
#375 closed defect (fixed)
earwax audio filter generates wrong pts and af_sox filter can not be applied.
Reported by: | chinshou | Owned by: | |
---|---|---|---|
Priority: | normal | Component: | avfilter |
Version: | git-master | Keywords: | earwax |
Cc: | Blocked By: | ||
Blocking: | Reproduced by developer: | no | |
Analyzed by developer: | no |
Description (last modified by )
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
Change History (7)
comment:2 by , 13 years ago
another problem
in af_sox.c uninit will segfault when called, we should change it
static av_cold void uninit(AVFilterContext *ctx)
{
sox_effect_t *effect = ((SoxContext*)ctx->priv)->effect;
sox_delete_effect(effect);
sox_quit();
av_free(effect->in_encoding);
}
to
static av_cold void uninit(AVFilterContext *ctx)
{
sox_effect_t *effect = ((SoxContext*)ctx->priv)->effect;
av_free(effect->in_encoding);
sox_delete_effect(effect);
sox_quit();
}
comment:3 by , 13 years ago
The packing negotiation is a new addition and it wasn't added to sox and earwax filter yet, ditto for the 'fail on missing negotiation data' behaviour, which might be changed...
copy_props and filter inputs/outputs will be fixed, thanks for the report!
follow-up: 5 comment:4 by , 12 years ago
A long time has passed, earwax is now in git master, is anything from this ticket still relevant or can it be closed ?
comment:5 by , 12 years ago
Replying to michael:
A long time has passed, earwax is now in git master, is anything from this ticket still relevant or can it be closed ?
Hello,
Please close this problem. The current earwax is ok.
best regards
comment:6 by , 12 years ago
Description: | modified (diff) |
---|
comment:7 by , 12 years ago
Keywords: | earwax added |
---|---|
Resolution: | → fixed |
Status: | new → closed |
Version: | unspecified → git-master |
Besides above problems,
in ffmpeg.c configure_audio_filters function should change inputs context from ost->input_audio_filter to last_filter like following.
static int configure_audio_filters(InputStream *ist, OutputStream *ost)
{
...
+ *outputs = (AVFilterInOut){ av_strdup("in" ), last_filter, 0, NULL }; <<--add this line
...
}
regards