[Android] problem with egladaption/eglglessink on some devices/emulator and fatal error

Distran Distran distran.sensors at gmail.com
Wed Oct 16 03:00:54 PDT 2013


Hey all.

I am a getting to know GStreamer. I was trying to develop a simple Android
application that would receive a network stream generated on Desktop pc. I
got stuck in displaying simple video (e.g. videotestsrc) on some of my
Android devices and I have no clue where to go next.

First the description of my setup. For development I am using Nexus 10
(Android 4.3, API 18), Android emulators (different API's, tested on API's
9, 10, 16, 17) and a phone LG-P990 (Android 2.3.4, API 10). I develop on
Ubuntu 13.04 (64 bit) and I am using Android NDK r9 (newest one). I was
trying to run tutorial 3 from the website (
http://docs.gstreamer.com/display/GstSDK/Android+tutorial+3%3A+Video) using
two GStreamer SDK's:
- GStreamer SDK 2013.6 (Congo, avalible at
http://cdn.gstreamer.com/android/arm/gstreamer-sdk-android-arm-debug-2013.6.tar.bz2
)
- GStreamer 1.2 (newest one, avalible at
http://gstreamer.freedesktop.org/data/pkg/android/1.2.0/gstreamer-1.0-android-arm-1.2.0-debug.tar.bz2
)

Of course, running tutorial 3 using GStreamer 1.2 required some minor
changes in code:
- Android.mk:
    change GSTREAMER_SDK_ROOT to GSTREAMER_ROOT, so that it fits the
variable defined at gstreamer-1.0.mk
    change gstreamer.mk to gstreamer-1.0.mk and gstreamer-video-0.10 to
gstreamer-video-1.0 (and also remove interfaces)
- tutorial-3.c
    change #include <gst/interfaces/xoverlay.h> to #include
<gst/video/videooverlay.h>
    change all occurences of "x_overlay" string to "video_overlay"
        change ffmpegcolorspace to videoconvert

Taking into consideration those changes, I was able to run demos on LG-P990
phone (Android 2.3.4), but I was not able to make it work neither on Nexus
10 nor any of emulators. I get different errors from Nexus and from
emulators, but I feel the origin of those errors is the same.

>From what I inferred, the problem is connected with creating the surface to
display video. In both cases (emulator and Nexus 10) the error is generated
after invoking nativePause() in Tutorial3.java - line 108 (which invokes
gst_native_pause of tutorial-3.c line 247, where gst_element_set_state
(data->pipeline, GST_STATE_PAUSED) function is invoked).

Function gst_element_set_state (data->pipeline, GST_STATE_PAUSED) is being
succesfully invoked and afterwards the error appears. Here is the part of
log from Emulator where error occurs (full log listed at the end of the
post):
<raw>
0-15 12:55:33.406: D/GStreamer+tutorial-3(518): 0:01:21.432822137 0x784460
jni/tutorial-3.c:92:set_ui_message Setting message to: State changed to
READY
10-15 12:55:33.636: D/GStreamer+eglglessink(518): 0:01:21.662179397
0x79f180
gsteglglessink.c:1162:gst_eglglessink_setcaps:<autovideosink2-actual-sink-eglgles>
Current caps 0x0, setting caps 0x798fa0
10-15 12:55:33.636: D/GStreamer+eglglessink(518): 0:01:21.662682301
0x79f180
gsteglglessink.c:1033:gst_eglglessink_show_frame:<autovideosink2-actual-sink-eglgles>
Got buffer: 0x7b5b10
10-15 12:55:33.636: D/GStreamer+eglglessink(518): 0:01:21.663674144
0x79f180
gsteglglessink.c:706:gst_eglglessink_queue_buffer:<autovideosink2-actual-sink-eglgles>
Queueing buffer 0x7b5b10
10-15 12:55:33.636: D/GStreamer+eglglessink(518): 0:01:21.664201190
0x795860
gsteglglessink.c:262:render_thread_func:<autovideosink2-actual-sink-eglgles>
Handling object 0x7b5b10
10-15 12:55:33.646: E/GStreamer+egladaption(518): 0:01:21.664622353
0x795860
gstegladaptation.c:338:gst_egl_adaptation_choose_config:<autovideosink2-actual-sink-eglgles>
Could not find matching framebuffer config
10-15 12:55:33.646: E/GStreamer+egladaption(518): 0:01:21.664853550
0x795860
gstegladaptation.c:351:gst_egl_adaptation_choose_config:<autovideosink2-actual-sink-eglgles>
Couldn't choose an usable config
10-15 12:55:33.646: E/GStreamer+eglglessink(518): 0:01:21.665080672
0x795860
gsteglglessink.c:1106:gst_eglglessink_configure_caps:<autovideosink2-actual-sink-eglgles>
Couldn't choose EGL config
10-15 12:55:33.646: E/GStreamer+eglglessink(518): 0:01:21.665306559
0x795860
gsteglglessink.c:1149:gst_eglglessink_configure_caps:<autovideosink2-actual-sink-eglgles>
Configuring caps failed
10-15 12:55:33.646: D/GStreamer+eglglessink(518): 0:01:21.667165446
0x79f180
gsteglglessink.c:718:gst_eglglessink_queue_buffer:<autovideosink2-actual-sink-eglgles>
Waiting for buffer to be rendered
10-15 12:55:33.646: D/GStreamer+eglglessink(518): 0:01:21.667635710
0x795860
gsteglglessink.c:318:render_thread_func:<autovideosink2-actual-sink-eglgles>
Shutting down thread
10-15 12:55:33.646: D/GStreamer+egladaption(518): 0:01:21.667885634
0x795860
gstegladaptation_egl.c:269:gst_egl_adaptation_make_current:<autovideosink2-actual-sink-eglgles>
Detaching context from thread 0x795860
</raw>

and below there is part of the log where error happens on Nexus device
(full log listed below):
<raw>
10-16 11:39:39.303: D/GStreamer+tutorial-3(2855): 0:00:17.576086508
0x738a2dc0 jni/tutorial-3.c:250:gst_native_pause Setting state to PAUSED
10-16 11:39:39.463: D/mali_winsys(2855): new_window_surface returns 0x3000
10-16 11:39:39.463: A/libc(2855): Fatal signal 8 (SIGFPE) at 0x00000b27
(code=-6), thread 2927 (eglglessink-ren)
10-16 11:39:39.878: D/GStreamer+tutorial-3(2855): 0:00:18.147828675
0x738a30c0 jni/tutorial-3.c:88:set_ui_message Setting message to: State
changed to PAUSED
</raw>

An error on Emulator from GStreamer1.2 is slightly different (more elements
report) but apart from some more warnings the same errors appear.

Could any of you reproduce such error, or happened to see it before? Do you
have any advice on how to proceed further (my aim is to get in running on
Nexus 10 device, and running on emulator would be also nice). I have tried
to research problem on the internet, but I couldn't find any information
concerning those errors.

Thanks in advance for your help!

Regards,
Michal


Full log for Emulator:
<raw>
10-15 12:55:31.846: I/GStreamer(518): GStreamer already initialized
10-15 12:55:32.346: I/GStreamer(518): Activity created. There is no saved
state, playing: false
10-15 12:55:32.346: D/GStreamer+tutorial-3(518): 0:01:20.366688478 0x76f180
jni/tutorial-3.c:220:gst_native_init Created CustomData at 0x7b1308
10-15 12:55:32.346: D/GStreamer+tutorial-3(518): 0:01:20.367614399 0x76f180
jni/tutorial-3.c:222:gst_native_init Created GlobalRef for app object at
0x40524e30
10-15 12:55:32.346: I/GStreamer(518): onMeasure called with 320x240
10-15 12:55:32.396: D/GStreamer+tutorial-3(518): 0:01:20.420183247 0x784460
jni/tutorial-3.c:156:app_function Creating pipeline in CustomData at
0x7b1308
10-15 12:55:32.536: D/GStreamer(518): Surface created: Surface(name=null,
identity=34)
10-15 12:55:32.546: D/GStreamer(518): Surface changed to format 4 width 557
height 418
10-15 12:55:32.546: D/GStreamer+tutorial-3(518): 0:01:20.565598112 0x76f180
jni/tutorial-3.c:278:gst_native_surface_init Received surface 0x40522e48
(native window 0x79e610)
10-15 12:55:32.616: I/GStreamer(518): onMeasure called with 320x240
10-15 12:55:33.206: D/GStreamer+egladaption(518): 0:01:21.227959088
0x784460
gstegladaptation_egl.c:131:gst_egl_adaptation_init_display:<autovideosink2-actual-sink-eglgles>
Enter EGL initial configuration
10-15 12:55:33.206: I/GStreamer+egladaption(518): 0:01:21.228411565
0x784460
gstegladaptation_egl.c:172:gst_egl_adaptation_init_display:<autovideosink2-actual-sink-eglgles>
System reports supported EGL version v1.4
10-15 12:55:33.206: D/GStreamer+egladaption(518): 0:01:21.232498401
0x784460
gstegladaptation.c:362:gst_egl_adaptation_fill_supported_fbuffer_configs:<autovideosink2-actual-sink-eglgles>
Building initial list of wanted eglattribs per format
10-15 12:55:33.216: D/GStreamer+tutorial-3(518): 0:01:21.237238972 0x784460
jni/tutorial-3.c:192:app_function Entering main loop...
(CustomData:0x7b1308)
10-15 12:55:33.216: D/GStreamer+tutorial-3(518): 0:01:21.238231246 0x784460
jni/tutorial-3.c:54:attach_current_thread Attaching thread 0x784460
10-15 12:55:33.216: D/GStreamer+tutorial-3(518): 0:01:21.240439716 0x784460
jni/tutorial-3.c:134:check_initialization_complete Initialization complete,
notifying application. native_window:0x79e610 main_loop:0xf76a0
10-15 12:55:33.216: D/GStreamer+eglglessink(518): 0:01:21.240906894
0x784460
gsteglglessink.c:647:gst_eglglessink_set_window_handle:<autovideosink2-actual-sink-eglgles>
We got a window handle: 0x79e610
10-15 12:55:33.216: I/GStreamer(518): Gst initialized. Restoring state,
playing:false
10-15 12:55:33.216: D/GStreamer+tutorial-3(518): 0:01:21.241555194 0x784460
jni/tutorial-3.c:254:gst_native_pause Setting state to PAUSED
10-15 12:55:33.216: D/GStreamer+eglglessink(518): 0:01:21.243261247
0x784460
gsteglglessink.c:345:gst_eglglessink_start:<autovideosink2-actual-sink-eglgles>
Starting
10-15 12:55:33.216: D/GStreamer+eglglessink(518): 0:01:21.243988965
0x784460
gsteglglessink.c:380:gst_eglglessink_start:<autovideosink2-actual-sink-eglgles>
Started
10-15 12:55:33.226: D/GStreamer+eglglessink(518): 0:01:21.250997677
0x795860
gsteglglessink.c:252:render_thread_func:<autovideosink2-actual-sink-eglgles>
posting ENTER stream status
10-15 12:55:33.406: D/GStreamer+tutorial-3(518): 0:01:21.432822137 0x784460
jni/tutorial-3.c:92:set_ui_message Setting message to: State changed to
READY
10-15 12:55:33.636: D/GStreamer+eglglessink(518): 0:01:21.662179397
0x79f180
gsteglglessink.c:1162:gst_eglglessink_setcaps:<autovideosink2-actual-sink-eglgles>
Current caps 0x0, setting caps 0x798fa0
10-15 12:55:33.636: D/GStreamer+eglglessink(518): 0:01:21.662682301
0x79f180
gsteglglessink.c:1033:gst_eglglessink_show_frame:<autovideosink2-actual-sink-eglgles>
Got buffer: 0x7b5b10
10-15 12:55:33.636: D/GStreamer+eglglessink(518): 0:01:21.663674144
0x79f180
gsteglglessink.c:706:gst_eglglessink_queue_buffer:<autovideosink2-actual-sink-eglgles>
Queueing buffer 0x7b5b10
10-15 12:55:33.636: D/GStreamer+eglglessink(518): 0:01:21.664201190
0x795860
gsteglglessink.c:262:render_thread_func:<autovideosink2-actual-sink-eglgles>
Handling object 0x7b5b10
10-15 12:55:33.646: E/GStreamer+egladaption(518): 0:01:21.664622353
0x795860
gstegladaptation.c:338:gst_egl_adaptation_choose_config:<autovideosink2-actual-sink-eglgles>
Could not find matching framebuffer config
10-15 12:55:33.646: E/GStreamer+egladaption(518): 0:01:21.664853550
0x795860
gstegladaptation.c:351:gst_egl_adaptation_choose_config:<autovideosink2-actual-sink-eglgles>
Couldn't choose an usable config
10-15 12:55:33.646: E/GStreamer+eglglessink(518): 0:01:21.665080672
0x795860
gsteglglessink.c:1106:gst_eglglessink_configure_caps:<autovideosink2-actual-sink-eglgles>
Couldn't choose EGL config
10-15 12:55:33.646: E/GStreamer+eglglessink(518): 0:01:21.665306559
0x795860
gsteglglessink.c:1149:gst_eglglessink_configure_caps:<autovideosink2-actual-sink-eglgles>
Configuring caps failed
10-15 12:55:33.646: D/GStreamer+eglglessink(518): 0:01:21.667165446
0x79f180
gsteglglessink.c:718:gst_eglglessink_queue_buffer:<autovideosink2-actual-sink-eglgles>
Waiting for buffer to be rendered
10-15 12:55:33.646: D/GStreamer+eglglessink(518): 0:01:21.667635710
0x795860
gsteglglessink.c:318:render_thread_func:<autovideosink2-actual-sink-eglgles>
Shutting down thread
10-15 12:55:33.646: D/GStreamer+egladaption(518): 0:01:21.667885634
0x795860
gstegladaptation_egl.c:269:gst_egl_adaptation_make_current:<autovideosink2-actual-sink-eglgles>
Detaching context from thread 0x795860
10-15 12:55:33.646: D/GStreamer+eglglessink(518): 0:01:21.668215328
0x795860
gsteglglessink.c:333:render_thread_func:<autovideosink2-actual-sink-eglgles>
posting LEAVE stream status
10-15 12:55:33.646: D/GStreamer+eglglessink(518): 0:01:21.669378653
0x79f180
gsteglglessink.c:721:gst_eglglessink_queue_buffer:<autovideosink2-actual-sink-eglgles>
Buffer rendered: wrong-state
</raw>

Full log from Android device:
<raw>
10-16 11:39:22.118: I/GStreamer(2855): onMeasure called with 320x240
10-16 11:39:22.138: D/mali_winsys(2855): new_window_surface returns 0x3000
10-16 11:39:22.168: D/OpenGLRenderer(2855): Enabling debug mode 0
10-16 11:39:22.183: D/GStreamer(2855): Surface created: Surface(name=null)
10-16 11:39:23.218: D/dalvikvm(2855): threadid=1: still suspended after
undo (sc=1 dc=1)
10-16 11:39:28.748: D/GStreamer(2855): Surface changed to format 4 width
1525 height 1144
10-16 11:39:29.978: D/GStreamer+tutorial-3(2855): 0:00:08.248850170
0x738a2dc0 jni/tutorial-3.c:274:gst_native_surface_init Received surface
0x72500021 (native window 0x74d79678)
10-16 11:39:29.978: D/GStreamer+tutorial-3(2855): 0:00:08.249431545
0x738a2dc0 jni/tutorial-3.c:54:attach_current_thread Attaching thread
0x738a2dc0
10-16 11:39:29.978: D/GStreamer+tutorial-3(2855): 0:00:08.250389545
0x738a2dc0 jni/tutorial-3.c:130:check_initialization_complete
Initialization complete, notifying application. native_window:0x74d79678
main_loop:0x738c3c28
10-16 11:39:36.773: I/GStreamer(2855): Gst initialized. Restoring state,
playing:false
10-16 11:39:39.303: D/GStreamer+tutorial-3(2855): 0:00:17.576086508
0x738a2dc0 jni/tutorial-3.c:250:gst_native_pause Setting state to PAUSED
10-16 11:39:39.463: D/mali_winsys(2855): new_window_surface returns 0x3000
10-16 11:39:39.463: A/libc(2855): Fatal signal 8 (SIGFPE) at 0x00000b27
(code=-6), thread 2927 (eglglessink-ren)
10-16 11:39:39.878: D/GStreamer+tutorial-3(2855): 0:00:18.147828675
0x738a30c0 jni/tutorial-3.c:88:set_ui_message Setting message to: State
changed to PAUSED
</raw>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/gstreamer-android/attachments/20131016/92b60f3e/attachment-0001.html>


More information about the gstreamer-android mailing list