clean and simplify esds reading function

Originally committed as revision 8772 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
Baptiste Coudurier 2007-04-21 18:09:14 +00:00
parent d614f57978
commit 0b07ac425a

View File

@ -88,54 +88,6 @@ typedef struct MOV_mdat_atom_s {
int64_t size;
} MOV_mdat_atom_t;
typedef struct {
uint8_t version;
uint32_t flags; // 24bit
/* 0x03 ESDescrTag */
uint16_t es_id;
#define MP4ODescrTag 0x01
#define MP4IODescrTag 0x02
#define MP4ESDescrTag 0x03
#define MP4DecConfigDescrTag 0x04
#define MP4DecSpecificDescrTag 0x05
#define MP4SLConfigDescrTag 0x06
#define MP4ContentIdDescrTag 0x07
#define MP4SupplContentIdDescrTag 0x08
#define MP4IPIPtrDescrTag 0x09
#define MP4IPMPPtrDescrTag 0x0A
#define MP4IPMPDescrTag 0x0B
#define MP4RegistrationDescrTag 0x0D
#define MP4ESIDIncDescrTag 0x0E
#define MP4ESIDRefDescrTag 0x0F
#define MP4FileIODescrTag 0x10
#define MP4FileODescrTag 0x11
#define MP4ExtProfileLevelDescrTag 0x13
#define MP4ExtDescrTagsStart 0x80
#define MP4ExtDescrTagsEnd 0xFE
uint8_t stream_priority;
/* 0x04 DecConfigDescrTag */
uint8_t object_type_id;
uint8_t stream_type;
/* XXX: really streamType is
* only 6bit, followed by:
* 1bit upStream
* 1bit reserved
*/
uint32_t buffer_size_db; // 24
uint32_t max_bitrate;
uint32_t avg_bitrate;
/* 0x05 DecSpecificDescrTag */
uint8_t decoder_cfg_len;
uint8_t *decoder_cfg;
/* 0x06 SLConfigDescrTag */
uint8_t sl_config_len;
uint8_t *sl_config;
} MOV_esds_t;
struct MOVParseTableEntry;
typedef struct MOVStreamContext {
@ -160,7 +112,6 @@ typedef struct MOVStreamContext {
int time_scale;
int time_rate;
long current_sample;
MOV_esds_t esds;
unsigned int bytes_per_frame;
unsigned int samples_per_frame;
int dv_audio_container;
@ -325,10 +276,13 @@ static int mov_mp4_read_descr(MOVContext *c, ByteIOContext *pb, int *tag)
return len;
}
#define MP4ESDescrTag 0x03
#define MP4DecConfigDescrTag 0x04
#define MP4DecSpecificDescrTag 0x05
static int mov_read_esds(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom)
{
AVStream *st = c->fc->streams[c->fc->nb_streams-1];
MOVStreamContext *sc = st->priv_data;
int tag, len;
/* Well, broken but suffisant for some MP4 streams */
@ -342,14 +296,14 @@ static int mov_read_esds(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom)
len = mov_mp4_read_descr(c, pb, &tag);
if (tag == MP4DecConfigDescrTag) {
sc->esds.object_type_id = get_byte(pb);
sc->esds.stream_type = get_byte(pb);
sc->esds.buffer_size_db = get_be24(pb);
sc->esds.max_bitrate = get_be32(pb);
sc->esds.avg_bitrate = get_be32(pb);
int object_type_id = get_byte(pb);
get_byte(pb); /* stream type */
get_be24(pb); /* buffer size db */
get_be32(pb); /* max bitrate */
get_be32(pb); /* avg bitrate */
st->codec->codec_id= codec_get_id(ff_mp4_obj_type, sc->esds.object_type_id);
dprintf(c->fc, "esds object type id %d\n", sc->esds.object_type_id);
st->codec->codec_id= codec_get_id(ff_mp4_obj_type, object_type_id);
dprintf(c->fc, "esds object type id %d\n", object_type_id);
len = mov_mp4_read_descr(c, pb, &tag);
if (tag == MP4DecSpecificDescrTag) {
dprintf(c->fc, "Specific MPEG4 header len=%d\n", len);