summaryrefslogtreecommitdiffstats
path: root/media/jni
diff options
context:
space:
mode:
Diffstat (limited to 'media/jni')
-rw-r--r--media/jni/android_media_MediaProfiles.cpp52
-rw-r--r--media/jni/android_media_MediaRecorder.cpp17
-rw-r--r--media/jni/android_media_MediaScanner.cpp57
-rwxr-xr-xmedia/jni/mediaeditor/VideoEditorClasses.cpp7
-rwxr-xr-xmedia/jni/mediaeditor/VideoEditorPropertiesMain.cpp12
5 files changed, 89 insertions, 56 deletions
diff --git a/media/jni/android_media_MediaProfiles.cpp b/media/jni/android_media_MediaProfiles.cpp
index 08a6de1..2b8dfe4 100644
--- a/media/jni/android_media_MediaProfiles.cpp
+++ b/media/jni/android_media_MediaProfiles.cpp
@@ -286,6 +286,44 @@ android_media_MediaProfiles_native_get_image_encoding_quality_level(JNIEnv *env,
}
return static_cast<jint>(levels[index]);
}
+static jobject
+android_media_MediaProfiles_native_get_videoeditor_profile(JNIEnv *env, jobject thiz)
+{
+ LOGV("native_get_videoeditor_profile");
+
+ int maxInputFrameWidth =
+ sProfiles->getVideoEditorCapParamByName("videoeditor.input.width.max");
+ int maxInputFrameHeight =
+ sProfiles->getVideoEditorCapParamByName("videoeditor.input.height.max");
+ int maxOutputFrameWidth =
+ sProfiles->getVideoEditorCapParamByName("videoeditor.output.width.max");
+ int maxOutputFrameHeight =
+ sProfiles->getVideoEditorCapParamByName("videoeditor.output.height.max");
+
+ // Check on the values retrieved
+ if (maxInputFrameWidth == -1 || maxInputFrameHeight == -1 ||
+ maxOutputFrameWidth == -1 || maxOutputFrameHeight == -1) {
+
+ jniThrowException(env, "java/lang/RuntimeException",\
+ "Error retrieving videoeditor profile params");
+ return NULL;
+ }
+ LOGV("native_get_videoeditor_profile \
+ inWidth:%d inHeight:%d,outWidth:%d, outHeight:%d",\
+ maxInputFrameWidth,maxInputFrameHeight,\
+ maxOutputFrameWidth,maxOutputFrameHeight);
+
+ jclass VideoEditorProfileClazz =
+ env->FindClass("android/media/videoeditor/VideoEditorProfile");
+ jmethodID VideoEditorProfileConstructorMethodID =
+ env->GetMethodID(VideoEditorProfileClazz, "<init>", "(IIII)V");
+ return env->NewObject(VideoEditorProfileClazz,
+ VideoEditorProfileConstructorMethodID,
+ maxInputFrameWidth,
+ maxInputFrameHeight,
+ maxOutputFrameWidth,
+ maxOutputFrameHeight);
+}
static JNINativeMethod gMethodsForEncoderCapabilitiesClass[] = {
{"native_init", "()V", (void *)android_media_MediaProfiles_native_init},
@@ -324,10 +362,17 @@ static JNINativeMethod gMethodsForCameraProfileClass[] = {
{"native_get_image_encoding_quality_level","(II)I", (void *)android_media_MediaProfiles_native_get_image_encoding_quality_level},
};
+static JNINativeMethod gMethodsForVideoEditorProfileClass[] = {
+ {"native_init", "()V", (void *)android_media_MediaProfiles_native_init},
+ {"native_get_videoeditor_profile", "()Landroid/media/videoeditor/VideoEditorProfile;",
+ (void *)android_media_MediaProfiles_native_get_videoeditor_profile},
+};
+
static const char* const kEncoderCapabilitiesClassPathName = "android/media/EncoderCapabilities";
static const char* const kDecoderCapabilitiesClassPathName = "android/media/DecoderCapabilities";
static const char* const kCamcorderProfileClassPathName = "android/media/CamcorderProfile";
static const char* const kCameraProfileClassPathName = "android/media/CameraProfile";
+static const char* const kVideoEditorProfileClassPathName = "android/media/videoeditor/VideoEditorProfile";
// This function only registers the native methods, and is called from
// JNI_OnLoad in android_media_MediaPlayer.cpp
@@ -353,6 +398,11 @@ int register_android_media_MediaProfiles(JNIEnv *env)
gMethodsForCameraProfileClass,
NELEM(gMethodsForCameraProfileClass));
+ int ret5 = AndroidRuntime::registerNativeMethods(env,
+ kVideoEditorProfileClassPathName,
+ gMethodsForVideoEditorProfileClass,
+ NELEM(gMethodsForVideoEditorProfileClass));
+
// Success if all return values from above are 0
- return (ret1 || ret2 || ret3 || ret4);
+ return (ret1 || ret2 || ret3 || ret4 || ret5);
}
diff --git a/media/jni/android_media_MediaRecorder.cpp b/media/jni/android_media_MediaRecorder.cpp
index 12391c8..922f7ed 100644
--- a/media/jni/android_media_MediaRecorder.cpp
+++ b/media/jni/android_media_MediaRecorder.cpp
@@ -127,7 +127,7 @@ static bool process_media_recorder_call(JNIEnv *env, status_t opStatus, const ch
return false;
}
-static sp<MediaRecorder> getMediaRecorder(JNIEnv* env, jobject thiz)
+sp<MediaRecorder> getMediaRecorder(JNIEnv* env, jobject thiz)
{
Mutex::Autolock l(sLock);
MediaRecorder* const p = (MediaRecorder*)env->GetIntField(thiz, fields.context);
@@ -261,20 +261,6 @@ android_media_MediaRecorder_setOutputFileFD(JNIEnv *env, jobject thiz, jobject f
}
static void
-android_media_MediaRecorder_setOutputFileAuxFD(JNIEnv *env, jobject thiz, jobject fileDescriptor)
-{
- LOGV("setOutputFile");
- if (fileDescriptor == NULL) {
- jniThrowException(env, "java/lang/IllegalArgumentException", NULL);
- return;
- }
- int fd = jniGetFDFromFileDescriptor(env, fileDescriptor);
- sp<MediaRecorder> mr = getMediaRecorder(env, thiz);
- status_t opStatus = mr->setOutputFileAuxiliary(fd);
- process_media_recorder_call(env, opStatus, "java/io/IOException", "setOutputFile failed.");
-}
-
-static void
android_media_MediaRecorder_setVideoSize(JNIEnv *env, jobject thiz, jint width, jint height)
{
LOGV("setVideoSize(%d, %d)", width, height);
@@ -475,7 +461,6 @@ static JNINativeMethod gMethods[] = {
{"setAudioEncoder", "(I)V", (void *)android_media_MediaRecorder_setAudioEncoder},
{"setParameter", "(Ljava/lang/String;)V", (void *)android_media_MediaRecorder_setParameter},
{"_setOutputFile", "(Ljava/io/FileDescriptor;JJ)V", (void *)android_media_MediaRecorder_setOutputFileFD},
- {"_setOutputFileAux", "(Ljava/io/FileDescriptor;)V", (void *)android_media_MediaRecorder_setOutputFileAuxFD},
{"setVideoSize", "(II)V", (void *)android_media_MediaRecorder_setVideoSize},
{"setVideoFrameRate", "(I)V", (void *)android_media_MediaRecorder_setVideoFrameRate},
{"setMaxDuration", "(I)V", (void *)android_media_MediaRecorder_setMaxDuration},
diff --git a/media/jni/android_media_MediaScanner.cpp b/media/jni/android_media_MediaScanner.cpp
index d0d2d1e..b88296f 100644
--- a/media/jni/android_media_MediaScanner.cpp
+++ b/media/jni/android_media_MediaScanner.cpp
@@ -46,6 +46,16 @@ struct fields_t {
};
static fields_t fields;
+static status_t checkAndClearExceptionFromCallback(JNIEnv* env, const char* methodName) {
+ if (env->ExceptionCheck()) {
+ LOGE("An exception was thrown by callback '%s'.", methodName);
+ LOGE_EX(env);
+ env->ExceptionClear();
+ return UNKNOWN_ERROR;
+ }
+ return OK;
+}
+
class MyMediaScannerClient : public MediaScannerClient
{
public:
@@ -86,9 +96,7 @@ public:
mEnv->DeleteGlobalRef(mClient);
}
- // Returns true if it succeeded, false if an exception occured
- // in the Java code
- virtual bool scanFile(const char* path, long long lastModified,
+ virtual status_t scanFile(const char* path, long long lastModified,
long long fileSize, bool isDirectory, bool noMedia)
{
LOGV("scanFile: path(%s), time(%lld), size(%lld) and isDir(%d)",
@@ -96,27 +104,29 @@ public:
jstring pathStr;
if ((pathStr = mEnv->NewStringUTF(path)) == NULL) {
- return false;
+ mEnv->ExceptionClear();
+ return NO_MEMORY;
}
mEnv->CallVoidMethod(mClient, mScanFileMethodID, pathStr, lastModified,
fileSize, isDirectory, noMedia);
mEnv->DeleteLocalRef(pathStr);
- return (!mEnv->ExceptionCheck());
+ return checkAndClearExceptionFromCallback(mEnv, "scanFile");
}
- // Returns true if it succeeded, false if an exception occured
- // in the Java code
- virtual bool handleStringTag(const char* name, const char* value)
+ virtual status_t handleStringTag(const char* name, const char* value)
{
LOGV("handleStringTag: name(%s) and value(%s)", name, value);
jstring nameStr, valueStr;
if ((nameStr = mEnv->NewStringUTF(name)) == NULL) {
- return false;
+ mEnv->ExceptionClear();
+ return NO_MEMORY;
}
if ((valueStr = mEnv->NewStringUTF(value)) == NULL) {
- return false;
+ mEnv->DeleteLocalRef(nameStr);
+ mEnv->ExceptionClear();
+ return NO_MEMORY;
}
mEnv->CallVoidMethod(
@@ -124,23 +134,22 @@ public:
mEnv->DeleteLocalRef(nameStr);
mEnv->DeleteLocalRef(valueStr);
- return (!mEnv->ExceptionCheck());
+ return checkAndClearExceptionFromCallback(mEnv, "handleStringTag");
}
- // Returns true if it succeeded, false if an exception occured
- // in the Java code
- virtual bool setMimeType(const char* mimeType)
+ virtual status_t setMimeType(const char* mimeType)
{
LOGV("setMimeType: %s", mimeType);
jstring mimeTypeStr;
if ((mimeTypeStr = mEnv->NewStringUTF(mimeType)) == NULL) {
- return false;
+ mEnv->ExceptionClear();
+ return NO_MEMORY;
}
mEnv->CallVoidMethod(mClient, mSetMimeTypeMethodID, mimeTypeStr);
mEnv->DeleteLocalRef(mimeTypeStr);
- return (!mEnv->ExceptionCheck());
+ return checkAndClearExceptionFromCallback(mEnv, "setMimeType");
}
private:
@@ -152,12 +161,6 @@ private:
};
-static bool ExceptionCheck(void* env)
-{
- LOGV("ExceptionCheck");
- return ((JNIEnv *)env)->ExceptionCheck();
-}
-
static MediaScanner *getNativeScanner_l(JNIEnv* env, jobject thiz)
{
return (MediaScanner *) env->GetIntField(thiz, fields.context);
@@ -190,7 +193,10 @@ android_media_MediaScanner_processDirectory(
}
MyMediaScannerClient myClient(env, client);
- mp->processDirectory(pathStr, myClient, ExceptionCheck, env);
+ MediaScanResult result = mp->processDirectory(pathStr, myClient);
+ if (result == MEDIA_SCAN_RESULT_ERROR) {
+ LOGE("An error occurred while scanning directory '%s'.", pathStr);
+ }
env->ReleaseStringUTFChars(path, pathStr);
}
@@ -227,7 +233,10 @@ android_media_MediaScanner_processFile(
}
MyMediaScannerClient myClient(env, client);
- mp->processFile(pathStr, mimeTypeStr, myClient);
+ MediaScanResult result = mp->processFile(pathStr, mimeTypeStr, myClient);
+ if (result == MEDIA_SCAN_RESULT_ERROR) {
+ LOGE("An error occurred while scanning file '%s'.", pathStr);
+ }
env->ReleaseStringUTFChars(path, pathStr);
if (mimeType) {
env->ReleaseStringUTFChars(mimeType, mimeTypeStr);
diff --git a/media/jni/mediaeditor/VideoEditorClasses.cpp b/media/jni/mediaeditor/VideoEditorClasses.cpp
index 277e16c..4c0e731 100755
--- a/media/jni/mediaeditor/VideoEditorClasses.cpp
+++ b/media/jni/mediaeditor/VideoEditorClasses.cpp
@@ -439,9 +439,10 @@ VIDEOEDIT_JAVA_DEFINE_CONSTANTS(VideoFrameSize)
VIDEOEDIT_JAVA_CONSTANT_INIT("NTSC", M4VIDEOEDITING_kNTSC),
VIDEOEDIT_JAVA_CONSTANT_INIT("nHD", M4VIDEOEDITING_k640_360),
VIDEOEDIT_JAVA_CONSTANT_INIT("WVGA16x9", M4VIDEOEDITING_k854_480),
- VIDEOEDIT_JAVA_CONSTANT_INIT("V720p", M4VIDEOEDITING_kHD1280),
- VIDEOEDIT_JAVA_CONSTANT_INIT("W720p", M4VIDEOEDITING_kHD1080),
- VIDEOEDIT_JAVA_CONSTANT_INIT("S720p", M4VIDEOEDITING_kHD960)
+ VIDEOEDIT_JAVA_CONSTANT_INIT("V720p", M4VIDEOEDITING_k1280_720),
+ VIDEOEDIT_JAVA_CONSTANT_INIT("W720p", M4VIDEOEDITING_k1080_720),
+ VIDEOEDIT_JAVA_CONSTANT_INIT("S720p", M4VIDEOEDITING_k960_720),
+ VIDEOEDIT_JAVA_CONSTANT_INIT("V1080p", M4VIDEOEDITING_k1920_1080)
};
VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(VideoFrameSize, VIDEO_FRAME_SIZE_CLASS_NAME,
diff --git a/media/jni/mediaeditor/VideoEditorPropertiesMain.cpp b/media/jni/mediaeditor/VideoEditorPropertiesMain.cpp
index 9de7207..93fe702 100755
--- a/media/jni/mediaeditor/VideoEditorPropertiesMain.cpp
+++ b/media/jni/mediaeditor/VideoEditorPropertiesMain.cpp
@@ -214,18 +214,6 @@ jobject videoEditProp_getProperties(
"Invalid File or File not found ");
}
- /**
- * Max resolution supported is 1280 x 720.
- */
- if ( (pClipProperties->uiVideoWidth > 1280)
- || (pClipProperties->uiVideoHeight > 720) )
- {
- result = M4MCS_ERR_INVALID_INPUT_VIDEO_FRAME_SIZE;
- videoEditJava_checkAndThrowIllegalArgumentException(
- &gotten, pEnv, (M4NO_ERROR != result),
- "Unsupported input video frame size");
- }
-
#ifdef USE_SOFTWARE_DECODER
/**
* Input clip with non-multiples of 16 is not supported.