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

Commit 263732c7 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "Add support for vp9 playback in mp4"

parents 121bf3f7 04bb3fcd
Loading
Loading
Loading
Loading
+22 −0
Original line number Original line Diff line number Diff line
@@ -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;
@@ -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)) {
@@ -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);
@@ -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) {
@@ -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)) {
@@ -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"),