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 },