avformat/util: change av_find_default_stream_index() to use a score based system
Disfavor video streams with unknown resolution and no packets Fixes seeking in audio-only-speex.flv Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
		
							parent
							
								
									e8c003edd2
								
							
						
					
					
						commit
						4e855c11b5
					
				| @ -1531,23 +1531,36 @@ static void flush_packet_queue(AVFormatContext *s) | ||||
| 
 | ||||
| int av_find_default_stream_index(AVFormatContext *s) | ||||
| { | ||||
|     int first_audio_index = -1; | ||||
|     int i; | ||||
|     AVStream *st; | ||||
|     int best_stream = 0; | ||||
|     int best_score = -1; | ||||
| 
 | ||||
|     if (s->nb_streams <= 0) | ||||
|         return -1; | ||||
|     for (i = 0; i < s->nb_streams; i++) { | ||||
|         int score = 0; | ||||
|         st = s->streams[i]; | ||||
|         if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO && | ||||
|             !(st->disposition & AV_DISPOSITION_ATTACHED_PIC)) { | ||||
|             return i; | ||||
|             if (!st->codec->width && !st->codec->height && !st->codec_info_nb_frames) | ||||
|                 score += 25; | ||||
|             else | ||||
|                 score += 100; | ||||
|         } | ||||
|         if (st->codec->codec_type == AVMEDIA_TYPE_AUDIO) { | ||||
|             if (!st->codec->sample_rate && !st->codec_info_nb_frames) | ||||
|                 score += 12; | ||||
|             else | ||||
|                 score += 50; | ||||
|         } | ||||
| 
 | ||||
|         if (score > best_score) { | ||||
|             best_score = score; | ||||
|             best_stream = i; | ||||
|         } | ||||
|         if (first_audio_index < 0 && | ||||
|             st->codec->codec_type == AVMEDIA_TYPE_AUDIO) | ||||
|             first_audio_index = i; | ||||
|     } | ||||
|     return first_audio_index >= 0 ? first_audio_index : 0; | ||||
|     return best_stream; | ||||
| } | ||||
| 
 | ||||
| /** Flush the frame reader. */ | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user