mirror of
				https://github.com/nyanmisaka/ffmpeg-rockchip.git
				synced 2025-10-31 20:42:49 +08:00 
			
		
		
		
	avformat/utils: Move av_find_default_stream_index to avformat.c
While it is clearly written with demuxers in mind, it is not forbidden to call it with muxers, hence avformat.c and not demux_utils.c. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
This commit is contained in:
		| @@ -276,6 +276,42 @@ AVProgram *av_find_program_from_stream(AVFormatContext *ic, AVProgram *last, int | ||||
|     return NULL; | ||||
| } | ||||
|  | ||||
| int av_find_default_stream_index(AVFormatContext *s) | ||||
| { | ||||
|     int best_stream = 0; | ||||
|     int best_score = INT_MIN; | ||||
|  | ||||
|     if (s->nb_streams <= 0) | ||||
|         return -1; | ||||
|     for (unsigned i = 0; i < s->nb_streams; i++) { | ||||
|         const AVStream *const st = s->streams[i]; | ||||
|         const FFStream *const sti = cffstream(st); | ||||
|         int score = 0; | ||||
|         if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) { | ||||
|             if (st->disposition & AV_DISPOSITION_ATTACHED_PIC) | ||||
|                 score -= 400; | ||||
|             if (st->codecpar->width && st->codecpar->height) | ||||
|                 score += 50; | ||||
|             score+= 25; | ||||
|         } | ||||
|         if (st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) { | ||||
|             if (st->codecpar->sample_rate) | ||||
|                 score += 50; | ||||
|         } | ||||
|         if (sti->codec_info_nb_frames) | ||||
|             score += 12; | ||||
|  | ||||
|         if (st->discard != AVDISCARD_ALL) | ||||
|             score += 200; | ||||
|  | ||||
|         if (score > best_score) { | ||||
|             best_score = score; | ||||
|             best_stream = i; | ||||
|         } | ||||
|     } | ||||
|     return best_stream; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Matches a stream specifier (but ignores requested index). | ||||
|  * | ||||
|   | ||||
| @@ -181,42 +181,6 @@ int ff_is_intra_only(enum AVCodecID id) | ||||
|     return 1; | ||||
| } | ||||
|  | ||||
| int av_find_default_stream_index(AVFormatContext *s) | ||||
| { | ||||
|     int best_stream = 0; | ||||
|     int best_score = INT_MIN; | ||||
|  | ||||
|     if (s->nb_streams <= 0) | ||||
|         return -1; | ||||
|     for (unsigned i = 0; i < s->nb_streams; i++) { | ||||
|         const AVStream *const st = s->streams[i]; | ||||
|         const FFStream *const sti = cffstream(st); | ||||
|         int score = 0; | ||||
|         if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) { | ||||
|             if (st->disposition & AV_DISPOSITION_ATTACHED_PIC) | ||||
|                 score -= 400; | ||||
|             if (st->codecpar->width && st->codecpar->height) | ||||
|                 score += 50; | ||||
|             score+= 25; | ||||
|         } | ||||
|         if (st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) { | ||||
|             if (st->codecpar->sample_rate) | ||||
|                 score += 50; | ||||
|         } | ||||
|         if (sti->codec_info_nb_frames) | ||||
|             score += 12; | ||||
|  | ||||
|         if (st->discard != AVDISCARD_ALL) | ||||
|             score += 200; | ||||
|  | ||||
|         if (score > best_score) { | ||||
|             best_score = score; | ||||
|             best_stream = i; | ||||
|         } | ||||
|     } | ||||
|     return best_stream; | ||||
| } | ||||
|  | ||||
| /*******************************************************/ | ||||
|  | ||||
| unsigned int ff_codec_get_tag(const AVCodecTag *tags, enum AVCodecID id) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Andreas Rheinhardt
					Andreas Rheinhardt