V4L2 to mp4 file. Stop button crashes VLC. mp4 unreadable.
Posted: 27 Oct 2008 11:51
I am running VLC 0.9.5 on Mandriva 2008 x64.
I run the following command line to capture live sound and video and save to disk as an mp4 file. When I press the "Stop" button I get a crash. The mp4 file is then useless since the moov atom was never written to it. So I'm stuck.
The redundant stream "duplicate" statements are because this is a cut-down version of the command line I am actually using which is splitting the stream into various rtp and file outputs at different bitrates.
Here is the stack trace after pressing the stop button for the affected thread.
The line in transcode.c that it crashes on is indicated below...
I run the following command line to capture live sound and video and save to disk as an mp4 file. When I press the "Stop" button I get a crash. The mp4 file is then useless since the moov atom was never written to it. So I'm stuck.
Code: Select all
vlc -vvv v4l2:// :v4l2-dev="/dev/video0" :v4l2-input=1 :v4l2-io=1 :v4l2-width=720 :v4l2-height=576 :v4l2-adev="hw:0,0" :v4l2-audio-method=3 :v4l2-stereo :v4l2-samplerate=44100 :v4l2-tuner=0: v4l2-tuner-audio-mode=1 :v4l2-controls-reset :v4l2-auto-white-balance=1 :v4l2-autogain=1 :no-v4l2-audio-mute --v4l2-set-ctrls='{chroma agc=1,combfilter=1}' --sout '#duplicate{dst="transcode{threads=4,width=640,height=480,venc=x264,fps=25,vcodec=x264,vb=300,audio-sync,deinterlace=linear,acodec=mp4a,ab=96,channels=2,samplerate=44100}:duplicate{dst=std{access=file, mux=mp4, dst=/home/simonb/Temp/test.mp4} }"}' --sout-x264-ref=5
Here is the stack trace after pressing the stop button for the affected thread.
Code: Select all
Thread 12 (Thread 0x45fdd950 (LWP 21131)):
#0 video_del_buffer (p_this=0x185a588, p_pic=0x2a00000001) at transcode.c:2272
#1 0x00007f927bfd2c5c in transcode_video_filter_allocation_clear (p_filter=0x185a588) at transcode.c:1470
#2 0x00007f9283fb9b9c in filter_chain_DeleteFilterInternal (p_chain=0x1811300, p_filter=0x185a588) at misc/filter_chain.c:283
#3 0x00007f9283fba1ff in filter_chain_Delete (p_chain=0x1811300) at misc/filter_chain.c:97
#4 0x00007f927bfd5d04 in transcode_video_close (p_stream=<value optimized out>, id=0x16a6ff0) at transcode.c:1830
#5 0x00007f927bfd71bd in Del (p_stream=0x185a588, id=0x2a00000001) at transcode.c:960
#6 0x00007f927c1dac83 in Del (p_stream=<value optimized out>, id=0x167c060) at ../../include/vlc_sout.h:219
#7 0x00007f9283fbbd6a in sout_InputDelete (p_input=0x16a72d0) at stream_output/stream_output.c:253
#8 0x00007f9283f5bbab in DeleteDecoder (p_dec=0x161cae8) at input/decoder.c:1156
#9 0x00007f9283f5e160 in input_DecoderDelete (p_dec=0x161cae8) at input/decoder.c:270
#10 0x00007f9283f62311 in input_EsOutDelete (out=0x1618cb0) at input/es_out.c:284
#11 0x00007f9283f68ccf in End (p_input=0x15d66f8) at input/input.c:1291
#12 0x00007f9283f6daa9 in Run (p_this=0x15d66f8) at input/input.c:533
#13 0x00007f9283fa6ca6 in thread_entry (data=<value optimized out>) at misc/threads.c:465
#14 0x00007f92839ae2a3 in start_thread () from /lib64/libpthread.so.0
#15 0x00007f9283c9f03d in clone () from /lib64/libc.so.6
Code: Select all
static void video_del_buffer( vlc_object_t *p_this, picture_t *p_pic )
{
VLC_UNUSED(p_this);
if( p_pic )
{
free( p_pic->p_data_orig ); //Crashing on this line
free( p_pic->p_sys );
free( p_pic );
}
}