Learn how easy it is to sync an existing GitHub or Google Code repo to a SourceForge project! See Demo

Close

#12 GSMovie triggers segfault when volume control events sent

closed-fixed
nobody
None
5
2011-05-17
2010-10-07
Cefn Hoile
No

I created a Time Travelling TV Aerial for a show last weekend.

The system completely worked, except if I attempted to control the volume of a GSMovie, in which case it segfaulted and died.

I had to comment the the volume control lines out of the exhibit to stop it crashing after 5 minutes. Without these lines, it worked OK.

As you will see from the explanation inlined at bottom, this seriously limited the authenticity of the 'tuning' effect.

THE DUMP

Here's an example of the volume controlling activity of the movie (m) and the noise (n) just before a segfault - the resulting crash log is attached.

The movie and noise should be the only videos playing in the Gstreamer subsystem at that time as idle movies are paused and the java.util.List which references them is garbage collected when the year changes.

Playing: /media/BTEXT3/timeshow/tv/2001/38-Distrust2001.mp4
n:0.4594554305076599
m:0.08108913898468018
n:0.40945544838905334
m:0.1810891032218933
n:0.3594554662704468
m:0.28108906745910645
n:0.3094554543495178
m:0.38108909130096436
n:0.25945547223091125
#
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x00000000, pid=18219, tid=2400906096
#
# JRE version: 6.0_20-b02
# Java VM: Java HotSpot(TM) Server VM (16.3-b01 mixed mode linux-x86 )
# Problematic frame:
# C 0x00000000
#
# An error report file with more information is saved as:
# /home/cefn/Documents/curiosity/timeshow/processing/tv/bin/hs_err_pid18219.log

THE INSTALLATION

I had downloaded 3-20 videos from archive.org for every year since 1900. The principle was to choose a year and then simulate tuning between TV stations in a given year.

I achieved this by playing a white noise movie on a loop, and then playing the main video with variable transparency as you tune in and out of the channel, (the white noise recording shows through the main video which is playing).

However, I also wanted to graduate the volume between the main playing movie and the noise movie as the tuning phased from one channel to another to complete the effect, and it's the volume controlling events which causes the segfault.

THE CODE TO RECREATE

The full code is available at...
http://github.com/cefn/Time-Show/tree/master/tv/src/com/cefn/time/

To recreate the bug, you just have to set the videoRoot to a source directory which contains at least two directories named after a year (e.g. 1901 and 1902) and in each of these at least two mp4 videos. That way you have two channels and two years, and it should tune between them changing the volume until eventually segfaulting.

In the show I was using a random walk through the years and the channels. You could reactivate this random walk code (at the beginning of Tv.draw) to keep things changing until it crashes and you can track the bug.

Discussion

  • Cefn Hoile
    Cefn Hoile
    2010-10-07

    The crash log referenced above

     
    Attachments
  • Andres Colubri
    Andres Colubri
    2011-05-17

    Fixed. It was an upstream bug in glib.

     
  • Andres Colubri
    Andres Colubri
    2011-05-17

    • status: open --> closed-fixed