int QuickTimeParser::readESDS(Atom atom) { if (_tracks.empty()) return 0; Track *track = _tracks.back(); // We should only get here within an stsd atom if (track->sampleDescs.empty()) return -1; SampleDesc *sampleDesc = track->sampleDescs.back(); _fd->readUint32BE(); // version + flags byte tag; int length; readMP4Desc(_fd, tag, length); _fd->readUint16BE(); // id if (tag == kMP4ESDescTag) _fd->readByte(); // priority // Check if we've got the Config MPEG-4 header readMP4Desc(_fd, tag, length); if (tag != kMP4DecConfigDescTag) return 0; sampleDesc->_objectTypeMP4 = _fd->readByte(); _fd->readByte(); // stream type _fd->readUint16BE(); _fd->readByte(); // buffer size _fd->readUint32BE(); // max bitrate _fd->readUint32BE(); // avg bitrate // Check if we've got the Specific MPEG-4 header readMP4Desc(_fd, tag, length); if (tag != kMP4DecSpecificDescTag) return 0; sampleDesc->_extraData = _fd->readStream(length); debug(0, "MPEG-4 object type = %02x", sampleDesc->_objectTypeMP4); return 0; }
int QuickTimeDecoder::readESDS(Atom atom) { if (_tracks.empty()) return 0; Track *track = _tracks.back(); _fd->readUint32BE(); // version + flags byte tag; int length; readMP4Desc(_fd, tag, length); _fd->readUint16BE(); // id if (tag == kMP4ESDescTag) _fd->readByte(); // priority // Check if we've got the Config MPEG-4 header readMP4Desc(_fd, tag, length); if (tag != kMP4DecConfigDescTag) return 0; track->objectTypeMP4 = _fd->readByte(); _fd->readByte(); // stream type _fd->readUint16BE(); _fd->readByte(); // buffer size _fd->readUint32BE(); // max bitrate _fd->readUint32BE(); // avg bitrate // Check if we've got the Specific MPEG-4 header readMP4Desc(_fd, tag, length); if (tag != kMP4DecSpecificDescTag) return 0; track->extraData = _fd->readStream(length); return 0; }