summaryrefslogtreecommitdiffstats
path: root/libmpdemux/demux_mov.c
diff options
context:
space:
mode:
authorrtognimp <rtognimp@b3059339-0415-0410-9bf9-f77b7e298cf2>2004-08-29 13:52:19 +0000
committerrtognimp <rtognimp@b3059339-0415-0410-9bf9-f77b7e298cf2>2004-08-29 13:52:19 +0000
commitb026fd05ae66ae78379a11efb5e4b5a93195dea1 (patch)
tree70f6fa0f6df5981d9f4752e03c8898814d41d677 /libmpdemux/demux_mov.c
parentf789226f32ce1733a6d0eb3d46b1354b1cbe7e64 (diff)
downloadmpv-b026fd05ae66ae78379a11efb5e4b5a93195dea1.tar.bz2
mpv-b026fd05ae66ae78379a11efb5e4b5a93195dea1.tar.xz
AVC (fourcc avc1) in mp4 support
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@13191 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpdemux/demux_mov.c')
-rw-r--r--libmpdemux/demux_mov.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/libmpdemux/demux_mov.c b/libmpdemux/demux_mov.c
index 4e878cff44..0156fd03e4 100644
--- a/libmpdemux/demux_mov.c
+++ b/libmpdemux/demux_mov.c
@@ -1111,6 +1111,39 @@ static void lschunks(demuxer_t* demuxer,int level,off_t endpos,mov_track_t* trak
mp4_free_esds(&esds); // freeup esds mem
}
break;
+ case MOV_FOURCC('a','v','c','C'):
+ // AVC decoder configuration record
+ mp_msg(MSGT_DEMUX, MSGL_INFO, "MOV: AVC decoder configuration record atom (%d)!\n", atom_len);
+ if(atom_len > 8) {
+ int i, poffs, cnt;
+ // Parse some parts of avcC, just for fun :)
+ // avcC formatting happens in vd_ffmpeg, sps and pps are decoded in lavc
+ mp_msg(MSGT_DEMUX, MSGL_V, "MOV: avcC version: %d\n", *(trak->stdata+pos+8));
+ if (*(trak->stdata+pos+8) != 1)
+ mp_msg(MSGT_DEMUX, MSGL_ERR, "MOV: unknown avcC version (%d). Expexct problems.\n", *(trak->stdata+pos+9));
+ mp_msg(MSGT_DEMUX, MSGL_V, "MOV: avcC profile: %d\n", *(trak->stdata+pos+9));
+ mp_msg(MSGT_DEMUX, MSGL_V, "MOV: avcC profile compatibility: %d\n", *(trak->stdata+pos+10));
+ mp_msg(MSGT_DEMUX, MSGL_V, "MOV: avcC level: %d\n", *(trak->stdata+pos+11));
+ mp_msg(MSGT_DEMUX, MSGL_V, "MOV: avcC nal length size: %d\n", (*(trak->stdata+pos+12))&0x03+1);
+ mp_msg(MSGT_DEMUX, MSGL_V, "MOV: avcC number of sequence param sets: %d\n", cnt = (*(trak->stdata+pos+13) & 0x1f));
+ poffs = pos + 14;
+ for (i = 0; i < cnt; i++) {
+ mp_msg(MSGT_DEMUX, MSGL_V, "MOV: avcC sps %d have length %d\n", i, BE_16(trak->stdata+poffs));
+ poffs += BE_16(trak->stdata+poffs) + 2;
+ }
+ mp_msg(MSGT_DEMUX, MSGL_V, "MOV: avcC number of picture param sets: %d\n", *(trak->stdata+poffs));
+ poffs++;
+ for (i = 0; i < cnt; i++) {
+ mp_msg(MSGT_DEMUX, MSGL_V, "MOV: avcC pps %d have length %d\n", i, BE_16(trak->stdata+poffs));
+ poffs += BE_16(trak->stdata+poffs) + 2;
+ }
+ // Copy avcC for the AVC decoder
+ // This data will be sent to decoder with first frame, before frame data
+ trak->stream_header_len = atom_len-8;
+ trak->stream_header = (unsigned char *)malloc(trak->stream_header_len);
+ memcpy(trak->stream_header, trak->stdata+pos+8, trak->stream_header_len);
+ }
+ break;
case 0:
break;
default: