Loading media/extractors/mp4/MPEG4Extractor.cpp 100755 → 100644 +22 −0 Original line number Original line Diff line number Diff line Loading @@ -351,6 +351,8 @@ static const char *FourCC2MIME(uint32_t fourcc) { return MEDIA_MIMETYPE_AUDIO_FLAC; return MEDIA_MIMETYPE_AUDIO_FLAC; case FOURCC("av01"): case FOURCC("av01"): return MEDIA_MIMETYPE_VIDEO_AV1; return MEDIA_MIMETYPE_VIDEO_AV1; case FOURCC("vp09"): return MEDIA_MIMETYPE_VIDEO_VP9; case FOURCC(".mp3"): case FOURCC(".mp3"): case 0x6D730055: // "ms U" mp3 audio case 0x6D730055: // "ms U" mp3 audio return MEDIA_MIMETYPE_AUDIO_MPEG; return MEDIA_MIMETYPE_AUDIO_MPEG; Loading Loading @@ -1849,6 +1851,7 @@ status_t MPEG4Extractor::parseChunk(off64_t *offset, int depth) { case FOURCC("hvc1"): case FOURCC("hvc1"): case FOURCC("hev1"): case FOURCC("hev1"): case FOURCC("av01"): case FOURCC("av01"): case FOURCC("vp09"): { { uint8_t buffer[78]; uint8_t buffer[78]; if (chunk_data_size < (ssize_t)sizeof(buffer)) { if (chunk_data_size < (ssize_t)sizeof(buffer)) { Loading Loading @@ -2310,6 +2313,8 @@ status_t MPEG4Extractor::parseChunk(off64_t *offset, int depth) { *offset += chunk_size; *offset += chunk_size; break; break; } } case FOURCC("vpcC"): case FOURCC("av1C"): case FOURCC("av1C"): { { auto buffer = heapbuffer<uint8_t>(chunk_data_size); auto buffer = heapbuffer<uint8_t>(chunk_data_size); Loading Loading @@ -4156,6 +4161,18 @@ MediaTrackHelper *MPEG4Extractor::getTrack(size_t index) { if (size < 5 || ptr[0] != 0x81) { // configurationVersion == 1 if (size < 5 || ptr[0] != 0x81) { // configurationVersion == 1 return NULL; return NULL; } } } else if (!strcasecmp(mime, MEDIA_MIMETYPE_VIDEO_VP9)) { void *data; size_t size; if (!AMediaFormat_getBuffer(track->meta, AMEDIAFORMAT_KEY_CSD_0, &data, &size)) { return NULL; } const uint8_t *ptr = (const uint8_t *)data; if (size < 5 || ptr[0] != 0x01) { // configurationVersion == 1 return NULL; } } } if (track->has_elst and !strncasecmp("video/", mime, 6) and track->elst_media_time > 0) { if (track->has_elst and !strncasecmp("video/", mime, 6) and track->elst_media_time > 0) { Loading Loading @@ -4193,6 +4210,10 @@ status_t MPEG4Extractor::verifyTrack(Track *track) { if (!AMediaFormat_getBuffer(track->meta, AMEDIAFORMAT_KEY_CSD_0, &data, &size)) { if (!AMediaFormat_getBuffer(track->meta, AMEDIAFORMAT_KEY_CSD_0, &data, &size)) { return ERROR_MALFORMED; return ERROR_MALFORMED; } } } else if (!strcasecmp(mime, MEDIA_MIMETYPE_VIDEO_VP9)) { if (!AMediaFormat_getBuffer(track->meta, AMEDIAFORMAT_KEY_CSD_0, &data, &size)) { return ERROR_MALFORMED; } } else if (!strcasecmp(mime, MEDIA_MIMETYPE_VIDEO_MPEG4) } else if (!strcasecmp(mime, MEDIA_MIMETYPE_VIDEO_MPEG4) || !strcasecmp(mime, MEDIA_MIMETYPE_VIDEO_MPEG2) || !strcasecmp(mime, MEDIA_MIMETYPE_VIDEO_MPEG2) || !strcasecmp(mime, MEDIA_MIMETYPE_AUDIO_AAC)) { || !strcasecmp(mime, MEDIA_MIMETYPE_AUDIO_AAC)) { Loading Loading @@ -6357,6 +6378,7 @@ static bool isCompatibleBrand(uint32_t fourcc) { FOURCC("hvc1"), FOURCC("hvc1"), FOURCC("hev1"), FOURCC("hev1"), FOURCC("av01"), FOURCC("av01"), FOURCC("vp09"), FOURCC("3gp4"), FOURCC("3gp4"), FOURCC("mp41"), FOURCC("mp41"), FOURCC("mp42"), FOURCC("mp42"), Loading Loading
media/extractors/mp4/MPEG4Extractor.cpp 100755 → 100644 +22 −0 Original line number Original line Diff line number Diff line Loading @@ -351,6 +351,8 @@ static const char *FourCC2MIME(uint32_t fourcc) { return MEDIA_MIMETYPE_AUDIO_FLAC; return MEDIA_MIMETYPE_AUDIO_FLAC; case FOURCC("av01"): case FOURCC("av01"): return MEDIA_MIMETYPE_VIDEO_AV1; return MEDIA_MIMETYPE_VIDEO_AV1; case FOURCC("vp09"): return MEDIA_MIMETYPE_VIDEO_VP9; case FOURCC(".mp3"): case FOURCC(".mp3"): case 0x6D730055: // "ms U" mp3 audio case 0x6D730055: // "ms U" mp3 audio return MEDIA_MIMETYPE_AUDIO_MPEG; return MEDIA_MIMETYPE_AUDIO_MPEG; Loading Loading @@ -1849,6 +1851,7 @@ status_t MPEG4Extractor::parseChunk(off64_t *offset, int depth) { case FOURCC("hvc1"): case FOURCC("hvc1"): case FOURCC("hev1"): case FOURCC("hev1"): case FOURCC("av01"): case FOURCC("av01"): case FOURCC("vp09"): { { uint8_t buffer[78]; uint8_t buffer[78]; if (chunk_data_size < (ssize_t)sizeof(buffer)) { if (chunk_data_size < (ssize_t)sizeof(buffer)) { Loading Loading @@ -2310,6 +2313,8 @@ status_t MPEG4Extractor::parseChunk(off64_t *offset, int depth) { *offset += chunk_size; *offset += chunk_size; break; break; } } case FOURCC("vpcC"): case FOURCC("av1C"): case FOURCC("av1C"): { { auto buffer = heapbuffer<uint8_t>(chunk_data_size); auto buffer = heapbuffer<uint8_t>(chunk_data_size); Loading Loading @@ -4156,6 +4161,18 @@ MediaTrackHelper *MPEG4Extractor::getTrack(size_t index) { if (size < 5 || ptr[0] != 0x81) { // configurationVersion == 1 if (size < 5 || ptr[0] != 0x81) { // configurationVersion == 1 return NULL; return NULL; } } } else if (!strcasecmp(mime, MEDIA_MIMETYPE_VIDEO_VP9)) { void *data; size_t size; if (!AMediaFormat_getBuffer(track->meta, AMEDIAFORMAT_KEY_CSD_0, &data, &size)) { return NULL; } const uint8_t *ptr = (const uint8_t *)data; if (size < 5 || ptr[0] != 0x01) { // configurationVersion == 1 return NULL; } } } if (track->has_elst and !strncasecmp("video/", mime, 6) and track->elst_media_time > 0) { if (track->has_elst and !strncasecmp("video/", mime, 6) and track->elst_media_time > 0) { Loading Loading @@ -4193,6 +4210,10 @@ status_t MPEG4Extractor::verifyTrack(Track *track) { if (!AMediaFormat_getBuffer(track->meta, AMEDIAFORMAT_KEY_CSD_0, &data, &size)) { if (!AMediaFormat_getBuffer(track->meta, AMEDIAFORMAT_KEY_CSD_0, &data, &size)) { return ERROR_MALFORMED; return ERROR_MALFORMED; } } } else if (!strcasecmp(mime, MEDIA_MIMETYPE_VIDEO_VP9)) { if (!AMediaFormat_getBuffer(track->meta, AMEDIAFORMAT_KEY_CSD_0, &data, &size)) { return ERROR_MALFORMED; } } else if (!strcasecmp(mime, MEDIA_MIMETYPE_VIDEO_MPEG4) } else if (!strcasecmp(mime, MEDIA_MIMETYPE_VIDEO_MPEG4) || !strcasecmp(mime, MEDIA_MIMETYPE_VIDEO_MPEG2) || !strcasecmp(mime, MEDIA_MIMETYPE_VIDEO_MPEG2) || !strcasecmp(mime, MEDIA_MIMETYPE_AUDIO_AAC)) { || !strcasecmp(mime, MEDIA_MIMETYPE_AUDIO_AAC)) { Loading Loading @@ -6357,6 +6378,7 @@ static bool isCompatibleBrand(uint32_t fourcc) { FOURCC("hvc1"), FOURCC("hvc1"), FOURCC("hev1"), FOURCC("hev1"), FOURCC("av01"), FOURCC("av01"), FOURCC("vp09"), FOURCC("3gp4"), FOURCC("3gp4"), FOURCC("mp41"), FOURCC("mp41"), FOURCC("mp42"), FOURCC("mp42"), Loading