diff --git a/media/java/android/media/CamcorderProfile.java b/media/java/android/media/CamcorderProfile.java index f6f0a590f0546..b4fdcb9ba2cf0 100644 --- a/media/java/android/media/CamcorderProfile.java +++ b/media/java/android/media/CamcorderProfile.java @@ -602,39 +602,7 @@ public class CamcorderProfile } catch (NumberFormatException e) { return null; } - CamcorderProfile cp = native_get_camcorder_profile(id, quality); - if (cp == null) { - return null; - }; - - EncoderProfiles.AudioProfile[] audioProfiles; - // timelapse profiles do not list audio profiles - if (cp.quality >= QUALITY_TIME_LAPSE_LIST_START - && cp.quality <= QUALITY_TIME_LAPSE_LIST_END) { - audioProfiles = new EncoderProfiles.AudioProfile[] { }; - } else { - audioProfiles = new EncoderProfiles.AudioProfile[] { - new EncoderProfiles.AudioProfile( - cp.audioCodec, - cp.audioChannels, - cp.audioSampleRate, - cp.audioBitRate) - }; - } - - return new EncoderProfiles( - cp.duration, - cp.fileFormat, - new EncoderProfiles.VideoProfile[] { - new EncoderProfiles.VideoProfile( - cp.videoCodec, - cp.videoFrameWidth, - cp.videoFrameHeight, - cp.videoFrameRate, - cp.videoBitRate, - 0 /* TODO: get profile */) - }, - audioProfiles); + return native_get_camcorder_profiles(id, quality); } /** @@ -743,6 +711,8 @@ public class CamcorderProfile @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private static native final CamcorderProfile native_get_camcorder_profile( int cameraId, int quality); + private static native final EncoderProfiles native_get_camcorder_profiles( + int cameraId, int quality); private static native final boolean native_has_camcorder_profile( int cameraId, int quality); } diff --git a/media/java/android/media/EncoderProfiles.java b/media/java/android/media/EncoderProfiles.java index d9eabbd4903fa..ec8ce2960281c 100644 --- a/media/java/android/media/EncoderProfiles.java +++ b/media/java/android/media/EncoderProfiles.java @@ -181,7 +181,7 @@ public final class EncoderProfiles /** * The video encoder profile being used for the video track. *
- * This value is 0 if there is no profile defined for the video codec. + * This value is negative if there is no profile defined for the video codec. * * @see MediaRecorder#setVideoEncodingProfileLevel * @see MediaFormat#KEY_PROFILE @@ -293,7 +293,7 @@ public final class EncoderProfiles /** * The audio encoder profile being used for the audio track *
- * This value is 0 if there is no profile defined for the audio codec.
+ * This value is negative if there is no profile defined for the audio codec.
* @see MediaFormat#KEY_PROFILE
*/
public int getProfile() {
diff --git a/media/jni/android_media_MediaProfiles.cpp b/media/jni/android_media_MediaProfiles.cpp
index 5bc80925eca44..7e9b6c7440868 100644
--- a/media/jni/android_media_MediaProfiles.cpp
+++ b/media/jni/android_media_MediaProfiles.cpp
@@ -223,6 +223,86 @@ android_media_MediaProfiles_native_get_camcorder_profile(JNIEnv *env, jobject /*
audioChannels);
}
+static jobject
+android_media_MediaProfiles_native_get_camcorder_profiles(JNIEnv *env, jobject /* thiz */, jint id,
+ jint quality)
+{
+ ALOGV("native_get_camcorder_profiles: %d %d", id, quality);
+ if (!isCamcorderQualityKnown(quality)) {
+ jniThrowException(env, "java/lang/RuntimeException", "Unknown camcorder profile quality");
+ return NULL;
+ }
+
+ camcorder_quality q = static_cast