changeset 14326:9261d7dcf5e7

Use lavcresample only when libavcodec is compiled in.
author reimar
date Mon, 03 Jan 2005 14:05:38 +0000
parents 000250ff9516
children 54e42c7eb713
files libaf/af.c
diffstat 1 files changed, 21 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/libaf/af.c	Mon Jan 03 13:56:48 2005 +0000
+++ b/libaf/af.c	Mon Jan 03 14:05:38 2005 +0000
@@ -380,21 +380,27 @@
     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 @@
       // 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;
     }