Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f6f6dccb authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Add support for vp9 playback in mp4" am: 263732c7

Change-Id: I8fb52ef3efed272748c574dc00787deceaefaabb
parents e800a0d7 263732c7
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -351,6 +351,8 @@ static const char *FourCC2MIME(uint32_t fourcc) {
            return MEDIA_MIMETYPE_AUDIO_FLAC;
        case FOURCC("av01"):
            return MEDIA_MIMETYPE_VIDEO_AV1;
        case FOURCC("vp09"):
            return MEDIA_MIMETYPE_VIDEO_VP9;
        case FOURCC(".mp3"):
        case 0x6D730055: // "ms U" mp3 audio
            return MEDIA_MIMETYPE_AUDIO_MPEG;
@@ -1851,6 +1853,7 @@ status_t MPEG4Extractor::parseChunk(off64_t *offset, int depth) {
        case FOURCC("hvc1"):
        case FOURCC("hev1"):
        case FOURCC("av01"):
        case FOURCC("vp09"):
        {
            uint8_t buffer[78];
            if (chunk_data_size < (ssize_t)sizeof(buffer)) {
@@ -2312,6 +2315,8 @@ status_t MPEG4Extractor::parseChunk(off64_t *offset, int depth) {
            *offset += chunk_size;
            break;
        }

        case FOURCC("vpcC"):
        case FOURCC("av1C"):
        {
            auto buffer = heapbuffer<uint8_t>(chunk_data_size);
@@ -4162,6 +4167,18 @@ MediaTrackHelper *MPEG4Extractor::getTrack(size_t index) {
        if (size < 5 || ptr[0] != 0x81) {  // configurationVersion == 1
            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) {
@@ -4199,6 +4216,10 @@ status_t MPEG4Extractor::verifyTrack(Track *track) {
        if (!AMediaFormat_getBuffer(track->meta, AMEDIAFORMAT_KEY_CSD_0, &data, &size)) {
            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)
            || !strcasecmp(mime, MEDIA_MIMETYPE_VIDEO_MPEG2)
            || !strcasecmp(mime, MEDIA_MIMETYPE_AUDIO_AAC)) {
@@ -6398,6 +6419,7 @@ static bool isCompatibleBrand(uint32_t fourcc) {
        FOURCC("hvc1"),
        FOURCC("hev1"),
        FOURCC("av01"),
        FOURCC("vp09"),
        FOURCC("3gp4"),
        FOURCC("mp41"),
        FOURCC("mp42"),