Bug 6547 - Gstreamer on the BeagleBone black gets a Segmentation fault
Summary: Gstreamer on the BeagleBone black gets a Segmentation fault
Status: RESOLVED FIXED
Alias: None
Product: OE-Core
Classification: Build System, Metadata & Runtime
Component: multimedia (show other bugs)
Version: 1.6.2
Hardware: BeagleBone arm
: Medium normal
Target Milestone: Future
Assignee: Denys Dmytriyenko
QA Contact: Apoorv
URL:
Whiteboard:
Depends on:
Blocks:
 
Reported: 2014-07-17 11:45 UTC by Sven Vos
Modified: 2019-10-04 06:58 UTC (History)
5 users (show)

See Also:
OS type for building Yocto: ---
Type of Regression: ---
Verified:
Documentation change: No (bug/feature does not impact docs)


Attachments
Video file (7.80 MB, video/mpeg)
2014-07-17 11:45 UTC, Sven Vos
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Sven Vos 2014-07-17 11:45:47 UTC
Created attachment 2044 [details]
Video file

I was testing the Gstreamer on the Beaglebone black, but i got an Segmentation fault while executing a sample video of TI (see attached .m2v file). I did the following build steps:

1. Get poky
2. Edit local conf, so it builds for the Beaglebone black.
3. Edit Core-image-minimal (or sato, same problem with both) and add the following lines:

4. Copy the image and .m2v file to the device
5. cd to the m2v file directory
6. start the program:
- root@beaglebone:/# gst-launch-0.10 filesrc location=HistoryOfTI-480p.m2v ! mpegvideoparse ! ffdec_mpeg2video ! ffmpegcolorspace ! fbdevsink

Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
Caught SIGSEGV accessing address (nil)
#0  0xb6c57990 in ?? ()
#1  0xb6c57984 in ?? ()
#2  0xb6c57984 in ?? ()
Spinning.  Please run 'gdb gst-launch 1673' to continue debugging, Ctrl-C to quit, or Ctrl-\ to dump core.

-------- with verbose

root@beaglebone:/# gst-launch-0.10 -v filesrc location=HistoryOfTI-480p.m2v ! mpegvideoparse ! ffdec_mpeg2video ! ffmpegcolorspace ! fbdevsink

Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
/GstPipeline:pipeline0/GstMpegvParse:mpegvparse0.GstPad:src: caps = video/mpeg, mpegversion=(int)2, systemstream=(boolean)false, parsed=(boolean)true, width=(int)720, height=(int)405, framerate=(fraction)48/1, pixel-aspect-ratio=(fraction)1/1, codec_data=(buffer)2d019512ffffe1e8000001b5148a00010000000001b8, profile=(string)main, level=(string)low, interlaced=(boolean)false
/GstPipeline:pipeline0/ffdec_mpeg2video:ffdec_mpeg2video0.GstPad:sink: caps = video/mpeg, mpegversion=(int)2, systemstream=(boolean)false, parsed=(boolean)true, width=(int)720, height=(int)405, framerate=(fraction)48/1, pixel-aspect-ratio=(fraction)1/1, codec_data=(buffer)2d019512ffffe1e8000001b5148a00010000000001b8, profile=(string)main, level=(string)low, interlaced=(boolean)false
Caught SIGSEGV accessing address (nil)
#0  0xb6c52990 in ?? ()
#1  0xb6c52984 in ?? ()
#2  0xb6c52984 in ?? ()
Spinning.  Please run 'gdb gst-launch 1680' to continue debugging, Ctrl-C to quit, or Ctrl-\ to dump core.

7. used strace for debuging:
- root@beaglebone:/# strace gst-launch-0.10 filesrc location=HistoryOfTI-480p.m2v ! mpegvideoparse ! ffdec_mpeg2video ! ffmpegcolorspace ! fbdevsink

.....
.....
read(4, "\1\0\0\0\0\0\0\0", 16)         = 8
write(4, "\1\0\0\0\0\0\0\0", 8)         = 8
clock_gettime(CLOCK_MONOTONIC, {6386, 328881927}) = 0
poll([{fd=4, events=POLLIN}], 1, 0)     = 1 ([{fd=4, revents=POLLIN}])
read(4, "\1\0\0\0\0\0\0\0", 16)         = 8
write(4, "\1\0\0\0\0\0\0\0", 8)         = 8
clock_gettime(CLOCK_MONOTONIC, {6386, 332441427}) = 0
poll([{fd=4, events=POLLIN}], 1, 208)   = 1 ([{fd=4, revents=POLLIN}])
read(4, "\1\0\0\0\0\0\0\0", 16)         = 8
clock_gettime(CLOCK_MONOTONIC, {6386, 334713052}) = 0
clock_gettime(CLOCK_MONOTONIC, {6386, 335047760}) = 0
poll([{fd=4, events=POLLIN}], 1, 206Spinning.  Please run 'gdb gst-launch 1728' 
to continue debugging, Ctrl-C to quit, or Ctrl-\ to dump core.
)   = 0 (Timeout)
read(4, 0xbeb64850, 16)                 = -1 EAGAIN (Resource temporarily unavai
lable)
clock_gettime(CLOCK_MONOTONIC, {6386, 543048552}) = 0
clock_gettime(CLOCK_MONOTONIC, {6386, 543509927}) = 0
poll([{fd=4, events=POLLIN}], 1, 250)   = 0 (Timeout)
clock_gettime(CLOCK_MONOTONIC, {6386, 794639385}) = 0
clock_gettime(CLOCK_MONOTONIC, {6386, 794880260}) = 0
poll([{fd=4, events=POLLIN}], 1, 250)   = 0 (Timeout)
clock_gettime(CLOCK_MONOTONIC, {6387, 46005052}) = 0
clock_gettime(CLOCK_MONOTONIC, {6387, 46409927}) = 0
poll([{fd=4, events=POLLIN}], 1, 250)   = 0 (Timeout)
clock_gettime(CLOCK_MONOTONIC, {6387, 297759843}) = 0
clock_gettime(CLOCK_MONOTONIC, {6387, 298150593}) = 0
.....
.....

8. used GDB for debugging
- root@beaglebone:/# gdb gst-launch-0.10
(gdb) set args filesrc location=HistoryOfTI-480p.m2v ! mpegvideoparse ! ffdec_mpeg2video ! ffmpegcolorspace ! fbdevsink
(gdb) run
Starting program: /usr/bin/gst-launch-0.10 filesrc location=HistoryOfTI-480p.m2v
 ! mpegvideoparse ! ffdec_mpeg2video ! ffmpegcolorspace ! fbdevsink
warning: File "/lib/libthread_db-1.0.so" auto-loading has been declined by your 
`auto-load safe-path' set to "$debugdir:$datadir/auto-load".
To enable execution of this file add
        add-auto-load-safe-path /lib/libthread_db-1.0.so
line to your configuration file "/home/root/.gdbinit".
To completely disable this security protection add
        set auto-load safe-path /
line to your configuration file "/home/root/.gdbinit".
For more information about this security protection see the
"Auto-loading safe path" section in the GDB manual.  E.g., run from the shell:
        info "(gdb)Auto-loading safe path"
warning: Unable to find libthread_db matching inferior's thread library, thread 
debugging will not be available.
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
[New LWP 1672]

Program received signal SIGSEGV, Segmentation fault.
[Switching to LWP 1672]
0xb60330a8 in ?? () from /usr/lib/libavcodec.so.53

(gdb) info threads
  Id   Target Id         Frame 
* 2    LWP 1672 "mpegvparse0:sin" 0xb60330a8 in ?? ()
   from /usr/lib/libavcodec.so.53
  1    LWP 1669 "gst-launch-0.10" 0xb6d11994 in poll () from /lib/libc.so.6

(gdb) bt
#0  0xb60330a8 in ?? () from /usr/lib/libavcodec.so.53
#1  0x00000008 in ?? ()
#2  0x00000008 in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)

(gdb) thread 1
[Switching to thread 1 (LWP 1669)]
#0  0xb6d11994 in poll () from /lib/libc.so.6

(gdb) bt
#0  0xb6d11994 in poll () from /lib/libc.so.6
#1  0xb6decf00 in ?? () from /usr/lib/libglib-2.0.so.0
#2  0xb6decf00 in ?? () from /usr/lib/libglib-2.0.so.0
Backtrace stopped: previous frame identical to this frame (corrupt stack?
Comment 1 Sven Vos 2014-07-17 11:49:18 UTC
(In reply to comment #0)
> Created attachment 2044 [details]
> Video file
> 
> I was testing the Gstreamer on the Beaglebone black, but i got an
> Segmentation fault while executing a sample video of TI (see attached .m2v
> file). I did the following build steps:
> 
> 1. Get poky
> 2. Edit local conf, so it builds for the Beaglebone black.
> 3. Edit Core-image-minimal (or sato, same problem with both) and add the
> following lines:

CORE_IMAGE_EXTRA_INSTALL += "liboil gdb gstreamer gst-ffmpeg gst-plugins-gl gst-plugins-bad-videoparsersbad gst-plugins-bad-fbdevsink gst-plugins-bad-colorspace gst-plugins-base-ffmpegcolorspace gst-plugins-good gst-plugins-ugly strace"

> 
> 4. Copy the image and .m2v file to the device
> 5. cd to the m2v file directory
> 6. start the program:
> - root@beaglebone:/# gst-launch-0.10 filesrc location=HistoryOfTI-480p.m2v !
> mpegvideoparse ! ffdec_mpeg2video ! ffmpegcolorspace ! fbdevsink
> 
> Setting pipeline to PAUSED ...
> Pipeline is PREROLLING ...
> Caught SIGSEGV accessing address (nil)
> #0  0xb6c57990 in ?? ()
> #1  0xb6c57984 in ?? ()
> #2  0xb6c57984 in ?? ()
> Spinning.  Please run 'gdb gst-launch 1673' to continue debugging, Ctrl-C to
> quit, or Ctrl-\ to dump core.
> 
> -------- with verbose
> 
> root@beaglebone:/# gst-launch-0.10 -v filesrc location=HistoryOfTI-480p.m2v
> ! mpegvideoparse ! ffdec_mpeg2video ! ffmpegcolorspace ! fbdevsink
> 
> Setting pipeline to PAUSED ...
> Pipeline is PREROLLING ...
> /GstPipeline:pipeline0/GstMpegvParse:mpegvparse0.GstPad:src: caps =
> video/mpeg, mpegversion=(int)2, systemstream=(boolean)false,
> parsed=(boolean)true, width=(int)720, height=(int)405,
> framerate=(fraction)48/1, pixel-aspect-ratio=(fraction)1/1,
> codec_data=(buffer)2d019512ffffe1e8000001b5148a00010000000001b8,
> profile=(string)main, level=(string)low, interlaced=(boolean)false
> /GstPipeline:pipeline0/ffdec_mpeg2video:ffdec_mpeg2video0.GstPad:sink: caps
> = video/mpeg, mpegversion=(int)2, systemstream=(boolean)false,
> parsed=(boolean)true, width=(int)720, height=(int)405,
> framerate=(fraction)48/1, pixel-aspect-ratio=(fraction)1/1,
> codec_data=(buffer)2d019512ffffe1e8000001b5148a00010000000001b8,
> profile=(string)main, level=(string)low, interlaced=(boolean)false
> Caught SIGSEGV accessing address (nil)
> #0  0xb6c52990 in ?? ()
> #1  0xb6c52984 in ?? ()
> #2  0xb6c52984 in ?? ()
> Spinning.  Please run 'gdb gst-launch 1680' to continue debugging, Ctrl-C to
> quit, or Ctrl-\ to dump core.
> 
> 7. used strace for debuging:
> - root@beaglebone:/# strace gst-launch-0.10 filesrc
> location=HistoryOfTI-480p.m2v ! mpegvideoparse ! ffdec_mpeg2video !
> ffmpegcolorspace ! fbdevsink
> 
> .....
> .....
> read(4, "\1\0\0\0\0\0\0\0", 16)         = 8
> write(4, "\1\0\0\0\0\0\0\0", 8)         = 8
> clock_gettime(CLOCK_MONOTONIC, {6386, 328881927}) = 0
> poll([{fd=4, events=POLLIN}], 1, 0)     = 1 ([{fd=4, revents=POLLIN}])
> read(4, "\1\0\0\0\0\0\0\0", 16)         = 8
> write(4, "\1\0\0\0\0\0\0\0", 8)         = 8
> clock_gettime(CLOCK_MONOTONIC, {6386, 332441427}) = 0
> poll([{fd=4, events=POLLIN}], 1, 208)   = 1 ([{fd=4, revents=POLLIN}])
> read(4, "\1\0\0\0\0\0\0\0", 16)         = 8
> clock_gettime(CLOCK_MONOTONIC, {6386, 334713052}) = 0
> clock_gettime(CLOCK_MONOTONIC, {6386, 335047760}) = 0
> poll([{fd=4, events=POLLIN}], 1, 206Spinning.  Please run 'gdb gst-launch
> 1728' 
> to continue debugging, Ctrl-C to quit, or Ctrl-\ to dump core.
> )   = 0 (Timeout)
> read(4, 0xbeb64850, 16)                 = -1 EAGAIN (Resource temporarily
> unavai
> lable)
> clock_gettime(CLOCK_MONOTONIC, {6386, 543048552}) = 0
> clock_gettime(CLOCK_MONOTONIC, {6386, 543509927}) = 0
> poll([{fd=4, events=POLLIN}], 1, 250)   = 0 (Timeout)
> clock_gettime(CLOCK_MONOTONIC, {6386, 794639385}) = 0
> clock_gettime(CLOCK_MONOTONIC, {6386, 794880260}) = 0
> poll([{fd=4, events=POLLIN}], 1, 250)   = 0 (Timeout)
> clock_gettime(CLOCK_MONOTONIC, {6387, 46005052}) = 0
> clock_gettime(CLOCK_MONOTONIC, {6387, 46409927}) = 0
> poll([{fd=4, events=POLLIN}], 1, 250)   = 0 (Timeout)
> clock_gettime(CLOCK_MONOTONIC, {6387, 297759843}) = 0
> clock_gettime(CLOCK_MONOTONIC, {6387, 298150593}) = 0
> .....
> .....
> 
> 8. used GDB for debugging
> - root@beaglebone:/# gdb gst-launch-0.10
> (gdb) set args filesrc location=HistoryOfTI-480p.m2v ! mpegvideoparse !
> ffdec_mpeg2video ! ffmpegcolorspace ! fbdevsink
> (gdb) run
> Starting program: /usr/bin/gst-launch-0.10 filesrc
> location=HistoryOfTI-480p.m2v
>  ! mpegvideoparse ! ffdec_mpeg2video ! ffmpegcolorspace ! fbdevsink
> warning: File "/lib/libthread_db-1.0.so" auto-loading has been declined by
> your 
> `auto-load safe-path' set to "$debugdir:$datadir/auto-load".
> To enable execution of this file add
>         add-auto-load-safe-path /lib/libthread_db-1.0.so
> line to your configuration file "/home/root/.gdbinit".
> To completely disable this security protection add
>         set auto-load safe-path /
> line to your configuration file "/home/root/.gdbinit".
> For more information about this security protection see the
> "Auto-loading safe path" section in the GDB manual.  E.g., run from the
> shell:
>         info "(gdb)Auto-loading safe path"
> warning: Unable to find libthread_db matching inferior's thread library,
> thread 
> debugging will not be available.
> Setting pipeline to PAUSED ...
> Pipeline is PREROLLING ...
> [New LWP 1672]
> 
> Program received signal SIGSEGV, Segmentation fault.
> [Switching to LWP 1672]
> 0xb60330a8 in ?? () from /usr/lib/libavcodec.so.53
> 
> (gdb) info threads
>   Id   Target Id         Frame 
> * 2    LWP 1672 "mpegvparse0:sin" 0xb60330a8 in ?? ()
>    from /usr/lib/libavcodec.so.53
>   1    LWP 1669 "gst-launch-0.10" 0xb6d11994 in poll () from /lib/libc.so.6
> 
> (gdb) bt
> #0  0xb60330a8 in ?? () from /usr/lib/libavcodec.so.53
> #1  0x00000008 in ?? ()
> #2  0x00000008 in ?? ()
> Backtrace stopped: previous frame identical to this frame (corrupt stack?)
> 
> (gdb) thread 1
> [Switching to thread 1 (LWP 1669)]
> #0  0xb6d11994 in poll () from /lib/libc.so.6
> 
> (gdb) bt
> #0  0xb6d11994 in poll () from /lib/libc.so.6
> #1  0xb6decf00 in ?? () from /usr/lib/libglib-2.0.so.0
> #2  0xb6decf00 in ?? () from /usr/lib/libglib-2.0.so.0
> Backtrace stopped: previous frame identical to this frame (corrupt stack?

Added the lines for core-image-minimal:
CORE_IMAGE_EXTRA_INSTALL += "liboil gdb gstreamer gst-ffmpeg gst-plugins-gl gst-plugins-bad-videoparsersbad gst-plugins-bad-fbdevsink gst-plugins-bad-colorspace gst-plugins-base-ffmpegcolorspace gst-plugins-good gst-plugins-ugly strace"
Comment 2 Sven Vos 2014-07-29 06:43:01 UTC
After some testing, i found out that it's working with X11. When i am using ximagesink it works, but it still doenst work with the framebuffer, so it looks like the problem is in the fbdevsink.
Comment 3 Sangeeta Jain 2019-10-04 06:58:36 UTC
No issue reported in Gstreamer on Beaglebone in recent QA cycles for 2.7 onwards.