ffmpeg: improve built in docs for passing commands
[ffmpeg.git] / ffmpeg_filter.c
index 21b3343..80089ff 100644 (file)
@@ -290,10 +290,6 @@ static int insert_trim(int64_t start_time, int64_t duration,
     if (duration == INT64_MAX && start_time == AV_NOPTS_VALUE)
         return 0;
 
-    // Use with duration and without output starttime is buggy with trim filters
-    if (start_time == AV_NOPTS_VALUE)
-        return 0;
-
     trim = avfilter_get_by_name(name);
     if (!trim) {
         av_log(NULL, AV_LOG_ERROR, "%s filter not present, cannot limit "
@@ -306,11 +302,11 @@ static int insert_trim(int64_t start_time, int64_t duration,
         return AVERROR(ENOMEM);
 
     if (duration != INT64_MAX) {
-        ret = av_opt_set_double(ctx, "duration", (double)duration / 1e6,
+        ret = av_opt_set_int(ctx, "durationi", duration,
                                 AV_OPT_SEARCH_CHILDREN);
     }
     if (ret >= 0 && start_time != AV_NOPTS_VALUE) {
-        ret = av_opt_set_double(ctx, "start", (double)start_time / 1e6,
+        ret = av_opt_set_int(ctx, "starti", start_time,
                                 AV_OPT_SEARCH_CHILDREN);
     }
     if (ret < 0) {
@@ -630,6 +626,11 @@ static int configure_input_video_filter(FilterGraph *fg, InputFilter *ifilter,
     char name[255];
     int ret, pad_idx = 0;
 
+    if (ist->st->codec->codec_type == AVMEDIA_TYPE_AUDIO) {
+        av_log(NULL, AV_LOG_ERROR, "Cannot connect video filter to audio input\n");
+        return AVERROR(EINVAL);
+    }
+
     if (!fr.num)
         fr = av_guess_frame_rate(input_files[ist->file_index]->ctx, ist->st, NULL);
 
@@ -698,7 +699,7 @@ static int configure_input_video_filter(FilterGraph *fg, InputFilter *ifilter,
     snprintf(name, sizeof(name), "trim for input stream %d:%d",
              ist->file_index, ist->st->index);
     ret = insert_trim(((f->start_time == AV_NOPTS_VALUE) || !f->accurate_seek) ?
-                      AV_NOPTS_VALUE : 0, INT64_MAX, &last_filter, &pad_idx, name);
+                      AV_NOPTS_VALUE : 0, f->recording_time, &last_filter, &pad_idx, name);
     if (ret < 0)
         return ret;
 
@@ -718,6 +719,11 @@ static int configure_input_audio_filter(FilterGraph *fg, InputFilter *ifilter,
     char name[255];
     int ret, pad_idx = 0;
 
+    if (ist->st->codec->codec_type != AVMEDIA_TYPE_AUDIO) {
+        av_log(NULL, AV_LOG_ERROR, "Cannot connect audio filter to non audio input\n");
+        return AVERROR(EINVAL);
+    }
+
     av_bprint_init(&args, 0, AV_BPRINT_SIZE_AUTOMATIC);
     av_bprintf(&args, "time_base=%d/%d:sample_rate=%d:sample_fmt=%s",
              1, ist->st->codec->sample_rate,
@@ -795,7 +801,7 @@ static int configure_input_audio_filter(FilterGraph *fg, InputFilter *ifilter,
     snprintf(name, sizeof(name), "trim for input stream %d:%d",
              ist->file_index, ist->st->index);
     ret = insert_trim(((f->start_time == AV_NOPTS_VALUE) || !f->accurate_seek) ?
-                      AV_NOPTS_VALUE : 0, INT64_MAX, &last_filter, &pad_idx, name);
+                      AV_NOPTS_VALUE : 0, f->recording_time, &last_filter, &pad_idx, name);
     if (ret < 0)
         return ret;