diff options
author | James Dong <jdong@google.com> | 2010-02-11 14:32:13 -0800 |
---|---|---|
committer | James Dong <jdong@google.com> | 2010-02-12 18:15:45 -0800 |
commit | d32fba411f2710ad66681466674c8243f2ca3454 (patch) | |
tree | ce2d9ec6488b7e409fe94331cca66c429412e8ac /media/jni/android_media_MediaProfiles.cpp | |
parent | 87c2b15d398fccf4f9d3ab49bc3e0b3e8a99759d (diff) | |
download | frameworks_base-d32fba411f2710ad66681466674c8243f2ca3454.zip frameworks_base-d32fba411f2710ad66681466674c8243f2ca3454.tar.gz frameworks_base-d32fba411f2710ad66681466674c8243f2ca3454.tar.bz2 |
Support decoder queries from media profiles xml configuration file
Diffstat (limited to 'media/jni/android_media_MediaProfiles.cpp')
-rw-r--r-- | media/jni/android_media_MediaProfiles.cpp | 71 |
1 files changed, 63 insertions, 8 deletions
diff --git a/media/jni/android_media_MediaProfiles.cpp b/media/jni/android_media_MediaProfiles.cpp index 50380c1..19132c5 100644 --- a/media/jni/android_media_MediaProfiles.cpp +++ b/media/jni/android_media_MediaProfiles.cpp @@ -44,14 +44,14 @@ android_media_MediaProfiles_native_init(JNIEnv *env) } } -static int +static jint android_media_MediaProfiles_native_get_num_file_formats(JNIEnv *env, jobject thiz) { LOGV("native_get_num_file_formats"); return sProfiles->getOutputFileFormats().size(); } -static int +static jint android_media_MediaProfiles_native_get_file_format(JNIEnv *env, jobject thiz, jint index) { LOGV("native_get_file_format: %d", index); @@ -61,11 +61,10 @@ android_media_MediaProfiles_native_get_file_format(JNIEnv *env, jobject thiz, ji jniThrowException(env, "java/lang/IllegalArgumentException", "out of array boundary"); return -1; } - int format = static_cast<int>(formats[index]); - return format; + return static_cast<jint>(formats[index]); } -static int +static jint android_media_MediaProfiles_native_get_num_video_encoders(JNIEnv *env, jobject thiz) { LOGV("native_get_num_video_encoders"); @@ -116,7 +115,7 @@ android_media_MediaProfiles_native_get_video_encoder_cap(JNIEnv *env, jobject th return cap; } -static int +static jint android_media_MediaProfiles_native_get_num_audio_encoders(JNIEnv *env, jobject thiz) { LOGV("native_get_num_audio_encoders"); @@ -209,6 +208,48 @@ android_media_MediaProfiles_native_get_camcorder_profile(JNIEnv *env, jobject th audioChannels); } +static jint +android_media_MediaProfiles_native_get_num_video_decoders(JNIEnv *env, jobject thiz) +{ + LOGV("native_get_num_video_decoders"); + return sProfiles->getVideoDecoders().size(); +} + +static jint +android_media_MediaProfiles_native_get_video_decoder_type(JNIEnv *env, jobject thiz, jint index) +{ + LOGV("native_get_video_decoder_type: %d", index); + Vector<video_decoder> decoders = sProfiles->getVideoDecoders(); + int nSize = decoders.size(); + if (index < 0 || index >= nSize) { + jniThrowException(env, "java/lang/IllegalArgumentException", "out of array boundary"); + return -1; + } + + return static_cast<jint>(decoders[index]); +} + +static jint +android_media_MediaProfiles_native_get_num_audio_decoders(JNIEnv *env, jobject thiz) +{ + LOGV("native_get_num_audio_decoders"); + return sProfiles->getAudioDecoders().size(); +} + +static jint +android_media_MediaProfiles_native_get_audio_decoder_type(JNIEnv *env, jobject thiz, jint index) +{ + LOGV("native_get_audio_decoder_type: %d", index); + Vector<audio_decoder> decoders = sProfiles->getAudioDecoders(); + int nSize = decoders.size(); + if (index < 0 || index >= nSize) { + jniThrowException(env, "java/lang/IllegalArgumentException", "out of array boundary"); + return -1; + } + + return static_cast<jint>(decoders[index]); +} + static JNINativeMethod gMethodsForEncoderCapabilitiesClass[] = { {"native_init", "()V", (void *)android_media_MediaProfiles_native_init}, {"native_get_num_file_formats", "()I", (void *)android_media_MediaProfiles_native_get_num_file_formats}, @@ -229,7 +270,16 @@ static JNINativeMethod gMethodsForCamcorderProfileClass[] = { (void *)android_media_MediaProfiles_native_get_camcorder_profile}, }; +static JNINativeMethod gMethodsForDecoderCapabilitiesClass[] = { + {"native_init", "()V", (void *)android_media_MediaProfiles_native_init}, + {"native_get_num_video_decoders", "()I", (void *)android_media_MediaProfiles_native_get_num_video_decoders}, + {"native_get_num_audio_decoders", "()I", (void *)android_media_MediaProfiles_native_get_num_audio_decoders}, + {"native_get_video_decoder_type", "(I)I", (void *)android_media_MediaProfiles_native_get_video_decoder_type}, + {"native_get_audio_decoder_type", "(I)I", (void *)android_media_MediaProfiles_native_get_audio_decoder_type}, +}; + static const char* const kEncoderCapabilitiesClassPathName = "android/media/EncoderCapabilities"; +static const char* const kDecoderCapabilitiesClassPathName = "android/media/DecoderCapabilities"; static const char* const kCamcorderProfileClassPathName = "android/media/CamcorderProfile"; // This function only registers the native methods, and is called from @@ -246,6 +296,11 @@ int register_android_media_MediaProfiles(JNIEnv *env) gMethodsForCamcorderProfileClass, NELEM(gMethodsForCamcorderProfileClass)); - // Success if ret1 == 0 && ret2 == 0 - return (ret1 || ret2); + int ret3 = AndroidRuntime::registerNativeMethods(env, + kDecoderCapabilitiesClassPathName, + gMethodsForDecoderCapabilitiesClass, + NELEM(gMethodsForDecoderCapabilitiesClass)); + + // Success if ret1 == 0 && ret2 == 0 && ret3 == 0 + return (ret1 || ret2 || ret3); } |