summaryrefslogtreecommitdiff
path: root/libavformat/mov.c
diff options
context:
space:
mode:
authorLuca Barbato <lu_zero@gentoo.org>2013-08-22 15:00:46 +0200
committerLuca Barbato <lu_zero@gentoo.org>2013-08-24 17:02:23 +0200
commitbf9856250584228678963ce8f11c54f85005d783 (patch)
treeb1beef8708a17345498d713e90d7f1d77804e68e /libavformat/mov.c
parentff9d57e7dfc8c171bea3fb9129aa87fa28d89f18 (diff)
mov: Refactor codec id selection in mov_codec_id
Diffstat (limited to 'libavformat/mov.c')
-rw-r--r--libavformat/mov.c52
1 files changed, 32 insertions, 20 deletions
diff --git a/libavformat/mov.c b/libavformat/mov.c
index c036b21fd3..16dab92448 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -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);
}
+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)
{
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->dref_id= dref_id;
- st->codec->codec_tag = 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;
- }
- }
+ id = mov_codec_id(st, format);
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,