[android-developers] Re: java.lang.IllegalStateException in Media.configure() with the new MediaCodec API
Hi guys.
You have to set several meta value for use MediaCodec Encoder.
Encoder need width, hegith, bitrate(KEY_BIT_RATE), frame-rate(KEY_FRAME_RATE) keys value for configure.
MediaFormat mFormat = MediaFormat.createVideoFormat("video/avc",getWidth, getHeight);
mFormat.setInteger(KEY_BIT_RATE, value);
mFormat.setInteger(KEY_FRAME_RATE, value);
codec.configure( mFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
Thanks.
Lee.
2012년 9월 18일 화요일 오후 12시 7분 29초 UTC+9, David Hagege 님의 말:
-- 2012년 9월 18일 화요일 오후 12시 7분 29초 UTC+9, David Hagege 님의 말:
Hi,I have a strange issue regarding the new MediaCodec API on Jellybean.The native function android.media.MediaCodec.native_configure is throwing a java.lang. IllegalStateException. I'm using the OMX.TI.DUCATI1.VIDEO.H264E codec on a Galaxy Nexus (maguro).Here is my Scala code:class ScreenshotView(context: Context, attr: AttributeSet, style: Int)
extends SurfaceView(context, attr, style) with SurfaceHolder.Callback {
private def startEncoder = {
var surface = getHolder.getSurface
var codec: MediaCodec = MediaCodec.createEncoderByType("video/ avc")
codec.configure(MediaFormat.createVideoFormat("video/avc",
getWidth, getHeight), surface, null, MediaCodec.CONFIGURE_FLAG_ENCODE)
}
}When calling the startEncoder method, the codec.configure() fails.Here is what I can see in the logcat:I/OMXClient( 1193): Using client-side OMX mux.
E/OHELP ( 1193): CODEC:android.media.MediaCodec@42124b70
E/OHELP ( 1193): MediaFormat:{height=1038, width=720, mime=video/avc}
E/ACodec ( 1193): [OMX.TI.DUCATI1.VIDEO.H264E] configureCodec returning error -38
E/MediaCodec( 1193): Codec reported an error. (omx error 0x80001001, internalError -38)
D/AndroidRuntime( 1193): Shutting down VM
W/dalvikvm( 1193): threadid=1: thread exiting with uncaught exception (group=0x41bf3300)
E/AndroidRuntime( 1193): FATAL EXCEPTION: main
E/AndroidRuntime( 1193): java.lang.IllegalStateException
E/AndroidRuntime( 1193): at android.media.MediaCodec.native_configure(Native Method)
E/AndroidRuntime( 1193): at android.media.MediaCodec.configure(MediaCodec.java:257) If I'm looking at the JNI, here is where the exception is thrown (frameworks/base/media/jni/android_media_MediaCodec.cpp: 338):
static jint throwExceptionAsNecessary(
JNIEnv *env, status_t err, const char *msg = NULL) {
if (err >= ERROR_DRM_WV_VENDOR_MIN && err <= ERROR_DRM_WV_VENDOR_MAX) {
// We'll throw our custom MediaCodec.CryptoException
throwCryptoException(env, err, msg);
return 0;
}
switch (err) {
case OK:
return 0;
case -EAGAIN:
return DEQUEUE_INFO_TRY_AGAIN_LATER;
case INFO_FORMAT_CHANGED:
return DEQUEUE_INFO_OUTPUT_FORMAT_CHANGED;
case INFO_OUTPUT_BUFFERS_CHANGED:
return DEQUEUE_INFO_OUTPUT_BUFFERS_CHANGED;
default:
{
jniThrowException(env, "java/lang/IllegalStateException", NULL); /// I'm getting there
break;
}
}
return 0;
}This call is made in the last line of android_media_MediaCodec_native_configure() (line 389): err = codec->configure(format, surfaceTexture, crypto, flags);
throwExceptionAsNecessary(env, err);Is there anything I'm doing wrong?My surface is valid (isValid() is returning true). Everything passed to codec->configure() in the JNI seems to be ok too.Any clues?Thanks,
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscribe@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
0 Comments:
Post a Comment
Subscribe to Post Comments [Atom]
<< Home