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

Commit 1114eea0 authored by Wonsik Kim's avatar Wonsik Kim
Browse files

CCodec: enforce required configurations

Bug: 122324450
Test: Modify MediaCodecTest#testPCMEncoding to lack required params
and observe them failing.
Test: atest CtsMediaTestCases -- --module-arg CtsMediaTestCases:size:small

Change-Id: Ic3f245798b6448bf194ef1a4c2d6f37179c55117
parent 7a2f8152
Loading
Loading
Loading
Loading
+43 −0
Original line number Original line Diff line number Diff line
@@ -709,6 +709,49 @@ void CCodec::configure(const sp<AMessage> &msg) {
        Mutexed<Config>::Locked config(mConfig);
        Mutexed<Config>::Locked config(mConfig);
        config->mUsingSurface = surface != nullptr;
        config->mUsingSurface = surface != nullptr;


        // Enforce required parameters
        int32_t i32;
        float flt;
        if (config->mDomain & Config::IS_AUDIO) {
            if (!msg->findInt32(KEY_SAMPLE_RATE, &i32)) {
                ALOGD("sample rate is missing, which is required for audio components.");
                return BAD_VALUE;
            }
            if (!msg->findInt32(KEY_CHANNEL_COUNT, &i32)) {
                ALOGD("channel count is missing, which is required for audio components.");
                return BAD_VALUE;
            }
            if ((config->mDomain & Config::IS_ENCODER)
                    && !mime.equalsIgnoreCase(MEDIA_MIMETYPE_AUDIO_FLAC)
                    && !msg->findInt32(KEY_BIT_RATE, &i32)
                    && !msg->findFloat(KEY_BIT_RATE, &flt)) {
                ALOGD("bitrate is missing, which is required for audio encoders.");
                return BAD_VALUE;
            }
        }
        if (config->mDomain & (Config::IS_IMAGE | Config::IS_VIDEO)) {
            if (!msg->findInt32(KEY_WIDTH, &i32)) {
                ALOGD("width is missing, which is required for image/video components.");
                return BAD_VALUE;
            }
            if (!msg->findInt32(KEY_HEIGHT, &i32)) {
                ALOGD("height is missing, which is required for image/video components.");
                return BAD_VALUE;
            }
            if ((config->mDomain & Config::IS_ENCODER) && (config->mDomain & Config::IS_VIDEO)) {
                if (!msg->findInt32(KEY_BIT_RATE, &i32)
                        && !msg->findFloat(KEY_BIT_RATE, &flt)) {
                    ALOGD("bitrate is missing, which is required for video encoders.");
                    return BAD_VALUE;
                }
                if (!msg->findInt32(KEY_I_FRAME_INTERVAL, &i32)
                        && !msg->findFloat(KEY_I_FRAME_INTERVAL, &flt)) {
                    ALOGD("I frame interval is missing, which is required for video encoders.");
                    return BAD_VALUE;
                }
            }
        }

        /*
        /*
         * Handle input surface configuration
         * Handle input surface configuration
         */
         */