[FFmpeg-trac] #375(avfilter:new): earwax audio filter generates wrong pts and af_sox filter can not be applied.
FFmpeg
trac at avcodec.org
Tue Jan 1 05:43:53 CET 2013
#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
More information about the FFmpeg-trac
mailing list