Mercurial > libavformat.hg
comparison mov.c @ 865:1646098f8e26 libavformat
QDM2 compatible decoder
author | rtognimp |
---|---|
date | Tue, 18 Oct 2005 20:16:43 +0000 |
parents | 27c765023958 |
children | 91dcb9da9be6 |
comparison
equal
deleted
inserted
replaced
864:00a3ba030166 | 865:1646098f8e26 |
---|---|
143 /* The standard for mpeg4 audio is still not normalised AFAIK anyway */ | 143 /* The standard for mpeg4 audio is still not normalised AFAIK anyway */ |
144 { CODEC_ID_AMR_NB, MKTAG('s', 'a', 'm', 'r') }, /* AMR-NB 3gp */ | 144 { CODEC_ID_AMR_NB, MKTAG('s', 'a', 'm', 'r') }, /* AMR-NB 3gp */ |
145 { CODEC_ID_AMR_WB, MKTAG('s', 'a', 'w', 'b') }, /* AMR-WB 3gp */ | 145 { CODEC_ID_AMR_WB, MKTAG('s', 'a', 'w', 'b') }, /* AMR-WB 3gp */ |
146 { CODEC_ID_AC3, MKTAG('m', 's', 0x20, 0x00) }, /* Dolby AC-3 */ | 146 { CODEC_ID_AC3, MKTAG('m', 's', 0x20, 0x00) }, /* Dolby AC-3 */ |
147 { CODEC_ID_ALAC,MKTAG('a', 'l', 'a', 'c') }, /* Apple Lossless */ | 147 { CODEC_ID_ALAC,MKTAG('a', 'l', 'a', 'c') }, /* Apple Lossless */ |
148 { CODEC_ID_QDM2,MKTAG('Q', 'D', 'M', '2') }, /* QDM2 */ | |
148 { CODEC_ID_NONE, 0 }, | 149 { CODEC_ID_NONE, 0 }, |
149 }; | 150 }; |
150 | 151 |
151 /* the QuickTime file format is quite convoluted... | 152 /* the QuickTime file format is quite convoluted... |
152 * it has lots of index tables, each indexing something in another one... | 153 * it has lots of index tables, each indexing something in another one... |
701 | 702 |
702 if (st->codec->extradata) { | 703 if (st->codec->extradata) { |
703 strcpy(st->codec->extradata, "SVQ3"); // fake | 704 strcpy(st->codec->extradata, "SVQ3"); // fake |
704 get_buffer(pb, st->codec->extradata + 0x5a, atom.size); | 705 get_buffer(pb, st->codec->extradata + 0x5a, atom.size); |
705 //av_log(NULL, AV_LOG_DEBUG, "Reading SMI %Ld %s\n", atom.size, (char*)st->codec->extradata + 0x5a); | 706 //av_log(NULL, AV_LOG_DEBUG, "Reading SMI %Ld %s\n", atom.size, (char*)st->codec->extradata + 0x5a); |
707 } else | |
708 url_fskip(pb, atom.size); | |
709 | |
710 return 0; | |
711 } | |
712 | |
713 static int mov_read_wave(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom) | |
714 { | |
715 AVStream *st = c->fc->streams[c->fc->nb_streams-1]; | |
716 | |
717 if((uint64_t)atom.size > (1<<30)) | |
718 return -1; | |
719 | |
720 // pass all frma atom to codec, needed at least for QDM2 | |
721 av_free(st->codec->extradata); | |
722 st->codec->extradata_size = atom.size; | |
723 st->codec->extradata = (uint8_t*) av_mallocz(st->codec->extradata_size + FF_INPUT_BUFFER_PADDING_SIZE); | |
724 | |
725 if (st->codec->extradata) { | |
726 get_buffer(pb, st->codec->extradata, atom.size); | |
727 //av_log(NULL, AV_LOG_DEBUG, "Reading frma %Ld %s\n", atom.size, (char*)st->codec->extradata); | |
706 } else | 728 } else |
707 url_fskip(pb, atom.size); | 729 url_fskip(pb, atom.size); |
708 | 730 |
709 return 0; | 731 return 0; |
710 } | 732 } |
1603 { MKTAG( 'u', 'd', 't', 'a' ), mov_read_leaf }, | 1625 { MKTAG( 'u', 'd', 't', 'a' ), mov_read_leaf }, |
1604 { MKTAG( 'u', 'r', 'l', ' ' ), mov_read_leaf }, | 1626 { MKTAG( 'u', 'r', 'l', ' ' ), mov_read_leaf }, |
1605 { MKTAG( 'u', 'r', 'n', ' ' ), mov_read_leaf }, | 1627 { MKTAG( 'u', 'r', 'n', ' ' ), mov_read_leaf }, |
1606 { MKTAG( 'u', 'u', 'i', 'd' ), mov_read_leaf }, | 1628 { MKTAG( 'u', 'u', 'i', 'd' ), mov_read_leaf }, |
1607 { MKTAG( 'v', 'm', 'h', 'd' ), mov_read_leaf }, /* video media info header */ | 1629 { MKTAG( 'v', 'm', 'h', 'd' ), mov_read_leaf }, /* video media info header */ |
1608 { MKTAG( 'w', 'a', 'v', 'e' ), mov_read_default }, | 1630 { MKTAG( 'w', 'a', 'v', 'e' ), mov_read_wave }, |
1609 /* extra mp4 */ | 1631 /* extra mp4 */ |
1610 { MKTAG( 'M', 'D', 'E', 'S' ), mov_read_leaf }, | 1632 { MKTAG( 'M', 'D', 'E', 'S' ), mov_read_leaf }, |
1611 /* QT atoms */ | 1633 /* QT atoms */ |
1612 { MKTAG( 'c', 'h', 'a', 'p' ), mov_read_leaf }, | 1634 { MKTAG( 'c', 'h', 'a', 'p' ), mov_read_leaf }, |
1613 { MKTAG( 'c', 'l', 'i', 'p' ), mov_read_default }, | 1635 { MKTAG( 'c', 'l', 'i', 'p' ), mov_read_default }, |