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

Commit b1803b01 authored by Lajos Molnar's avatar Lajos Molnar
Browse files

stagefright: encode number of android.generic temporal layers

Bug: 27596987
Change-Id: Ida24aa9bac004ac9bc7c9e19eea1a55162904dc4
parent eee9f495
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -1542,6 +1542,14 @@ MPEG4Writer::Track::Track(
    mIsMPEG4 = !strcasecmp(mime, MEDIA_MIMETYPE_VIDEO_MPEG4) ||
               !strcasecmp(mime, MEDIA_MIMETYPE_AUDIO_AAC);

    // store temporal layer count
    if (!mIsAudio) {
        int32_t count;
        if (mMeta->findInt32(kKeyTemporalLayerCount, &count) && count > 1) {
            mOwner->setTemporalLayerCount(count);
        }
    }

    setTimeScale();
}

+14 −0
Original line number Diff line number Diff line
@@ -1317,6 +1317,20 @@ void convertMessageToMetaData(const sp<AMessage> &msg, sp<MetaData> &meta) {
        }

        convertMessageToMetaDataColorAspects(msg, meta);

        AString tsSchema;
        if (msg->findString("ts-schema", &tsSchema)) {
            unsigned int numLayers = 0;
            unsigned int numBLayers = 0;
            char dummy;
            int tags = sscanf(tsSchema.c_str(), "android.generic.%u%c%u%c",
                    &numLayers, &dummy, &numBLayers, &dummy);
            if ((tags == 1 || (tags == 3 && dummy == '+'))
                    && numLayers > 0 && numLayers < UINT32_MAX - numBLayers
                    && numLayers + numBLayers <= INT32_MAX) {
                meta->setInt32(kKeyTemporalLayerCount, numLayers + numBLayers);
            }
        }
    } else if (mime.startsWith("audio/")) {
        int32_t numChannels;
        if (msg->findInt32("channel-count", &numChannels)) {