LiTr icon indicating copy to clipboard operation
LiTr copied to clipboard

MediaCodec$CodecException: Error 0xffffec77 When trying to record video via CameraX while LiTr compressing

Open LiveInParadise opened this issue 2 years ago • 2 comments

This error happens in CameraX only when LiTr library doing compress

Receiving this error -

androidx.camera.video.internal.ResourceCreationException: androidx.camera.video.internal.encoder.InvalidConfigException: android.media.MediaCodec$CodecException: Error 0xffffec77

Here is a full log stack

androidx.camera.video.internal.ResourceCreationException: androidx.camera.video.internal.encoder.InvalidConfigException: android.media.MediaCodec$CodecException: Error 0xffffec77
	at androidx.camera.video.Recorder.setupVideo(Recorder.java:1333)
	at androidx.camera.video.Recorder.initializeInternal(Recorder.java:1012)
	at androidx.camera.video.Recorder.lambda$onSurfaceRequested$0$androidx-camera-video-Recorder(Recorder.java:427)
	at androidx.camera.video.Recorder$$ExternalSyntheticLambda16.run(Unknown Source:4)
	at androidx.camera.core.impl.utils.executor.SequentialExecutor$1.run(SequentialExecutor.java:111)
	at androidx.camera.core.impl.utils.executor.SequentialExecutor$QueueWorker.workOnQueue(SequentialExecutor.java:231)
	at androidx.camera.core.impl.utils.executor.SequentialExecutor$QueueWorker.run(SequentialExecutor.java:173)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
	at java.lang.Thread.run(Thread.java:764)
Caused by: androidx.camera.video.internal.encoder.InvalidConfigException: android.media.MediaCodec$CodecException: Error 0xffffec77
	at androidx.camera.video.internal.encoder.EncoderImpl.<init>(EncoderImpl.java:234)
	at androidx.camera.video.Recorder$$ExternalSyntheticLambda15.createEncoder(Unknown Source:2)
	at androidx.camera.video.Recorder.setupVideo(Recorder.java:1330)
	... 9 more
Caused by: android.media.MediaCodec$CodecException: Error 0xffffec77
	at android.media.MediaCodec.native_configure(Native Method)
	at android.media.MediaCodec.configure(MediaCodec.java:1943)
	at android.media.MediaCodec.configure(MediaCodec.java:1872)
	at androidx.camera.video.internal.encoder.EncoderImpl.reset(EncoderImpl.java:262)
	at androidx.camera.video.internal.encoder.EncoderImpl.<init>(EncoderImpl.java:232)

This is how I'm creating MediaFormat

private fun createVideoMediaFormat(trackFormat: VideoTrackFormat): MediaFormat {
        return MediaFormat().apply {
            setString(MediaFormat.KEY_MIME, "video/avc")
            setInteger(MediaFormat.KEY_WIDTH, trackFormat.width)
            setInteger(MediaFormat.KEY_HEIGHT, trackFormat.height)
            setInteger(MediaFormat.KEY_BIT_RATE, trackFormat.bitrate)
            setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, trackFormat.keyFrameInterval)
            setInteger(MediaFormat.KEY_FRAME_RATE, trackFormat.frameRate)
            setLong(MediaFormat.KEY_DURATION, trackFormat.duration)
            setInteger(KEY_ROTATION, trackFormat.rotation)
        }
    }

CameraX Recorder class has simple create method where I set highest supported quality -

 val recorder = Recorder.Builder().apply {
                        getVideoQuality()?.let {
                            setQualitySelector(QualitySelector.from(it))
                        }
                    }.build()

Can reproduce this on Samsung SM-J710FQ with Android 8

litr version - 1.5.4 CameraX - 1.2.1

What problem can it be?

LiveInParadise avatar Mar 21 '23 14:03 LiveInParadise

I don't think we experimented with CameraX yet. @IanDBird can you take a look when you get a moment?

izzytwosheds avatar Mar 24 '23 14:03 izzytwosheds

Hey 👋 Curious how you're integrating LiTr + CameraX. The current changes I landed recently really only support Camera2 as the API is more flexible about where the camera is rendering too. I have looked into proper CameraX support and was considering moving it to a separate module (since it requires a fair amount of dependencies).

If you're able to share how you're attaching CameraX, then happy to see if I can suggest a short term workaround until native support is ready?

IanDBird avatar Mar 24 '23 16:03 IanDBird