summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--media/jni/android_media_MediaProfiles.cpp31
1 files changed, 19 insertions, 12 deletions
diff --git a/media/jni/android_media_MediaProfiles.cpp b/media/jni/android_media_MediaProfiles.cpp
index ecb1d510f807..9868a148d998 100644
--- a/media/jni/android_media_MediaProfiles.cpp
+++ b/media/jni/android_media_MediaProfiles.cpp
@@ -255,21 +255,21 @@ android_media_MediaProfiles_native_get_camcorder_profiles(JNIEnv *env, jobject /
jmethodID audioProfileConstructorMethodID =
env->GetMethodID(audioProfileClazz, "<init>", "(IIIII)V");
- jobjectArray videoCodecs = (jobjectArray)env->NewObjectArray(
- cp->getVideoCodecs().size(), videoProfileClazz, nullptr);
+ jobjectArray videoCodecs = nullptr;
{
- int i = 0;
+ auto isAdvancedCodec = [](const MediaProfiles::VideoCodec *vc) -> bool {
+ return ((vc->getBitDepth() != 8
+ || vc->getChromaSubsampling() != CHROMA_SUBSAMPLING_YUV_420
+ || vc->getHdrFormat() != HDR_FORMAT_NONE));
+ };
+ std::vector<jobject> codecVector;
for (const MediaProfiles::VideoCodec *vc : cp->getVideoCodecs()) {
+ if (isAdvancedCodec(vc) && !static_cast<bool>(advanced)) {
+ continue;
+ }
chroma_subsampling cs = vc->getChromaSubsampling();
int bitDepth = vc->getBitDepth();
hdr_format hdr = vc->getHdrFormat();
-
- bool isAdvanced =
- (bitDepth != 8 || cs != CHROMA_SUBSAMPLING_YUV_420 || hdr != HDR_FORMAT_NONE);
- if (static_cast<bool>(advanced) && !isAdvanced) {
- continue;
- }
-
jobject videoCodec = env->NewObject(videoProfileClazz,
videoProfileConstructorMethodID,
vc->getCodec(),
@@ -281,10 +281,17 @@ android_media_MediaProfiles_native_get_camcorder_profiles(JNIEnv *env, jobject /
static_cast<int>(cs),
bitDepth,
static_cast<int>(hdr));
- env->SetObjectArrayElement(videoCodecs, i++, videoCodec);
+
+ codecVector.push_back(videoCodec);
}
- }
+ videoCodecs = (jobjectArray)env->NewObjectArray(codecVector.size(),
+ videoProfileClazz, nullptr);
+ int i = 0;
+ for (jobject codecObj : codecVector) {
+ env->SetObjectArrayElement(videoCodecs, i++, codecObj);
+ }
+ }
jobjectArray audioCodecs;
if (quality >= CAMCORDER_QUALITY_TIME_LAPSE_LIST_START
&& quality <= CAMCORDER_QUALITY_TIME_LAPSE_LIST_END) {