Mercurial > mplayer.hg
changeset 23270:f094c9256137
Avoid code duplication in mkv demuxer for standard fourcc/extradata handling
author | reimar |
---|---|
date | Thu, 10 May 2007 13:58:57 +0000 |
parents | 6606c4f5c78c |
children | 85ad4dd0e439 |
files | libmpdemux/demux_mkv.c |
diffstat | 1 files changed, 23 insertions(+), 29 deletions(-) [+] |
line wrap: on
line diff
--- a/libmpdemux/demux_mkv.c Thu May 10 11:43:39 2007 +0000 +++ b/libmpdemux/demux_mkv.c Thu May 10 13:58:57 2007 +0000 @@ -1798,6 +1798,22 @@ } } +typedef struct { + char *id; + int fourcc; + int extradata; +} videocodec_info_t; + +static const videocodec_info_t vinfo[] = { + { MKV_V_MPEG1, mmioFOURCC('m', 'p', 'g', '1'), 0 }, + { MKV_V_MPEG2, mmioFOURCC('m', 'p', 'g', '2'), 0 }, + { MKV_V_MPEG4_SP, mmioFOURCC('m', 'p', '4', 'v'), 1 }, + { MKV_V_MPEG4_ASP, mmioFOURCC('m', 'p', '4', 'v'), 1 }, + { MKV_V_MPEG4_AP, mmioFOURCC('m', 'p', '4', 'v'), 1 }, + { MKV_V_MPEG4_AVC, mmioFOURCC('a', 'v', 'c', '1'), 1 }, + { NULL, 0, 0 } +}; + static int demux_mkv_open_video (demuxer_t *demuxer, mkv_track_t *track, int vid) { @@ -1902,46 +1918,24 @@ #endif /* USE_QTX_CODECS */ } - else if (!strcmp(track->codec_id, MKV_V_MPEG1)) - { - bih->biCompression = mmioFOURCC('m', 'p', 'g', '1'); - track->reorder_timecodes = !correct_pts; - } - else if (!strcmp(track->codec_id, MKV_V_MPEG2)) + else { - bih->biCompression = mmioFOURCC('m', 'p', 'g', '2'); - track->reorder_timecodes = !correct_pts; - } - else if (!strcmp(track->codec_id, MKV_V_MPEG4_SP) || - !strcmp(track->codec_id, MKV_V_MPEG4_ASP) || - !strcmp(track->codec_id, MKV_V_MPEG4_AP)) - { - bih->biCompression = mmioFOURCC('m', 'p', '4', 'v'); - if (track->private_data && (track->private_size > 0)) + const videocodec_info_t *vi = vinfo; + while (vi->id && strcmp(vi->id, track->codec_id)) vi++; + bih->biCompression = vi->fourcc; + if (vi->extradata && track->private_data && (track->private_size > 0)) { bih->biSize += track->private_size; bih = realloc (bih, bih->biSize); memcpy (bih + 1, track->private_data, track->private_size); } track->reorder_timecodes = !correct_pts; - } - else if (!strcmp(track->codec_id, MKV_V_MPEG4_AVC)) - { - bih->biCompression = mmioFOURCC('a', 'v', 'c', '1'); - if (track->private_data && (track->private_size > 0)) - { - bih->biSize += track->private_size; - bih = realloc (bih, bih->biSize); - memcpy (bih + 1, track->private_data, track->private_size); - } - track->reorder_timecodes = !correct_pts; - } - else - { + if (!vi->id) { mp_msg (MSGT_DEMUX,MSGL_WARN, MSGTR_MPDEMUX_MKV_UnknownCodecID, track->codec_id, track->tnum); free(bih); return 1; + } } }