From 8f3e5a996cd6b314efb947441d816040171cd0ab Mon Sep 17 00:00:00 2001 From: reimar Date: Mon, 3 Jan 2005 14:05:38 +0000 Subject: [PATCH] Use lavcresample only when libavcodec is compiled in. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@14327 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libaf/af.c | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/libaf/af.c b/libaf/af.c index 79b44fcba9..05f271f668 100644 --- a/libaf/af.c +++ b/libaf/af.c @@ -380,21 +380,27 @@ int af_init(af_stream_t* s, int force_output) af_instance_t* af = NULL; // New filter // Check output frequency if not OK fix with resample if(s->last->data->rate!=s->output.rate){ - if(NULL==(af=af_get(s,"lavcresample")) && - NULL==(af=af_get(s,"resample"))){ + // try to find a filter that can change samplrate + af = af_control_any_rev(s, AF_CONTROL_RESAMPLE_RATE | AF_CONTROL_SET, + &(s->output.rate)); + if (!af) { + char *resampler = "resample"; +#ifdef USE_LIBAVCODEC + if ((AF_INIT_TYPE_MASK & s->cfg.force) == AF_INIT_SLOW) + resampler = "lavcresample"; +#endif if((AF_INIT_TYPE_MASK & s->cfg.force) == AF_INIT_SLOW){ if(!strcmp(s->first->info->name,"format")) - af = af_append(s,s->first,"lavcresample"); + af = af_append(s,s->first,resampler); else - af = af_prepend(s,s->first,"lavcresample"); + af = af_prepend(s,s->first,resampler); } else{ if(!strcmp(s->last->info->name,"format")) - af = af_prepend(s,s->last,"resample"); + af = af_prepend(s,s->last,resampler); else - af = af_append(s,s->last,"resample"); + af = af_append(s,s->last,resampler); } - } // Init the new filter if(!af || (AF_OK != af->control(af,AF_CONTROL_RESAMPLE_RATE, &(s->output.rate)))) @@ -402,9 +408,16 @@ int af_init(af_stream_t* s, int force_output) // Use lin int if the user wants fast if ((AF_INIT_TYPE_MASK & s->cfg.force) == AF_INIT_FAST) { char args[32]; - sprintf(args, "%d:0:0", s->output.rate); + sprintf(args, "%d", s->output.rate); +#ifdef USE_LIBAVCODEC + if (strcmp(resampler, "lavcresample") == 0) + strcat(args, ":1"); + else +#endif + strcat(args, ":0:0"); af->control(af, AF_CONTROL_COMMAND_LINE, args); } + } if(AF_OK != af_reinit(s,af)) return -1; }