Hi List,
I'm working with an Epiphan VGA2USB capture device which uses the older Video4Linux API. I'm trying to capture a 1024x768 desktop display to a plain MPEG file, but I can't for the life of me get it to capture properly. The encoding machine is a Core2Quad Q6600 running Ubuntu 9.04 x86_64. I'm currently using the commandline interface for gStreamer while I experiment, and the command I've found that works best is sudo gst-launch -v v4lsrc num-buffers=100 ! videorate ! video/x-raw-yuv,width=1024,height=768 ! videoparse height=768 width=1024 format=YUY2 ! ffmpegcolorspace ! mpeg2enc framerate=0 ! filesink location=./test.mpg The problem is that the video, when played back, plays at a very high speed. Almost as if it's being played in fast forward. I've tried setting the framerate manually, but then I get: greg@machine:~/Desktop$ sudo gst-launch -v v4lsrc num-buffers=100 ! videorate ! video/x-raw-yuv,width=1024,height=768,framerate=20/1 ! videoparse height=768 width=1024 format=YUY2 framerate=20/1 ! ffmpegcolorspace ! mpeg2enc framerate=0 interlace-mode=0 ! filesink location=./test.mpg Setting pipeline to PAUSED ... /GstPipeline:pipeline0/GstV4lSrc:v4lsrc0.GstPad:src: caps = video/x-raw-yuv, format=(fourcc)YUY2, width=(int)1024, height=(int)768, framerate=(fraction)25/1 Pipeline is live and does not need PREROLL ... Setting pipeline to PLAYING ... New clock: GstSystemClock /GstPipeline:pipeline0/GstVideoRate:videorate0.GstPad:sink: caps = video/x-raw-yuv, format=(fourcc)YUY2, width=(int)1024, height=(int)768, framerate=(fraction)25/1 /GstPipeline:pipeline0/GstVideoRate:videorate0.GstPad:src: caps = video/x-raw-yuv, width=(int)1024, height=(int)768, framerate=(fraction)20/1, format=(fourcc)YUY2 /GstPipeline:pipeline0/GstVideoRate:videorate0.GstPad:sink: caps = video/x-raw-yuv, format=(fourcc)YUY2, width=(int)1024, height=(int)768, framerate=(fraction)25/1 /GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:src: caps = video/x-raw-yuv, width=(int)1024, height=(int)768, framerate=(fraction)20/1, format=(fourcc)YUY2 /GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:sink: caps = video/x-raw-yuv, width=(int)1024, height=(int)768, framerate=(fraction)20/1, format=(fourcc)YUY2 /GstPipeline:pipeline0/GstVideoParse:videoparse0.GstPad:sink: caps = video/x-raw-yuv, width=(int)1024, height=(int)768, framerate=(fraction)20/1, format=(fourcc)YUY2 /GstPipeline:pipeline0/GstVideoParse:videoparse0.GstPad:src: caps = video/x-raw-yuv, width=(int)1024, height=(int)768, format=(fourcc)YUY2, framerate=(fraction)20/1, pixel-aspect-ratio=(fraction)1/1 ERROR: from element /GstPipeline:pipeline0/GstV4lSrc:v4lsrc0: Internal data flow error. Additional debug info: gstbasesrc.c(2330): gst_base_src_loop (): /GstPipeline:pipeline0/GstV4lSrc:v4lsrc0: streaming task paused, reason not-negotiated (-4) Execution ended after 204010194 ns. Setting pipeline to PAUSED ... Setting pipeline to READY ... /GstPipeline:pipeline0/GstVideoParse:videoparse0.GstPad:src: caps = NULL /GstPipeline:pipeline0/GstVideoParse:videoparse0.GstPad:sink: caps = NULL /GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:src: caps = NULL /GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:sink: caps = NULL /GstPipeline:pipeline0/GstVideoRate:videorate0.GstPad:src: caps = NULL /GstPipeline:pipeline0/GstVideoRate:videorate0.GstPad:sink: caps = NULL /GstPipeline:pipeline0/GstV4lSrc:v4lsrc0.GstPad:src: caps = NULL Setting pipeline to NULL ... FREEING pipeline ... The *only* framerate that I seems to work is the 25/1 listed in the cap description for the v4lsrc element, and the output for at is identical to the output when I don't specify the framerate at all. I am relatively certain that the device is capable out lower framerates because Epiphan includes some examples using transcode (transcode -x v4l,null --use_rgb -i /dev/video -f 3 -g 1600x1200 -y raw,null -z -r 2 -f 10 -o test.avi), but I can't seem to get lower framerates working in gStreamer. So, my questions are: Am I doing something wrong here with regards to gStreamer? And how can I get the output video to play back at a proper rate? I'm relatively new to the framework but it doesn't seem too difficult to learn. Thanks, G PS: Just so this is out on the internet somewhere: To get v4lsrc to work with Epiphan's drivers you need to add "num_frame_buffers=2" to the insmod when inserting the drivers. Otherwise you get: ERROR: from element /GstPipeline:pipeline0/GstV4lSrc:v4lsrc0: Could not read from resource. Additional debug info: v4lsrc_calls.c(183): gst_v4lsrc_capture_init (): /GstPipeline:pipeline0/GstV4lSrc:v4lsrc0: Not enough buffers. We got 1, we want at least 2 ------------------------------------------------------------------------------ _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/gstreamer-devel |
Free forum by Nabble | Edit this page |