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

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

Merge "Enable APV codec support from Android Baklava" into main am: ea785f09 am: f9c65dd8

parents 0eb2dbe0 f9c65dd8
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -52,6 +52,7 @@ cc_library {

    shared_libs: [
        "server_configurable_flags",
        "libbase",
    ],

    host_supported: true,
+32 −4
Original line number Diff line number Diff line
@@ -29,6 +29,10 @@

#include <utils/Log.h>

#include <android-base/properties.h>
#ifdef __ANDROID__
#include <android/api-level.h>
#endif  //__ANDROID__
#include "AC4Parser.h"
#include "MPEG4Extractor.h"
#include "SampleTable.h"
@@ -85,6 +89,22 @@ enum {
    kMaxAtomSize = 64 * 1024 * 1024,
};

static bool isAtLeastRelease([[maybe_unused]] int version,
                             [[maybe_unused]] const std::string codeName) {
#ifdef __ANDROID__
    static std::once_flag sCheckOnce;
    static std::string sDeviceCodeName;
    static int sDeviceApiLevel = 0;
    std::call_once(sCheckOnce, [&]() {
        sDeviceCodeName = base::GetProperty("ro.build.version.codename", "");
        sDeviceApiLevel = android_get_device_api_level();
    });
    return sDeviceApiLevel >= version || sDeviceCodeName == codeName;
#else   //__ANDROID__
    return true;
#endif  //__ANDROID__
}

class MPEG4Source : public MediaTrackHelper {
static const size_t  kMaxPcmFrameSize = 8192;
public:
@@ -372,7 +392,9 @@ static const char *FourCC2MIME(uint32_t fourcc) {
            return MEDIA_MIMETYPE_VIDEO_HEVC;

        case FOURCC("apv1"):
            if (!com::android::media::extractor::flags::extractor_mp4_enable_apv()) {
            // Enable APV codec support from Android Baklava
            if (!(isAtLeastRelease(36, "Baklava") &&
                  com::android::media::extractor::flags::extractor_mp4_enable_apv())) {
                ALOGV("APV support not enabled");
                return "application/octet-stream";
            }
@@ -2637,7 +2659,9 @@ status_t MPEG4Extractor::parseChunk(off64_t *offset, int depth) {
        }

        case FOURCC("apvC"): {
            if (!com::android::media::extractor::flags::extractor_mp4_enable_apv()) {
            // Enable APV codec support from Android Baklava
            if (!(isAtLeastRelease(36, "Baklava") &&
                  com::android::media::extractor::flags::extractor_mp4_enable_apv())) {
                ALOGV("APV support not enabled");
                *offset += chunk_size;
                break;
@@ -5239,8 +5263,12 @@ MPEG4Source::MPEG4Source(
    mIsAVC = !strcasecmp(mime, MEDIA_MIMETYPE_VIDEO_AVC);
    mIsHEVC = !strcasecmp(mime, MEDIA_MIMETYPE_VIDEO_HEVC) ||
              !strcasecmp(mime, MEDIA_MIMETYPE_IMAGE_ANDROID_HEIC);
    // Enable APV codec support from Android Baklava
    mIsAPV = false;
    if (isAtLeastRelease(36, "Baklava")) {
        mIsAPV = com::android::media::extractor::flags::extractor_mp4_enable_apv() &&
                 !strcasecmp(mime, MEDIA_MIMETYPE_VIDEO_APV);
    }
    mIsAC4 = !strcasecmp(mime, MEDIA_MIMETYPE_AUDIO_AC4);
    mIsDolbyVision = !strcasecmp(mime, MEDIA_MIMETYPE_VIDEO_DOLBY_VISION);
    mIsHeif = !strcasecmp(mime, MEDIA_MIMETYPE_IMAGE_ANDROID_HEIC) && mItemTable != NULL;