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

Commit 9225da5b authored by Sham Rathod's avatar Sham Rathod
Browse files

Enable APV codec support from Android Baklava

Test: atest MediaExtractorTest
Change-Id: I915f7eb0ffcd47457fd4fd56ca165c40a2868106
parent d03ff96e
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -52,6 +52,7 @@ cc_library {


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


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


#include <utils/Log.h>
#include <utils/Log.h>


#include <android-base/properties.h>
#ifdef __ANDROID__
#include <android/api-level.h>
#endif  //__ANDROID__
#include "AC4Parser.h"
#include "AC4Parser.h"
#include "MPEG4Extractor.h"
#include "MPEG4Extractor.h"
#include "SampleTable.h"
#include "SampleTable.h"
@@ -85,6 +89,22 @@ enum {
    kMaxAtomSize = 64 * 1024 * 1024,
    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 {
class MPEG4Source : public MediaTrackHelper {
static const size_t  kMaxPcmFrameSize = 8192;
static const size_t  kMaxPcmFrameSize = 8192;
public:
public:
@@ -372,7 +392,9 @@ static const char *FourCC2MIME(uint32_t fourcc) {
            return MEDIA_MIMETYPE_VIDEO_HEVC;
            return MEDIA_MIMETYPE_VIDEO_HEVC;


        case FOURCC("apv1"):
        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");
                ALOGV("APV support not enabled");
                return "application/octet-stream";
                return "application/octet-stream";
            }
            }
@@ -2637,7 +2659,9 @@ status_t MPEG4Extractor::parseChunk(off64_t *offset, int depth) {
        }
        }


        case FOURCC("apvC"): {
        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");
                ALOGV("APV support not enabled");
                *offset += chunk_size;
                *offset += chunk_size;
                break;
                break;
@@ -5239,8 +5263,12 @@ MPEG4Source::MPEG4Source(
    mIsAVC = !strcasecmp(mime, MEDIA_MIMETYPE_VIDEO_AVC);
    mIsAVC = !strcasecmp(mime, MEDIA_MIMETYPE_VIDEO_AVC);
    mIsHEVC = !strcasecmp(mime, MEDIA_MIMETYPE_VIDEO_HEVC) ||
    mIsHEVC = !strcasecmp(mime, MEDIA_MIMETYPE_VIDEO_HEVC) ||
              !strcasecmp(mime, MEDIA_MIMETYPE_IMAGE_ANDROID_HEIC);
              !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() &&
        mIsAPV = com::android::media::extractor::flags::extractor_mp4_enable_apv() &&
                 !strcasecmp(mime, MEDIA_MIMETYPE_VIDEO_APV);
                 !strcasecmp(mime, MEDIA_MIMETYPE_VIDEO_APV);
    }
    mIsAC4 = !strcasecmp(mime, MEDIA_MIMETYPE_AUDIO_AC4);
    mIsAC4 = !strcasecmp(mime, MEDIA_MIMETYPE_AUDIO_AC4);
    mIsDolbyVision = !strcasecmp(mime, MEDIA_MIMETYPE_VIDEO_DOLBY_VISION);
    mIsDolbyVision = !strcasecmp(mime, MEDIA_MIMETYPE_VIDEO_DOLBY_VISION);
    mIsHeif = !strcasecmp(mime, MEDIA_MIMETYPE_IMAGE_ANDROID_HEIC) && mItemTable != NULL;
    mIsHeif = !strcasecmp(mime, MEDIA_MIMETYPE_IMAGE_ANDROID_HEIC) && mItemTable != NULL;