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

Commit 14f5d21f authored by Pechetty Sravani (xWF)'s avatar Pechetty Sravani (xWF)
Browse files

Revert "Java and JNI support for native EncoderCapabilities."

Revert submission 3093180

Reason for revert: <Droidmonitor created revert due to b/385023849.Will be verified through ABTD for standard investigation.>

Reverted changes: /q/submissionid:3093180

Change-Id: Ife0a7c6f2f2111a595449164318c732c04e62c67
parent 8b2f9968
Loading
Loading
Loading
Loading
+164 −270
Original line number Diff line number Diff line
@@ -4312,7 +4312,27 @@ public final class MediaCodecInfo {
     * A class that supports querying the encoding capabilities of a codec.
     */
    public static final class EncoderCapabilities {
        private static final String TAG = "EncoderCapabilities";
        /**
         * Returns the supported range of quality values.
         *
         * Quality is implementation-specific. As a general rule, a higher quality
         * setting results in a better image quality and a lower compression ratio.
         */
        public Range<Integer> getQualityRange() {
            return mQualityRange;
        }

        /**
         * Returns the supported range of encoder complexity values.
         * <p>
         * Some codecs may support multiple complexity levels, where higher
         * complexity values use more encoder tools (e.g. perform more
         * intensive calculations) to improve the quality or the compression
         * ratio.  Use a lower value to save power and/or time.
         */
        public Range<Integer> getComplexityRange() {
            return mComplexityRange;
        }

        /** Constant quality mode */
        public static final int BITRATE_MODE_CQ = 0;
@@ -4323,32 +4343,6 @@ public final class MediaCodecInfo {
        /** Constant bitrate mode with frame drops */
        public static final int BITRATE_MODE_CBR_FD =  3;

        /* package private */ interface EncoderCapsIntf {
            public Range<Integer> getQualityRange();

            public Range<Integer> getComplexityRange();

            public boolean isBitrateModeSupported(int mode);

            public void getDefaultFormat(MediaFormat format);

            public boolean supportsFormat(MediaFormat format);
        }

        /* package private */ static final class EncoderCapsLegacyImpl implements EncoderCapsIntf {
            private CodecCapabilities mParent;

            private Range<Integer> mQualityRange;
            private Range<Integer> mComplexityRange;

            public Range<Integer> getQualityRange() {
                return mQualityRange;
            }

            public Range<Integer> getComplexityRange() {
                return mComplexityRange;
            }

        private static final Feature[] bitrates = new Feature[] {
            new Feature("VBR", BITRATE_MODE_VBR, true),
            new Feature("CBR", BITRATE_MODE_CBR, false),
@@ -4365,6 +4359,9 @@ public final class MediaCodecInfo {
            return 0;
        }

        /**
         * Query whether a bitrate mode is supported.
         */
        public boolean isBitrateModeSupported(int mode) {
            for (Feature feat: bitrates) {
                if (mode == feat.mValue) {
@@ -4374,17 +4371,17 @@ public final class MediaCodecInfo {
            return false;
        }

        private Range<Integer> mQualityRange;
        private Range<Integer> mComplexityRange;
        private CodecCapabilities mParent;

        /* no public constructor */
            private EncoderCapsLegacyImpl() { }
        private EncoderCapabilities() { }

        /** @hide */
            public static EncoderCapsLegacyImpl create(
        public static EncoderCapabilities create(
                MediaFormat info, CodecCapabilities parent) {
                if (GetFlag(() -> android.media.codec.Flags.nativeCapabilites())) {
                    Log.d(TAG, "Legacy implementation is called while native flag is on.");
                }

                EncoderCapsLegacyImpl caps = new EncoderCapsLegacyImpl();
            EncoderCapabilities caps = new EncoderCapabilities();
            caps.init(info, parent);
            return caps;
        }
@@ -4529,109 +4526,6 @@ public final class MediaCodecInfo {

            return supports(complexity, quality, profile);
        }
        }

        /* package private */ static final class EncoderCapsNativeImpl implements EncoderCapsIntf {
            private long mNativeContext; // accessed by native methods

            private Range<Integer> mQualityRange;
            private Range<Integer> mComplexityRange;

            /* no public constructor */
            private EncoderCapsNativeImpl() { }

            // Constructor called from native
            /* package private */ EncoderCapsNativeImpl(Range<Integer> qualityRange,
                    Range<Integer> complexityRange) {
                mQualityRange = qualityRange;
                mComplexityRange = complexityRange;
            }

            public Range<Integer> getQualityRange() {
                return mQualityRange;
            }

            public Range<Integer> getComplexityRange() {
                return mComplexityRange;
            }

            public boolean isBitrateModeSupported(int mode) {
                return native_isBitrateModeSupported(mode);
            }

            // This API is for internal Java implementation only. Should not be called.
            public void getDefaultFormat(MediaFormat format) {
                throw new UnsupportedOperationException(
                    "Java Implementation should not call native implemenatation");
            }

            // This API is for internal Java implementation only. Should not be called.
            public boolean supportsFormat(MediaFormat format) {
                throw new UnsupportedOperationException(
                    "Java Implementation should not call native implemenatation");
            }

            private native boolean native_isBitrateModeSupported(int mode);
            private static native void native_init();

            static {
                System.loadLibrary("media_jni");
                native_init();
            }
        }

        private EncoderCapsIntf mImpl;

        /** @hide */
        public static EncoderCapabilities create(
                MediaFormat info, CodecCapabilities parent) {
            EncoderCapsLegacyImpl impl = EncoderCapsLegacyImpl.create(info, parent);
            EncoderCapabilities caps = new EncoderCapabilities(impl);
            return caps;
        }

        /* package private */ EncoderCapabilities(EncoderCapsIntf impl) {
            mImpl = impl;
        }

        /**
         * Returns the supported range of quality values.
         *
         * Quality is implementation-specific. As a general rule, a higher quality
         * setting results in a better image quality and a lower compression ratio.
         */
        public Range<Integer> getQualityRange() {
            return mImpl.getQualityRange();
        }

        /**
         * Returns the supported range of encoder complexity values.
         * <p>
         * Some codecs may support multiple complexity levels, where higher
         * complexity values use more encoder tools (e.g. perform more
         * intensive calculations) to improve the quality or the compression
         * ratio.  Use a lower value to save power and/or time.
         */
        public Range<Integer> getComplexityRange() {
            return mImpl.getComplexityRange();
        }

        /**
         * Query whether a bitrate mode is supported.
         */
        public boolean isBitrateModeSupported(int mode) {
            return mImpl.isBitrateModeSupported(mode);
        }

        /** @hide */
        public void getDefaultFormat(MediaFormat format) {
            mImpl.getDefaultFormat(format);
        }

        /** @hide */
        public boolean supportsFormat(MediaFormat format) {
            return mImpl.supportsFormat(format);
        }
    };

    /**
+0 −49
Original line number Diff line number Diff line
@@ -21,7 +21,6 @@
#include "jni.h"

#include <media/AudioCapabilities.h>
#include <media/EncoderCapabilities.h>
#include <media/VideoCapabilities.h>
#include <media/stagefright/foundation/ADebug.h>
#include <nativehelper/JNIHelp.h>
@@ -31,7 +30,6 @@ namespace android {
struct fields_t {
    jfieldID audioCapsContext;
    jfieldID videoCapsContext;
    jfieldID encoderCapsContext;
};
static fields_t fields;

@@ -49,12 +47,6 @@ static VideoCapabilities* getVideoCapabilities(JNIEnv *env, jobject thiz) {
    return p;
}

static EncoderCapabilities* getEncoderCapabilities(JNIEnv *env, jobject thiz) {
    EncoderCapabilities* const p = (EncoderCapabilities*)env->GetLongField(
            thiz, fields.encoderCapsContext);
    return p;
}

// Utils

static jobject convertToJavaIntRange(JNIEnv *env, const Range<int32_t>& range) {
@@ -313,35 +305,6 @@ static jint android_media_VideoCapabilities_getSmallerDimensionUpperLimit(JNIEnv
    return smallerDimensionUpperLimit;
}

// EncoderCapabilities

static void android_media_EncoderCapabilities_native_init(JNIEnv *env, jobject /* thiz */) {
    jclass clazz = env->FindClass(
            "android/media/MediaCodecInfo$EncoderCapabilities$EncoderCapsNativeImpl");
    if (clazz == NULL) {
        return;
    }

    fields.encoderCapsContext = env->GetFieldID(clazz, "mNativeContext", "J");
    if (fields.encoderCapsContext == NULL) {
        return;
    }

    env->DeleteLocalRef(clazz);
}

static jboolean android_media_EncoderCapabilities_isBitrateModeSupported(JNIEnv *env, jobject thiz,
        int mode) {
    EncoderCapabilities* const encoderCaps = getEncoderCapabilities(env, thiz);
    if (encoderCaps == nullptr) {
        jniThrowException(env, "java/lang/IllegalStateException", NULL);
        return 0;
    }

    bool res = encoderCaps->isBitrateModeSupported(mode);
    return res;
}

// ----------------------------------------------------------------------------

static const JNINativeMethod gAudioCapsMethods[] = {
@@ -367,11 +330,6 @@ static const JNINativeMethod gVideoCapsMethods[] = {
    {"native_getSmallerDimensionUpperLimit", "()I", (void *)android_media_VideoCapabilities_getSmallerDimensionUpperLimit}
};

static const JNINativeMethod gEncoderCapsMethods[] = {
    {"native_init", "()V", (void *)android_media_EncoderCapabilities_native_init},
    {"native_isBitrateModeSupported", "(I)Z", (void *)android_media_EncoderCapabilities_isBitrateModeSupported}
};

int register_android_media_CodecCapabilities(JNIEnv *env) {
    int result = AndroidRuntime::registerNativeMethods(env,
            "android/media/MediaCodecInfo$AudioCapabilities$AudioCapsNativeImpl",
@@ -394,12 +352,5 @@ int register_android_media_CodecCapabilities(JNIEnv *env) {
        return result;
    }

    result = AndroidRuntime::registerNativeMethods(env,
            "android/media/MediaCodecInfo$EncoderCapabilities$EncoderCapsNativeImpl",
            gEncoderCapsMethods, NELEM(gEncoderCapsMethods));
    if (result != JNI_OK) {
        return result;
    }

    return result;
}
 No newline at end of file