[FFmpeg-cvslog] r22008 - trunk/ffplay.c

michael subversion
Tue Feb 23 18:35:44 CET 2010


Author: michael
Date: Tue Feb 23 18:35:44 2010
New Revision: 22008

Log:
Also favor streams with more packets in ffplay.

Modified:
   trunk/ffplay.c

Modified: trunk/ffplay.c
==============================================================================
--- trunk/ffplay.c	Tue Feb 23 18:09:53 2010	(r22007)
+++ trunk/ffplay.c	Tue Feb 23 18:35:44 2010	(r22008)
@@ -209,8 +209,8 @@ static enum PixelFormat frame_pix_fmt = 
 static int audio_disable;
 static int video_disable;
 static int wanted_stream[CODEC_TYPE_NB]={
-    [CODEC_TYPE_AUDIO]=0,
-    [CODEC_TYPE_VIDEO]=0,
+    [CODEC_TYPE_AUDIO]=-1,
+    [CODEC_TYPE_VIDEO]=-1,
     [CODEC_TYPE_SUBTITLE]=-1,
 };
 static int seek_by_bytes=-1;
@@ -1981,6 +1981,7 @@ static int decode_thread(void *arg)
     int err, i, ret;
     int st_index[CODEC_TYPE_NB];
     int st_count[CODEC_TYPE_NB]={0};
+    int st_best_packet_count[CODEC_TYPE_NB];
     AVPacket pkt1, *pkt = &pkt1;
     AVFormatParameters params, *ap = ¶ms;
     int eof=0;
@@ -1988,6 +1989,7 @@ static int decode_thread(void *arg)
     ic = avformat_alloc_context();
 
     memset(st_index, -1, sizeof(st_index));
+    memset(st_best_packet_count, -1, sizeof(st_best_packet_count));
     is->video_stream = -1;
     is->audio_stream = -1;
     is->subtitle_stream = -1;
@@ -2044,13 +2046,18 @@ static int decode_thread(void *arg)
     }
 
     for(i = 0; i < ic->nb_streams; i++) {
-        AVCodecContext *avctx = ic->streams[i]->codec;
+        AVStream *st= ic->streams[i];
+        AVCodecContext *avctx = st->codec;
         ic->streams[i]->discard = AVDISCARD_ALL;
         if(avctx->codec_type >= (unsigned)CODEC_TYPE_NB)
             exit(1);
         if(st_count[avctx->codec_type]++ != wanted_stream[avctx->codec_type] && wanted_stream[avctx->codec_type] >= 0)
             continue;
 
+        if(st_best_packet_count[avctx->codec_type] >= st->codec_info_nb_frames)
+            continue;
+        st_best_packet_count[avctx->codec_type]= st->codec_info_nb_frames;
+
         switch(avctx->codec_type) {
         case CODEC_TYPE_AUDIO:
             if (!audio_disable)



More information about the ffmpeg-cvslog mailing list