A bug in The Native Camera code of the Qualcomm Snapdragon devices

This is new bug that happens only on Samsung Qualcomm Snapdragon Android 11 devices. (Samsung Galaxy S21 Ultra 5G, Samsung Galaxy Note20 Ultra 5G,Samsung Galaxy S10+…)

I have no idea how to even start debugging it - any clue will be helpful

I have reported it to Samsung developer support a month ago - no answers until now,
It happens mostly when choosing high FPS like 60,120 or 240

backtrace:
#00 pc 000000000004ef24 /apex/com.android.runtime/lib64/bionic/libc.so (abort+164)
#00 pc 0000000000042b00 /apex/com.android.runtime/lib64/bionic/libc.so (scudo::die()+8)
#00 pc 0000000000042444 /apex/com.android.runtime/lib64/bionic/libc.so (scudo::dieOnMapUnmapError(bool)+56)
#00 pc 0000000000042bbc /apex/com.android.runtime/lib64/bionic/libc.so (scudo::map(void*, unsigned long, char const*, unsigned long, scudo::MapPlatformData*)+184)
#00 pc 000000000004655c /apex/com.android.runtime/lib64/bionic/libc.so (scudo::MapAllocator<scudo::MapAllocatorCache<256u, 256u, 33554432ul, 0, 1000> >::allocate(unsigned long, unsigned long, unsigned long*, bool)+408)
#00 pc 00000000000445a0 /apex/com.android.runtime/lib64/bionic/libc.so (scudo::Allocator<scudo::AndroidConfig, &(scudo_malloc_postinit)>::allocate(unsigned long, scudo::Chunk::Origin, unsigned long, bool)+864)
#00 pc 00000000000441c0 /apex/com.android.runtime/lib64/bionic/libc.so (scudo_calloc+48)
#00 pc 000000000003badc /apex/com.android.runtime/lib64/bionic/libc.so (calloc+52)
#00 pc 0000000000006fb8 /system/lib64/libcamera_metadata.so (allocate_camera_metadata+60)
#00 pc 000000000006377c /system/lib64/libcamera_client.so (android::CameraMetadata::resizeIfNeeded(unsigned long, unsigned long)+144)
#00 pc 0000000000063c10 /system/lib64/libcamera_client.so (android::CameraMetadata::updateImpl(unsigned int, void const*, unsigned long)+312)
#00 pc 0000000000154424 /system/lib64/libandroid_runtime.so (CameraMetadata_writeValues(_JNIEnv*, _jclass*, int, _jbyteArray*, long)+848)
#00 pc 000000000024df88 /system/framework/arm64/boot-framework.oat (art_jni_trampoline+200)
#00 pc 000000000200b640 /memfd:jit-cache (android.hardware.camera2.impl.CameraMetadataNative.setBase+752)
#00 pc 0000000002006e70 /memfd:jit-cache (android.hardware.camera2.impl.CameraMetadataNative.set+336)
#00 pc 0000000002003b50 /memfd:jit-cache (android.hardware.camera2.impl.CameraDeviceImpl$CameraDeviceCallbacks.onResultReceived+544)
#00 pc 0000000002002ff8 /memfd:jit-cache (android.hardware.camera2.ICameraDeviceCallbacks$Stub.onTransact+856)
#00 pc 000000000074e96c /system/framework/arm64/boot-framework.oat (android.os.Binder.execTransactInternal+844)
#00 pc 000000000074e4f8 /system/framework/arm64/boot-framework.oat (android.os.Binder.execTransact+296)
#00 pc 0000000000134564 /apex/com.android.art/lib64/libart.so (art_quick_invoke_stub+548)
#00 pc 0000000000198e94 /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+204)
#00 pc 00000000005320fc /apex/com.android.art/lib64/libart.so (art::(anonymous namespace)::InvokeWithArgArray(art::ScopedObjectAccessAlreadyRunnable const&, art::ArtMethod*, art::(anonymous namespace)::ArgArray*, art::JValue*, char const*)+104)
#00 pc 0000000000533698 /apex/com.android.art/lib64/libart.so (art::JValue art::InvokeVirtualOrInterfaceWithVarArgsart::ArtMethod*(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, art::ArtMethod*, std::__va_list)+448)
#00 pc 000000000053387c /apex/com.android.art/lib64/libart.so (art::JValue art::InvokeVirtualOrInterfaceWithVarArgs<_jmethodID*>(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, _jmethodID*, std::__va_list)+92)
#00 pc 000000000038e02c /apex/com.android.art/lib64/libart.so (art::JNI::CallBooleanMethodV(_JNIEnv*, _jobject*, _jmethodID*, std::__va_list)+660)
#00 pc 000000000009eaa8 /system/lib64/libandroid_runtime.so (_JNIEnv::CallBooleanMethod(_jobject*, _jmethodID*, …)+124)
#00 pc 000000000012cf8c /system/lib64/libandroid_runtime.so (JavaBBinder::onTransact(unsigned int, android::Parcel const&, android::Parcel*, unsigned int)+160)
#00 pc 000000000004a834 /system/lib64/libbinder.so (android::BBinder::transact(unsigned int, android::Parcel const&, android::Parcel*, unsigned int)+232)
#00 pc 0000000000053ab4 /system/lib64/libbinder.so (android::IPCThreadState::executeCommand(int)+700)
#00 pc 0000000000053748 /system/lib64/libbinder.so (android::IPCThreadState::getAndExecuteCommand()+156)
#00 pc 0000000000054304 /system/lib64/libbinder.so (android::IPCThreadState::joinThreadPool(bool)+116)
#00 pc 000000000007cdf4 /system/lib64/libbinder.so (android::PoolThread::threadLoop()+400)
#00 pc 000000000001553c /system/lib64/libutils.so (android::thread::_threadLoop(void*)+320)
#00 pc 00000000000a48a8 /system/lib64/libandroid_runtime.so (android::AndroidRuntime::javaThreadShell(void*)+144)
#00 pc 0000000000014db0 /system/lib64/libutils.so (thread_data_t::trampoline(thread_data_t const*)+408)
#00 pc 00000000000b6234 /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+64)
#00 pc 0000000000050e64 /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+64)

Hello, I think you might get better assistance if you submit a support request here

Hi, does this issue been solved? Any good news?

Guys, I’m also experiencing this, not with Camera but with video decoding! I’m trying to get JPGs from a videostream with ExoPlayer, and it seems to reproduce the same issue.

Here is my few-liner sample which reproduces the issue with 100% rate:

    @Override
    protected void onResume() {
        super.onResume();

        SimpleExoPlayer player = new SimpleExoPlayer.Builder(this)
                .setTrackSelector(new DefaultTrackSelector(this)).build();

        ImageReader imgReader = ImageReader.newInstance(1600, 900, ImageFormat.YUV_420_888, 5);
        imgReader.setOnImageAvailableListener(new ImageReader.OnImageAvailableListener() {
            @Override
            public void onImageAvailable(ImageReader imageReader) {
                Image i = imageReader.acquireLatestImage();
                Image.Plane[] planes = i.getPlanes();
                Log.d(TAG, "onImageAvailable! planes=" + planes.length);
                i.close();
            }
        }, null);

        player.setVideoSurface(imgReader.getSurface());

        // Build the media item.
        MediaItem mediaItem = MediaItem.fromUri("file:/android_asset/test.mp4");
        String playerInfo = Util.getUserAgent(getApplicationContext(), "ExoPlayerInfo");
        DefaultDataSourceFactory dataSourceFactory = new DefaultDataSourceFactory(
                getApplicationContext(), playerInfo
        );
        ProgressiveMediaSource mediaSource = new ProgressiveMediaSource.Factory(dataSourceFactory)
                .createMediaSource(mediaItem);
        player.setMediaSource(mediaSource);

        player.prepare();
        player.setPlayWhenReady(true);
    }

And here is my massive crash after calling i.getPlanes():

    runtime.cc:677] Aborting thread:
    runtime.cc:677] "main" prio=10 tid=1 Native
    runtime.cc:677]   | group="" sCount=0 dsCount=0 flags=0 obj=0x73e0a888 self=0xb4000077ce6f77b0
    runtime.cc:677]   | sysTid=4259 nice=-10 cgrp=default sched=0/0 handle=0x7956092500
    runtime.cc:677]   | state=R schedstat=( 711873541 65563277 322 ) utm=59 stm=11 core=5 HZ=100
    runtime.cc:677]   | stack=0x7fed265000-0x7fed267000 stackSize=8192KB
    runtime.cc:677]   | held mutexes= "abort lock"
    runtime.cc:677]   native: #00 pc 0000000000482fec  /apex/com.android.art/lib64/libart.so (art::DumpNativeStack(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, int, BacktraceMap*, char const*, art::ArtMethod*, void*, bool)+140)
    runtime.cc:677]   native: #01 pc 00000000005887ec  /apex/com.android.art/lib64/libart.so (art::Thread::DumpStack(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, bool, BacktraceMap*, bool) const+380)
    runtime.cc:677]   native: #02 pc 000000000054ed58  /apex/com.android.art/lib64/libart.so (art::AbortState::DumpThread(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, art::Thread*) const+60)
    runtime.cc:677]   native: #03 pc 000000000053b088  /apex/com.android.art/lib64/libart.so (art::Runtime::Abort(char const*)+2468)
    runtime.cc:677]   native: #04 pc 000000000001394c  /system/lib64/libbase.so (android::base::SetAborter(std::__1::function<void (char const*)>&&)::$_3::__invoke(char const*)+76)
    runtime.cc:677]   native: #05 pc 00000000000130cc  /system/lib64/libbase.so (android::base::LogMessage::~LogMessage()+312)
    runtime.cc:677]   native: #06 pc 00000000003728f4  /apex/com.android.art/lib64/libart.so (art::JavaVMExt::JniAbort(char const*, char const*)+2596)
    runtime.cc:677]   native: #07 pc 0000000000372a64  /apex/com.android.art/lib64/libart.so (art::JavaVMExt::JniAbortF(char const*, char const*, ...)+188)
    runtime.cc:677]   native: #08 pc 000000000044cd10  /apex/com.android.art/lib64/libart.so (art::JNI<true>::NewDirectByteBuffer(_JNIEnv*, void*, long)+120)
2021-05-08 15:50:42.685 4259-4259/com.simpleexo A/com.simpleexo: runtime.cc:677]   native: #09 pc 000000000036045c  /apex/com.android.art/lib64/libart.so (art::(anonymous namespace)::CheckJNI::NewDirectByteBuffer(_JNIEnv*, void*, long)+732)
    runtime.cc:677]   native: #10 pc 000000000003f21c  /system/lib64/libmedia_jni.so (Image_createSurfacePlanes(_JNIEnv*, _jobject*, int, int)+644)
    runtime.cc:677]   native: #11 pc 0000000000267158  /system/framework/arm64/boot-framework.oat (art_jni_trampoline+152)
    runtime.cc:677]   native: #12 pc 0000000000134564  /apex/com.android.art/lib64/libart.so (art_quick_invoke_stub+548)
    runtime.cc:677]   native: #13 pc 0000000000198e94  /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+204)
    runtime.cc:677]   native: #14 pc 000000000030c218  /apex/com.android.art/lib64/libart.so (art::interpreter::ArtInterpreterToCompiledCodeBridge(art::Thread*, art::ArtMethod*, art::ShadowFrame*, unsigned short, art::JValue*)+376)
    runtime.cc:677]   native: #15 pc 0000000000307330  /apex/com.android.art/lib64/libart.so (bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+884)
    runtime.cc:677]   native: #16 pc 000000000063d560  /apex/com.android.art/lib64/libart.so (MterpInvokeDirect+592)
    runtime.cc:677]   native: #17 pc 000000000012e914  /apex/com.android.art/lib64/libart.so (mterp_op_invoke_direct+20)
    runtime.cc:677]   native: #18 pc 00000000002c53c2  /system/framework/framework.jar (offset 9c6000) (android.media.ImageReader$SurfaceImage.getPlanes+38)
    runtime.cc:677]   native: #19 pc 000000000063b274  /apex/com.android.art/lib64/libart.so (MterpInvokeVirtual+1440)
    runtime.cc:677]   native: #20 pc 000000000012e814  /apex/com.android.art/lib64/libart.so (mterp_op_invoke_virtual+20)
    runtime.cc:677]   native: #21 pc 00000000000341e4  [anon:dalvik-classes2.dex extracted in memory from /data/app/~~u0NLYkEQuMK8mJleY_KKmw==/com.simpleexo-wWaMZV3df8lw4Eow4gTG8g==/base.apk!classes2.dex] (com.simpleexo.MainActivity$1.onImageAvailable+8)
    runtime.cc:677]   native: #22 pc 000000000063cc08  /apex/com.android.art/lib64/libart.so (MterpInvokeInterface+1840)
    runtime.cc:677]   native: #23 pc 000000000012ea14  /apex/com.android.art/lib64/libart.so (mterp_op_invoke_interface+20)
    runtime.cc:677]   native: #24 pc 00000000002c51f8  /system/framework/framework.jar (offset 9c6000) (android.media.ImageReader$ListenerHandler.handleMessage+72)
    runtime.cc:677]   native: #25 pc 000000000063b274  /apex/com.android.art/lib64/libart.so (MterpInvokeVirtual+1440)
    runtime.cc:677]   native: #26 pc 000000000012e814  /apex/com.android.art/lib64/libart.so (mterp_op_invoke_virtual+20)
    runtime.cc:677]   native: #27 pc 000000000040dd2a  /system/framework/framework.jar (offset 9c6000) (android.os.Handler.dispatchMessage+38)
    runtime.cc:677]   native: #28 pc 000000000063b274  /apex/com.android.art/lib64/libart.so (MterpInvokeVirtual+1440)
    runtime.cc:677]   native: #29 pc 000000000012e814  /apex/com.android.art/lib64/libart.so (mterp_op_invoke_virtual+20)
    runtime.cc:677]   native: #30 pc 000000000044d694  /system/framework/framework.jar (offset 9c6000) (android.os.Looper.loop+480)
    runtime.cc:677]   native: #31 pc 00000000002fed0c  /apex/com.android.art/lib64/libart.so (art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool, bool) (.llvm.2255279045661746555)+268)
    runtime.cc:677]   native: #32 pc 00000000003069d4  /apex/com.android.art/lib64/libart.so (art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame*, art::JValue*)+200)
    runtime.cc:677]   native: #33 pc 0000000000307cb4  /apex/com.android.art/lib64/libart.so (bool art::interpreter::DoCall<false, true>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+1780)
2021-05-08 15:50:42.685 4259-4259/com.simpleexo A/com.simpleexo: runtime.cc:677]   native: #34 pc 000000000016f3e4  /apex/com.android.art/lib64/libart.so (void art::interpreter::ExecuteSwitchImplCpp<true, false>(art::interpreter::SwitchImplContext*)+54148)
    runtime.cc:677]   native: #35 pc 00000000001407d8  /apex/com.android.art/lib64/libart.so (ExecuteSwitchImplAsm+8)
    runtime.cc:677]   native: #36 pc 00000000001caf80  /system/framework/framework.jar (android.app.ActivityThread.main)
    runtime.cc:677]   native: #37 pc 00000000002fee14  /apex/com.android.art/lib64/libart.so (art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool, bool) (.llvm.2255279045661746555)+532)
    runtime.cc:677]   native: #38 pc 00000000006299e8  /apex/com.android.art/lib64/libart.so (artQuickToInterpreterBridge+796)
    runtime.cc:677]   native: #39 pc 000000000013dff8  /apex/com.android.art/lib64/libart.so (art_quick_to_interpreter_bridge+88)
    runtime.cc:677]   native: #40 pc 00000000001347e8  /apex/com.android.art/lib64/libart.so (art_quick_invoke_static_stub+568)
    runtime.cc:677]   native: #41 pc 0000000000198eb0  /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+232)
    runtime.cc:677]   native: #42 pc 00000000005320fc  /apex/com.android.art/lib64/libart.so (art::(anonymous namespace)::InvokeWithArgArray(art::ScopedObjectAccessAlreadyRunnable const&, art::ArtMethod*, art::(anonymous namespace)::ArgArray*, art::JValue*, char const*)+104)
    runtime.cc:677]   native: #43 pc 0000000000533df0  /apex/com.android.art/lib64/libart.so (art::InvokeMethod(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, _jobject*, _jobject*, unsigned long)+1352)
    runtime.cc:677]   native: #44 pc 00000000004b53fc  /apex/com.android.art/lib64/libart.so (art::Method_invoke(_JNIEnv*, _jobject*, _jobject*, _jobjectArray*)+52)
    runtime.cc:677]   native: #45 pc 000000000008a6f4  /apex/com.android.art/javalib/arm64/boot.oat (art_jni_trampoline+180)
    runtime.cc:677]   native: #46 pc 0000000000134564  /apex/com.android.art/lib64/libart.so (art_quick_invoke_stub+548)
    runtime.cc:677]   native: #47 pc 0000000000198e94  /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+204)
    runtime.cc:677]   native: #48 pc 000000000030c218  /apex/com.android.art/lib64/libart.so (art::interpreter::ArtInterpreterToCompiledCodeBridge(art::Thread*, art::ArtMethod*, art::ShadowFrame*, unsigned short, art::JValue*)+376)
    runtime.cc:677]   native: #49 pc 0000000000307330  /apex/com.android.art/lib64/libart.so (bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+884)
    runtime.cc:677]   native: #50 pc 000000000063b038  /apex/com.android.art/lib64/libart.so (MterpInvokeVirtual+868)
    runtime.cc:677]   native: #51 pc 000000000012e814  /apex/com.android.art/lib64/libart.so (mterp_op_invoke_virtual+20)
    runtime.cc:677]   native: #52 pc 0000000000230132  /system/framework/framework.jar (offset 1bee000) (com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run+22)
    runtime.cc:677]   native: #53 pc 00000000002fed0c  /apex/com.android.art/lib64/libart.so (art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool, bool) (.llvm.2255279045661746555)+268)
    runtime.cc:677]   native: #54 pc 00000000006299e8  /apex/com.android.art/lib64/libart.so (artQuickToInterpreterBridge+796)
    runtime.cc:677]   native: #55 pc 000000000013dff8  /apex/com.android.art/lib64/libart.so (art_quick_to_interpreter_bridge+88)
    runtime.cc:677]   native: #56 pc 0000000000b0193c  /system/framework/arm64/boot-framework.oat (com.android.internal.os.ZygoteInit.main+2444)
    runtime.cc:677]   native: #57 pc 00000000001347e8  /apex/com.android.art/lib64/libart.so (art_quick_invoke_static_stub+568)
2021-05-08 15:50:42.685 4259-4259/com.simpleexo A/com.simpleexo: runtime.cc:677]   native: #58 pc 0000000000198eb0  /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+232)
    runtime.cc:677]   native: #59 pc 00000000005320fc  /apex/com.android.art/lib64/libart.so (art::(anonymous namespace)::InvokeWithArgArray(art::ScopedObjectAccessAlreadyRunnable const&, art::ArtMethod*, art::(anonymous namespace)::ArgArray*, art::JValue*, char const*)+104)
    runtime.cc:677]   native: #60 pc 0000000000531cf4  /apex/com.android.art/lib64/libart.so (art::JValue art::InvokeWithVarArgs<art::ArtMethod*>(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, art::ArtMethod*, std::__va_list)+428)
    runtime.cc:677]   native: #61 pc 0000000000532c5c  /apex/com.android.art/lib64/libart.so (art::JValue art::InvokeWithVarArgs<_jmethodID*>(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, _jmethodID*, std::__va_list)+92)
    runtime.cc:677]   native: #62 pc 00000000004249b8  /apex/com.android.art/lib64/libart.so (art::JNI<true>::CallStaticVoidMethodV(_JNIEnv*, _jclass*, _jmethodID*, std::__va_list)+656)
    runtime.cc:677]   native: #63 pc 000000000009c434  /system/lib64/libandroid_runtime.so (_JNIEnv::CallStaticVoidMethod(_jclass*, _jmethodID*, ...)+124)
    runtime.cc:677]   native: #64 pc 00000000000a4574  /system/lib64/libandroid_runtime.so (android::AndroidRuntime::start(char const*, android::Vector<android::String8> const&, bool)+848)
    runtime.cc:677]   native: #65 pc 000000000000358c  /system/bin/app_process64 (main+1348)
    runtime.cc:677]   native: #66 pc 000000000004a1e4  /apex/com.android.runtime/lib64/bionic/libc.so (__libc_init+108)
    runtime.cc:677]   at android.media.ImageReader$SurfaceImage.nativeCreatePlanes(Native method)
    runtime.cc:677]   - locked <0x0eec253e> (a android.media.ImageReader$SurfaceImage)
    runtime.cc:677]   at android.media.ImageReader$SurfaceImage.getPlanes(ImageReader.java:912)
    runtime.cc:677]   at com.simpleexo.MainActivity$1.onImageAvailable(MainActivity.java:136)
    runtime.cc:677]   at android.media.ImageReader$ListenerHandler.handleMessage(ImageReader.java:812)
    runtime.cc:677]   at android.os.Handler.dispatchMessage(Handler.java:106)
    runtime.cc:677]   at android.os.Looper.loop(Looper.java:246)
    runtime.cc:677]   at android.app.ActivityThread.main(ActivityThread.java:8506)
    runtime.cc:677]   at java.lang.reflect.Method.invoke(Native method)
    runtime.cc:677]   at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
    runtime.cc:677]   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)
    runtime.cc:677] 
2021-05-08 15:50:42.685 4259-4259/com.simpleexo A/com.simpleexo: runtime.cc:685] JNI DETECTED ERROR IN APPLICATION: non-zero capacity for nullptr pointer: 1
    runtime.cc:685]     in call to NewDirectByteBuffer
    runtime.cc:685]     from android.media.ImageReader$SurfaceImage$SurfacePlane[] android.media.ImageReader$SurfaceImage.nativeCreatePlanes(int, int)
    
    --------- beginning of crash
2021-05-08 15:50:42.686 4259-4259/com.simpleexo A/libc: Fatal signal 6 (SIGABRT), code -1 (SI_QUEUE) in tid 4259 (com.simpleexo), pid 4259 (com.simpleexo)

One more addition: same code is working perfectly on x86-based Android Emulator! (I also created a ticket), but Samsung guys, is this serious? It takes months to resolve nullptr issue? :smiley:
I guess you’re out of luck when hiring developers…

I have seen several Samsung android bugs, including native layer, camera driver. They never reply directly or fix it. They ignore it or tell you post to other groups. They don’t forward it to the correct team, everyone does not want to take responsibility, or does not have the ability to analyze the problem

I have seen a lot of crashes only on Samsung Android 11.

Actually, my above code also can not be run on earlier (non-Samsung) Qualcomm chips (Android 9), and also doesn’t run on current Kirin-based (Huawei) device.

But, the difference between these devices and Samsung is that Samsung is actually crashing worse than these, as Samsung’s crash can not be caught by Java’s default try-catch paradigm whereas others only results in a standard Exception which is well catchable.

To me this seems a general problem with my above code, but noone could point me yet to the right direction for some weird reason :slight_smile:

I’m not familiar with the ImageReader. Seems your issues is caused by the unsupported surface size or format. Sometimes the phone vendors may don’t implement Google API well, they should throw exceptions, but they didn’t validate the params of function in native layer. It may be an issue of Google or the vendor.
There are also width and height limitations on video decoder, not sure about the ImageReader. Before using a fixed size, it’s better to query the video size constraints.

Hmm. that seems to give some lights! I always tried with know image size, video is for sure 1600x900. But maybe when decoding it has different dimensions?

By any chance, do you have any idea how can I retrieve the correct size from the video?

VLC says: video resolution=1600x900, but buffer dimensions is 1600x930! :open_mouth:

Sorry, I’m not familiar with it. I’m using the hardware encoder, not decoder. I’m not sure if you are using the MediaCodec. The MediaCodec can get: MediaCodecInfo.CodecCapabilities=> getVideoCapabilities =>MediaCodecInfo.VideoCapabilities: VideoCapabilities.getSupportedWidths.