Mercurial > mplayer.hg
changeset 6374:b2d5aeb72f95
export subpacket-size and matrix w*h to the codec (cook)
author | arpi |
---|---|
date | Mon, 10 Jun 2002 13:55:56 +0000 |
parents | 8d5d339f2944 |
children | e53ba3e39863 |
files | libmpdemux/demux_real.c |
diffstat | 1 files changed, 28 insertions(+), 18 deletions(-) [+] |
line wrap: on
line diff
--- a/libmpdemux/demux_real.c Mon Jun 10 13:55:18 2002 +0000 +++ b/libmpdemux/demux_real.c Mon Jun 10 13:55:56 2002 +0000 @@ -8,6 +8,9 @@ TODO: fix the whole syncing mechanism $Log$ + Revision 1.15 2002/06/10 13:55:56 arpi + export subpacket-size and matrix w*h to the codec (cook) + Revision 1.14 2002/06/10 02:27:31 arpi export extra data for cook codec, some debug stuff @@ -771,7 +774,7 @@ tmp = stream_read_dword(demuxer->stream); -//#define stream_skip(st,siz) { int i; for(i=0;i<siz;i++) mp_msg(MSGT_DEMUX,MSGL_V," %02X",stream_read_char(st)); mp_msg(MSGT_DEMUX,MSGL_V,"\n");} +#define stream_skip(st,siz) { int i; for(i=0;i<siz;i++) mp_msg(MSGT_DEMUX,MSGL_V," %02X",stream_read_char(st)); mp_msg(MSGT_DEMUX,MSGL_V,"\n");} if (tmp == MKTAG(0xfd, 'a', 'r', '.')) { @@ -779,6 +782,8 @@ sh_audio_t *sh = new_sh_audio(demuxer, stream_id); char buf[128]; /* for codec name */ int frame_size; + int sub_packet_size; + int sub_packet_h; int version; int flavor; @@ -786,21 +791,24 @@ version = stream_read_word(demuxer->stream); mp_msg(MSGT_DEMUX,MSGL_V,"version: %d\n", version); // stream_skip(demuxer->stream, 2); /* version (4 or 5) */ - stream_skip(demuxer->stream, 2); + stream_skip(demuxer->stream, 2); // 00 00 stream_skip(demuxer->stream, 4); /* .ra4 or .ra5 */ - stream_skip(demuxer->stream, 4); + stream_skip(demuxer->stream, 4); // ??? stream_skip(demuxer->stream, 2); /* version (4 or 5) */ - stream_skip(demuxer->stream, 4); /* header size */ + stream_skip(demuxer->stream, 4); // header size == 0x4E flavor = stream_read_word(demuxer->stream);/* codec flavor id */ stream_skip(demuxer->stream, 4); /* coded frame size */ stream_skip(demuxer->stream, 4); // big number stream_skip(demuxer->stream, 4); // bigger number - stream_skip(demuxer->stream, 4); // 2 - stream_skip(demuxer->stream, 2); // 10 + stream_skip(demuxer->stream, 4); // 2 || -''- +// stream_skip(demuxer->stream, 2); // 0x10 + sub_packet_h = stream_read_word(demuxer->stream); // stream_skip(demuxer->stream, 2); /* coded frame size */ frame_size = stream_read_word(demuxer->stream); mp_msg(MSGT_DEMUX,MSGL_V,"frame_size: %d\n", frame_size); - stream_skip(demuxer->stream, 4); // 60,0 + sub_packet_size = stream_read_word(demuxer->stream); + mp_msg(MSGT_DEMUX,MSGL_V,"sub_packet_size: %d\n", sub_packet_size); + stream_skip(demuxer->stream, 2); // 0 if (version == 5) stream_skip(demuxer->stream, 6); //0,srate,0 @@ -835,9 +843,10 @@ sh->wf->nAvgBytesPerSec = bitrate; sh->wf->nBlockAlign = frame_size; sh->wf->cbSize = 0; + sh->format = MKTAG(buf[0], buf[1], buf[2], buf[3]); tmp = 1; /* supported audio codec */ - switch (MKTAG(buf[0], buf[1], buf[2], buf[3])) + switch (sh->format) { case MKTAG('d', 'n', 'e', 't'): mp_msg(MSGT_DEMUX,MSGL_V,"Audio: DNET -> AC3\n"); @@ -847,12 +856,12 @@ mp_msg(MSGT_DEMUX,MSGL_V,"Audio: SiproLab's ACELP.net\n"); sh->format = 0x130; /* for buggy directshow loader */ - sh->wf = realloc(sh->wf, 18+4); + sh->wf->cbSize = 4; + sh->wf = realloc(sh->wf, sizeof(WAVEFORMATEX)+sh->wf->cbSize); sh->wf->wBitsPerSample = 0; sh->wf->nAvgBytesPerSec = 1055; sh->wf->nBlockAlign = 19; // sh->wf->nBlockAlign = frame_size / 288; - sh->wf->cbSize = 4; buf[0] = 30; buf[1] = 1; buf[2] = 1; @@ -865,26 +874,27 @@ break; case MKTAG('c', 'o', 'o', 'k'): mp_msg(MSGT_DEMUX,MSGL_V,"Audio: Real's GeneralCooker (?) (RealAudio G2?) (unsupported)\n"); - sh->wf = realloc(sh->wf, sizeof(WAVEFORMATEX)+2+24); - *((short*)(sh->wf+1))=flavor; - stream_read(demuxer->stream, ((char*)(sh->wf+1))+2, 24); // extras -// tmp = 0; + sh->wf->cbSize = 4+2+24; + sh->wf = realloc(sh->wf, sizeof(WAVEFORMATEX)+sh->wf->cbSize); + ((short*)(sh->wf+1))[0]=sub_packet_size; + ((short*)(sh->wf+1))[1]=sub_packet_h; + ((short*)(sh->wf+1))[2]=flavor; + stream_read(demuxer->stream, ((char*)(sh->wf+1))+6, 24); // extras break; case MKTAG('a', 't', 'r', 'c'): mp_msg(MSGT_DEMUX,MSGL_V,"Audio: Sony ATRAC3 (RealAudio 8) (unsupported)\n"); sh->format = 0x270; + /* 14 bytes extra header needed ! */ + sh->wf->cbSize = 14; + sh->wf = realloc(sh->wf, sizeof(WAVEFORMATEX)+sh->wf->cbSize); sh->wf->nAvgBytesPerSec = 16537; // 8268 sh->wf->nBlockAlign = 384; // 192 sh->wf->wBitsPerSample = 0; /* from AVI created by VirtualDub */ - /* 14 bytes extra header needed ! */ - sh->wf->cbSize = 14; - sh->wf = realloc(sh->wf, 18+sh->wf->cbSize); break; default: mp_msg(MSGT_DEMUX,MSGL_V,"Audio: Unknown (%s)\n", buf); tmp = 0; - sh->format = MKTAG(buf[0], buf[1], buf[2], buf[3]); } sh->wf->wFormatTag = sh->format;