summaryrefslogtreecommitdiffstats
path: root/media/jni
diff options
context:
space:
mode:
Diffstat (limited to 'media/jni')
-rw-r--r--media/jni/android_media_MediaCodec.cpp40
-rw-r--r--media/jni/android_media_MediaCodec.h2
-rw-r--r--media/jni/android_media_MediaCodecList.cpp22
-rw-r--r--media/jni/android_media_MediaScanner.cpp53
-rw-r--r--media/jni/audioeffect/android_media_AudioEffect.cpp7
-rw-r--r--[-rwxr-xr-x]media/jni/mediaeditor/Android.mk0
-rw-r--r--[-rwxr-xr-x]media/jni/mediaeditor/VideoBrowserInternal.h0
-rw-r--r--[-rwxr-xr-x]media/jni/mediaeditor/VideoBrowserMain.c0
-rw-r--r--[-rwxr-xr-x]media/jni/mediaeditor/VideoBrowserMain.h0
-rw-r--r--[-rwxr-xr-x]media/jni/mediaeditor/VideoEditorClasses.cpp0
-rw-r--r--[-rwxr-xr-x]media/jni/mediaeditor/VideoEditorClasses.h0
-rw-r--r--[-rwxr-xr-x]media/jni/mediaeditor/VideoEditorJava.cpp0
-rw-r--r--[-rwxr-xr-x]media/jni/mediaeditor/VideoEditorJava.h0
-rw-r--r--[-rwxr-xr-x]media/jni/mediaeditor/VideoEditorLogging.h0
-rw-r--r--[-rwxr-xr-x]media/jni/mediaeditor/VideoEditorMain.cpp0
-rw-r--r--[-rwxr-xr-x]media/jni/mediaeditor/VideoEditorOsal.cpp0
-rw-r--r--[-rwxr-xr-x]media/jni/mediaeditor/VideoEditorOsal.h0
-rw-r--r--[-rwxr-xr-x]media/jni/mediaeditor/VideoEditorPropertiesMain.cpp0
-rw-r--r--[-rwxr-xr-x]media/jni/mediaeditor/VideoEditorThumbnailMain.cpp0
-rw-r--r--[-rwxr-xr-x]media/jni/mediaeditor/VideoEditorThumbnailMain.h0
20 files changed, 117 insertions, 7 deletions
diff --git a/media/jni/android_media_MediaCodec.cpp b/media/jni/android_media_MediaCodec.cpp
index f91c9a0..dab2de1 100644
--- a/media/jni/android_media_MediaCodec.cpp
+++ b/media/jni/android_media_MediaCodec.cpp
@@ -264,6 +264,20 @@ status_t JMediaCodec::getBuffers(
return OK;
}
+status_t JMediaCodec::getName(JNIEnv *env, jstring *nameStr) const {
+ AString name;
+
+ status_t err = mCodec->getName(&name);
+
+ if (err != OK) {
+ return err;
+ }
+
+ *nameStr = env->NewStringUTF(name.c_str());
+
+ return OK;
+}
+
void JMediaCodec::setVideoScalingMode(int mode) {
if (mSurfaceTextureClient != NULL) {
native_window_set_scaling_mode(mSurfaceTextureClient.get(), mode);
@@ -706,6 +720,29 @@ static jobjectArray android_media_MediaCodec_getBuffers(
return NULL;
}
+static jobject android_media_MediaCodec_getName(
+ JNIEnv *env, jobject thiz) {
+ ALOGV("android_media_MediaCodec_getName");
+
+ sp<JMediaCodec> codec = getMediaCodec(env, thiz);
+
+ if (codec == NULL) {
+ jniThrowException(env, "java/lang/IllegalStateException", NULL);
+ return NULL;
+ }
+
+ jstring name;
+ status_t err = codec->getName(env, &name);
+
+ if (err == OK) {
+ return name;
+ }
+
+ throwExceptionAsNecessary(env, err);
+
+ return NULL;
+}
+
static void android_media_MediaCodec_setVideoScalingMode(
JNIEnv *env, jobject thiz, jint mode) {
sp<JMediaCodec> codec = getMediaCodec(env, thiz);
@@ -826,6 +863,9 @@ static JNINativeMethod gMethods[] = {
{ "getBuffers", "(Z)[Ljava/nio/ByteBuffer;",
(void *)android_media_MediaCodec_getBuffers },
+ { "getName", "()Ljava/lang/String;",
+ (void *)android_media_MediaCodec_getName },
+
{ "setVideoScalingMode", "(I)V",
(void *)android_media_MediaCodec_setVideoScalingMode },
diff --git a/media/jni/android_media_MediaCodec.h b/media/jni/android_media_MediaCodec.h
index 4936b53..bc9ad50 100644
--- a/media/jni/android_media_MediaCodec.h
+++ b/media/jni/android_media_MediaCodec.h
@@ -81,6 +81,8 @@ struct JMediaCodec : public RefBase {
status_t getBuffers(
JNIEnv *env, bool input, jobjectArray *bufArray) const;
+ status_t getName(JNIEnv *env, jstring *name) const;
+
void setVideoScalingMode(int mode);
protected:
diff --git a/media/jni/android_media_MediaCodecList.cpp b/media/jni/android_media_MediaCodecList.cpp
index 0638b4a..04430ec 100644
--- a/media/jni/android_media_MediaCodecList.cpp
+++ b/media/jni/android_media_MediaCodecList.cpp
@@ -44,6 +44,25 @@ static jstring android_media_MediaCodecList_getCodecName(
return env->NewStringUTF(name);
}
+static jint android_media_MediaCodecList_findCodecByName(
+ JNIEnv *env, jobject thiz, jstring name) {
+ if (name == NULL) {
+ jniThrowException(env, "java/lang/IllegalArgumentException", NULL);
+ return -ENOENT;
+ }
+
+ const char *nameStr = env->GetStringUTFChars(name, NULL);
+
+ if (nameStr == NULL) {
+ // Out of memory exception already pending.
+ return -ENOENT;
+ }
+
+ jint ret = MediaCodecList::getInstance()->findCodecByName(nameStr);
+ env->ReleaseStringUTFChars(name, nameStr);
+ return ret;
+}
+
static jboolean android_media_MediaCodecList_isEncoder(
JNIEnv *env, jobject thiz, jint index) {
return MediaCodecList::getInstance()->isEncoder(index);
@@ -180,6 +199,9 @@ static JNINativeMethod gMethods[] = {
"(ILjava/lang/String;)Landroid/media/MediaCodecInfo$CodecCapabilities;",
(void *)android_media_MediaCodecList_getCodecCapabilities },
+ { "findCodecByName", "(Ljava/lang/String;)I",
+ (void *)android_media_MediaCodecList_findCodecByName },
+
{ "native_init", "()V", (void *)android_media_MediaCodecList_native_init },
};
diff --git a/media/jni/android_media_MediaScanner.cpp b/media/jni/android_media_MediaScanner.cpp
index f930a03..5d27966 100644
--- a/media/jni/android_media_MediaScanner.cpp
+++ b/media/jni/android_media_MediaScanner.cpp
@@ -19,7 +19,6 @@
#define LOG_TAG "MediaScannerJNI"
#include <utils/Log.h>
#include <utils/threads.h>
-#include <utils/Unicode.h>
#include <media/mediascanner.h>
#include <media/stagefright/StagefrightMediaScanner.h>
@@ -57,6 +56,53 @@ static status_t checkAndClearExceptionFromCallback(JNIEnv* env, const char* meth
return OK;
}
+// stolen from dalvik/vm/checkJni.cpp
+static bool isValidUtf8(const char* bytes) {
+ while (*bytes != '\0') {
+ unsigned char utf8 = *(bytes++);
+ // Switch on the high four bits.
+ switch (utf8 >> 4) {
+ case 0x00:
+ case 0x01:
+ case 0x02:
+ case 0x03:
+ case 0x04:
+ case 0x05:
+ case 0x06:
+ case 0x07:
+ // Bit pattern 0xxx. No need for any extra bytes.
+ break;
+ case 0x08:
+ case 0x09:
+ case 0x0a:
+ case 0x0b:
+ case 0x0f:
+ /*
+ * Bit pattern 10xx or 1111, which are illegal start bytes.
+ * Note: 1111 is valid for normal UTF-8, but not the
+ * modified UTF-8 used here.
+ */
+ return false;
+ case 0x0e:
+ // Bit pattern 1110, so there are two additional bytes.
+ utf8 = *(bytes++);
+ if ((utf8 & 0xc0) != 0x80) {
+ return false;
+ }
+ // Fall through to take care of the final byte.
+ case 0x0c:
+ case 0x0d:
+ // Bit pattern 110x, so there is one additional byte.
+ utf8 = *(bytes++);
+ if ((utf8 & 0xc0) != 0x80) {
+ return false;
+ }
+ break;
+ }
+ }
+ return true;
+}
+
class MyMediaScannerClient : public MediaScannerClient
{
public:
@@ -124,11 +170,8 @@ public:
mEnv->ExceptionClear();
return NO_MEMORY;
}
-
- // Check if the value is valid UTF-8 string and replace
- // any un-printable characters with '?' when it's not.
char *cleaned = NULL;
- if (utf8_length(value) == -1) {
+ if (!isValidUtf8(value)) {
cleaned = strdup(value);
char *chp = cleaned;
char ch;
diff --git a/media/jni/audioeffect/android_media_AudioEffect.cpp b/media/jni/audioeffect/android_media_AudioEffect.cpp
index 3b325b7..bcab4f3 100644
--- a/media/jni/audioeffect/android_media_AudioEffect.cpp
+++ b/media/jni/audioeffect/android_media_AudioEffect.cpp
@@ -705,7 +705,7 @@ android_media_AudioEffect_native_queryEffects(JNIEnv *env, jclass clazz)
{
effect_descriptor_t desc;
char str[EFFECT_STRING_LEN_MAX];
- uint32_t numEffects;
+ uint32_t numEffects = 0;
uint32_t i = 0;
jstring jdescType;
jstring jdescUuid;
@@ -714,7 +714,10 @@ android_media_AudioEffect_native_queryEffects(JNIEnv *env, jclass clazz)
jstring jdescImplementor;
jobject jdesc;
- AudioEffect::queryNumberEffects(&numEffects);
+ if (AudioEffect::queryNumberEffects(&numEffects) != NO_ERROR) {
+ return NULL;
+ }
+
jobjectArray ret = env->NewObjectArray(numEffects, fields.clazzDesc, NULL);
if (ret == NULL) {
return ret;
diff --git a/media/jni/mediaeditor/Android.mk b/media/jni/mediaeditor/Android.mk
index 040d2ab..040d2ab 100755..100644
--- a/media/jni/mediaeditor/Android.mk
+++ b/media/jni/mediaeditor/Android.mk
diff --git a/media/jni/mediaeditor/VideoBrowserInternal.h b/media/jni/mediaeditor/VideoBrowserInternal.h
index f4eaab8..f4eaab8 100755..100644
--- a/media/jni/mediaeditor/VideoBrowserInternal.h
+++ b/media/jni/mediaeditor/VideoBrowserInternal.h
diff --git a/media/jni/mediaeditor/VideoBrowserMain.c b/media/jni/mediaeditor/VideoBrowserMain.c
index c6c6000..c6c6000 100755..100644
--- a/media/jni/mediaeditor/VideoBrowserMain.c
+++ b/media/jni/mediaeditor/VideoBrowserMain.c
diff --git a/media/jni/mediaeditor/VideoBrowserMain.h b/media/jni/mediaeditor/VideoBrowserMain.h
index 00b5e05..00b5e05 100755..100644
--- a/media/jni/mediaeditor/VideoBrowserMain.h
+++ b/media/jni/mediaeditor/VideoBrowserMain.h
diff --git a/media/jni/mediaeditor/VideoEditorClasses.cpp b/media/jni/mediaeditor/VideoEditorClasses.cpp
index 4982a47..4982a47 100755..100644
--- a/media/jni/mediaeditor/VideoEditorClasses.cpp
+++ b/media/jni/mediaeditor/VideoEditorClasses.cpp
diff --git a/media/jni/mediaeditor/VideoEditorClasses.h b/media/jni/mediaeditor/VideoEditorClasses.h
index a4c82a8..a4c82a8 100755..100644
--- a/media/jni/mediaeditor/VideoEditorClasses.h
+++ b/media/jni/mediaeditor/VideoEditorClasses.h
diff --git a/media/jni/mediaeditor/VideoEditorJava.cpp b/media/jni/mediaeditor/VideoEditorJava.cpp
index bcf9099..bcf9099 100755..100644
--- a/media/jni/mediaeditor/VideoEditorJava.cpp
+++ b/media/jni/mediaeditor/VideoEditorJava.cpp
diff --git a/media/jni/mediaeditor/VideoEditorJava.h b/media/jni/mediaeditor/VideoEditorJava.h
index 0a2db08..0a2db08 100755..100644
--- a/media/jni/mediaeditor/VideoEditorJava.h
+++ b/media/jni/mediaeditor/VideoEditorJava.h
diff --git a/media/jni/mediaeditor/VideoEditorLogging.h b/media/jni/mediaeditor/VideoEditorLogging.h
index 479d8b6..479d8b6 100755..100644
--- a/media/jni/mediaeditor/VideoEditorLogging.h
+++ b/media/jni/mediaeditor/VideoEditorLogging.h
diff --git a/media/jni/mediaeditor/VideoEditorMain.cpp b/media/jni/mediaeditor/VideoEditorMain.cpp
index 41c28c0..41c28c0 100755..100644
--- a/media/jni/mediaeditor/VideoEditorMain.cpp
+++ b/media/jni/mediaeditor/VideoEditorMain.cpp
diff --git a/media/jni/mediaeditor/VideoEditorOsal.cpp b/media/jni/mediaeditor/VideoEditorOsal.cpp
index a8c08ac..a8c08ac 100755..100644
--- a/media/jni/mediaeditor/VideoEditorOsal.cpp
+++ b/media/jni/mediaeditor/VideoEditorOsal.cpp
diff --git a/media/jni/mediaeditor/VideoEditorOsal.h b/media/jni/mediaeditor/VideoEditorOsal.h
index 7a6f5ea..7a6f5ea 100755..100644
--- a/media/jni/mediaeditor/VideoEditorOsal.h
+++ b/media/jni/mediaeditor/VideoEditorOsal.h
diff --git a/media/jni/mediaeditor/VideoEditorPropertiesMain.cpp b/media/jni/mediaeditor/VideoEditorPropertiesMain.cpp
index c8fb263..c8fb263 100755..100644
--- a/media/jni/mediaeditor/VideoEditorPropertiesMain.cpp
+++ b/media/jni/mediaeditor/VideoEditorPropertiesMain.cpp
diff --git a/media/jni/mediaeditor/VideoEditorThumbnailMain.cpp b/media/jni/mediaeditor/VideoEditorThumbnailMain.cpp
index 1508246..1508246 100755..100644
--- a/media/jni/mediaeditor/VideoEditorThumbnailMain.cpp
+++ b/media/jni/mediaeditor/VideoEditorThumbnailMain.cpp
diff --git a/media/jni/mediaeditor/VideoEditorThumbnailMain.h b/media/jni/mediaeditor/VideoEditorThumbnailMain.h
index 0b3b0c8..0b3b0c8 100755..100644
--- a/media/jni/mediaeditor/VideoEditorThumbnailMain.h
+++ b/media/jni/mediaeditor/VideoEditorThumbnailMain.h