mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
mov: Refactor codec id selection in mov_codec_id
This commit is contained in:
parent
ff9d57e7df
commit
bf98562505
@ -1069,6 +1069,37 @@ enum AVCodecID ff_mov_get_lpcm_codec_id(int bps, int flags)
|
|||||||
return ff_get_pcm_codec_id(bps, flags & 1, flags & 2, flags & 4 ? -1 : 0);
|
return ff_get_pcm_codec_id(bps, flags & 1, flags & 2, flags & 4 ? -1 : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int mov_codec_id(AVStream *st, uint32_t format)
|
||||||
|
{
|
||||||
|
int id = ff_codec_get_id(ff_codec_movaudio_tags, format);
|
||||||
|
|
||||||
|
if (id <= 0 &&
|
||||||
|
((format & 0xFFFF) == 'm' + ('s' << 8) ||
|
||||||
|
(format & 0xFFFF) == 'T' + ('S' << 8)))
|
||||||
|
id = ff_codec_get_id(ff_codec_wav_tags, av_bswap32(format) & 0xFFFF);
|
||||||
|
|
||||||
|
if (st->codec->codec_type != AVMEDIA_TYPE_VIDEO && id > 0) {
|
||||||
|
st->codec->codec_type = AVMEDIA_TYPE_AUDIO;
|
||||||
|
} else if (st->codec->codec_type != AVMEDIA_TYPE_AUDIO &&
|
||||||
|
/* skip old asf mpeg4 tag */
|
||||||
|
format && format != MKTAG('m','p','4','s')) {
|
||||||
|
id = ff_codec_get_id(ff_codec_movvideo_tags, format);
|
||||||
|
if (id <= 0)
|
||||||
|
id = ff_codec_get_id(ff_codec_bmp_tags, format);
|
||||||
|
if (id > 0)
|
||||||
|
st->codec->codec_type = AVMEDIA_TYPE_VIDEO;
|
||||||
|
else if (st->codec->codec_type == AVMEDIA_TYPE_DATA) {
|
||||||
|
id = ff_codec_get_id(ff_codec_movsubtitle_tags, format);
|
||||||
|
if (id > 0)
|
||||||
|
st->codec->codec_type = AVMEDIA_TYPE_SUBTITLE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
st->codec->codec_tag = format;
|
||||||
|
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
int ff_mov_read_stsd_entries(MOVContext *c, AVIOContext *pb, int entries)
|
int ff_mov_read_stsd_entries(MOVContext *c, AVIOContext *pb, int entries)
|
||||||
{
|
{
|
||||||
AVStream *st;
|
AVStream *st;
|
||||||
@ -1119,26 +1150,7 @@ int ff_mov_read_stsd_entries(MOVContext *c, AVIOContext *pb, int entries)
|
|||||||
sc->pseudo_stream_id = st->codec->codec_tag ? -1 : pseudo_stream_id;
|
sc->pseudo_stream_id = st->codec->codec_tag ? -1 : pseudo_stream_id;
|
||||||
sc->dref_id= dref_id;
|
sc->dref_id= dref_id;
|
||||||
|
|
||||||
st->codec->codec_tag = format;
|
id = mov_codec_id(st, format);
|
||||||
id = ff_codec_get_id(ff_codec_movaudio_tags, format);
|
|
||||||
if (id<=0 && ((format&0xFFFF) == 'm'+('s'<<8) || (format&0xFFFF) == 'T'+('S'<<8)))
|
|
||||||
id = ff_codec_get_id(ff_codec_wav_tags, av_bswap32(format)&0xFFFF);
|
|
||||||
|
|
||||||
if (st->codec->codec_type != AVMEDIA_TYPE_VIDEO && id > 0) {
|
|
||||||
st->codec->codec_type = AVMEDIA_TYPE_AUDIO;
|
|
||||||
} else if (st->codec->codec_type != AVMEDIA_TYPE_AUDIO && /* do not overwrite codec type */
|
|
||||||
format && format != MKTAG('m','p','4','s')) { /* skip old asf mpeg4 tag */
|
|
||||||
id = ff_codec_get_id(ff_codec_movvideo_tags, format);
|
|
||||||
if (id <= 0)
|
|
||||||
id = ff_codec_get_id(ff_codec_bmp_tags, format);
|
|
||||||
if (id > 0)
|
|
||||||
st->codec->codec_type = AVMEDIA_TYPE_VIDEO;
|
|
||||||
else if (st->codec->codec_type == AVMEDIA_TYPE_DATA){
|
|
||||||
id = ff_codec_get_id(ff_codec_movsubtitle_tags, format);
|
|
||||||
if (id > 0)
|
|
||||||
st->codec->codec_type = AVMEDIA_TYPE_SUBTITLE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
av_dlog(c->fc, "size=%d 4CC= %c%c%c%c codec_type=%d\n", size,
|
av_dlog(c->fc, "size=%d 4CC= %c%c%c%c codec_type=%d\n", size,
|
||||||
(format >> 0) & 0xff, (format >> 8) & 0xff, (format >> 16) & 0xff,
|
(format >> 0) & 0xff, (format >> 8) & 0xff, (format >> 16) & 0xff,
|
||||||
|
Loading…
Reference in New Issue
Block a user