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+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to