comparison mov.c @ 615:adc5295cd0a2 libavformat

load the 'avcC' atom needed for 'avc1' decoding
author melanson
date Thu, 09 Dec 2004 19:44:55 +0000
parents fe24632a577b
children 0b52743104ac
comparison
equal deleted inserted replaced
614:cbcb3ae970c8 615:adc5295cd0a2
114 { CODEC_ID_CINEPAK, MKTAG('c', 'v', 'i', 'd') }, /* Cinepak */ 114 { CODEC_ID_CINEPAK, MKTAG('c', 'v', 'i', 'd') }, /* Cinepak */
115 { CODEC_ID_8BPS, MKTAG('8', 'B', 'P', 'S') }, /* Planar RGB (8BPS) */ 115 { CODEC_ID_8BPS, MKTAG('8', 'B', 'P', 'S') }, /* Planar RGB (8BPS) */
116 { CODEC_ID_SMC, MKTAG('s', 'm', 'c', ' ') }, /* Apple Graphics (SMC) */ 116 { CODEC_ID_SMC, MKTAG('s', 'm', 'c', ' ') }, /* Apple Graphics (SMC) */
117 { CODEC_ID_QTRLE, MKTAG('r', 'l', 'e', ' ') }, /* Apple Animation (RLE) */ 117 { CODEC_ID_QTRLE, MKTAG('r', 'l', 'e', ' ') }, /* Apple Animation (RLE) */
118 { CODEC_ID_QDRAW, MKTAG('q', 'd', 'r', 'w') }, /* QuickDraw */ 118 { CODEC_ID_QDRAW, MKTAG('q', 'd', 'r', 'w') }, /* QuickDraw */
119 { CODEC_ID_H264, MKTAG('a', 'v', 'c', '1') }, /* AVC-1/H.264 */
119 { CODEC_ID_NONE, 0 }, 120 { CODEC_ID_NONE, 0 },
120 }; 121 };
121 122
122 static const CodecTag mov_audio_tags[] = { 123 static const CodecTag mov_audio_tags[] = {
123 /* { CODEC_ID_PCM_S16BE, MKTAG('N', 'O', 'N', 'E') }, *//* uncompressed */ 124 /* { CODEC_ID_PCM_S16BE, MKTAG('N', 'O', 'N', 'E') }, *//* uncompressed */
684 685
685 if (st->codec.extradata) { 686 if (st->codec.extradata) {
686 strcpy(st->codec.extradata, "SVQ3"); // fake 687 strcpy(st->codec.extradata, "SVQ3"); // fake
687 get_buffer(pb, st->codec.extradata + 0x5a, atom.size); 688 get_buffer(pb, st->codec.extradata + 0x5a, atom.size);
688 //av_log(NULL, AV_LOG_DEBUG, "Reading SMI %Ld %s\n", atom.size, (char*)st->codec.extradata + 0x5a); 689 //av_log(NULL, AV_LOG_DEBUG, "Reading SMI %Ld %s\n", atom.size, (char*)st->codec.extradata + 0x5a);
690 } else
691 url_fskip(pb, atom.size);
692
693 return 0;
694 }
695
696 static int mov_read_avcC(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom)
697 {
698 AVStream *st = c->fc->streams[c->fc->nb_streams-1];
699
700 av_free(st->codec.extradata);
701
702 st->codec.extradata_size = atom.size;
703 st->codec.extradata = (uint8_t*) av_mallocz(st->codec.extradata_size + FF_INPUT_BUFFER_PADDING_SIZE);
704
705 if (st->codec.extradata) {
706 get_buffer(pb, st->codec.extradata, atom.size);
689 } else 707 } else
690 url_fskip(pb, atom.size); 708 url_fskip(pb, atom.size);
691 709
692 return 0; 710 return 0;
693 } 711 }
1479 { MKTAG( 'n', 'm', 'h', 'd' ), mov_read_leaf }, 1497 { MKTAG( 'n', 'm', 'h', 'd' ), mov_read_leaf },
1480 { MKTAG( 'o', 'd', 'h', 'd' ), mov_read_default }, 1498 { MKTAG( 'o', 'd', 'h', 'd' ), mov_read_default },
1481 { MKTAG( 's', 'd', 'h', 'd' ), mov_read_default }, 1499 { MKTAG( 's', 'd', 'h', 'd' ), mov_read_default },
1482 { MKTAG( 's', 'k', 'i', 'p' ), mov_read_leaf }, 1500 { MKTAG( 's', 'k', 'i', 'p' ), mov_read_leaf },
1483 { MKTAG( 's', 'm', 'h', 'd' ), mov_read_leaf }, /* sound media info header */ 1501 { MKTAG( 's', 'm', 'h', 'd' ), mov_read_leaf }, /* sound media info header */
1484 { MKTAG( 'S', 'M', 'I', ' ' ), mov_read_smi }, /* Sorrenson extension ??? */ 1502 { MKTAG( 'S', 'M', 'I', ' ' ), mov_read_smi }, /* Sorenson extension ??? */
1503 { MKTAG( 'a', 'v', 'c', 'C' ), mov_read_avcC },
1485 { MKTAG( 's', 't', 'b', 'l' ), mov_read_default }, 1504 { MKTAG( 's', 't', 'b', 'l' ), mov_read_default },
1486 { MKTAG( 's', 't', 'c', 'o' ), mov_read_stco }, 1505 { MKTAG( 's', 't', 'c', 'o' ), mov_read_stco },
1487 { MKTAG( 's', 't', 'd', 'p' ), mov_read_default }, 1506 { MKTAG( 's', 't', 'd', 'p' ), mov_read_default },
1488 { MKTAG( 's', 't', 's', 'c' ), mov_read_stsc }, 1507 { MKTAG( 's', 't', 's', 'c' ), mov_read_stsc },
1489 { MKTAG( 's', 't', 's', 'd' ), mov_read_stsd }, /* sample description */ 1508 { MKTAG( 's', 't', 's', 'd' ), mov_read_stsd }, /* sample description */