]> rtime.felk.cvut.cz Git - frescor/ffmpeg.git/commitdiff
If a demuxer returns EAGAIN, try another demuxer.
authormichael <michael@9553f0bf-9b14-0410-a0b8-cfaf0461ba5b>
Tue, 3 Mar 2009 19:50:04 +0000 (19:50 +0000)
committermichael <michael@9553f0bf-9b14-0410-a0b8-cfaf0461ba5b>
Tue, 3 Mar 2009 19:50:04 +0000 (19:50 +0000)
git-svn-id: file:///var/local/repositories/ffmpeg/trunk@17782 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b

ffmpeg.c

index 5181d614f99b302b0f41c4a608ea066ab720106e..a78c8c6a7610c95a51c79960117cb969cf919765 100644 (file)
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -1553,6 +1553,8 @@ static int av_encode(AVFormatContext **output_files,
     AVInputFile *file_table;
     int key;
     int want_sdp = 1;
+    uint8_t no_packet[MAX_FILES]={0};
+    int no_packet_count=0;
 
     file_table= av_mallocz(nb_input_files * sizeof(AVInputFile));
     if (!file_table)
@@ -2057,6 +2059,8 @@ static int av_encode(AVFormatContext **output_files,
             ost = ost_table[i];
             os = output_files[ost->file_index];
             ist = ist_table[ost->source_index];
+            if(no_packet[ist->file_index])
+                continue;
             if(ost->st->codec->codec_type == CODEC_TYPE_VIDEO)
                 opts = ost->sync_opts * av_q2d(ost->st->codec->time_base);
             else
@@ -2079,6 +2083,11 @@ static int av_encode(AVFormatContext **output_files,
         }
         /* if none, if is finished */
         if (file_index < 0) {
+            if(no_packet_count){
+                no_packet_count=0;
+                memset(no_packet, 0, sizeof(no_packet));
+                continue;
+            }
             break;
         }
 
@@ -2093,8 +2102,11 @@ static int av_encode(AVFormatContext **output_files,
         /* read a frame from it and output it in the fifo */
         is = input_files[file_index];
         ret= av_read_frame(is, &pkt);
-        if(ret == AVERROR(EAGAIN) && strcmp(is->iformat->name, "ffm"))
+        if(ret == AVERROR(EAGAIN) && strcmp(is->iformat->name, "ffm")){
+            no_packet[file_index]=1;
+            no_packet_count++;
             continue;
+        }
         if (ret < 0) {
             file_table[file_index].eof_reached = 1;
             if (opt_shortest)
@@ -2103,6 +2115,9 @@ static int av_encode(AVFormatContext **output_files,
                 continue;
         }
 
+        no_packet_count=0;
+        memset(no_packet, 0, sizeof(no_packet));
+
         if (do_pkt_dump) {
             av_pkt_dump_log(NULL, AV_LOG_DEBUG, &pkt, do_hex_dump);
         }