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

Commit c8c41835 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 am: f6f6dccb

Change-Id: I069cea2ae6671515a46292b05b1293edd7fa47ec
parents 1c1c11e6 f6f6dccb
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -369,6 +369,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;
@@ -1969,6 +1971,7 @@ status_t MPEG4Extractor::parseChunk(off64_t *offset, int depth) {
        case FOURCC("dvh1"):
        case FOURCC("dav1"):
        case FOURCC("av01"):
        case FOURCC("vp09"):
        {
            uint8_t buffer[78];
            if (chunk_data_size < (ssize_t)sizeof(buffer)) {
@@ -2431,6 +2434,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);
@@ -4332,6 +4337,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;
        }
    }

    ALOGV("track->elst_shift_start_ticks :%" PRIu64, track->elst_shift_start_ticks);
@@ -4386,6 +4403,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)) {
@@ -6680,6 +6701,7 @@ static bool isCompatibleBrand(uint32_t fourcc) {
        FOURCC("hvc1"),
        FOURCC("hev1"),
        FOURCC("av01"),
        FOURCC("vp09"),
        FOURCC("3gp4"),
        FOURCC("mp41"),
        FOURCC("mp42"),