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
diff --git a/media/codec2/sfplugin/CCodec.cpp b/media/codec2/sfplugin/CCodec.cpp
index dce3222..98e5951 100644
--- a/media/codec2/sfplugin/CCodec.cpp
+++ b/media/codec2/sfplugin/CCodec.cpp
@@ -709,6 +709,49 @@
Mutexed<Config>::Locked config(mConfig);
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
*/