[gst-devel] video playback fast (record with v4l2src)

Edgard Lima edgard.lima at indt.org.br
Wed Sep 20 16:39:38 CEST 2006


The problem is because the timestamps aren't too accurate  (would it be 
incremented exactly  1001/30000)?

Buffers coming from v4l2 drivers has timestamps and sequence numbers. If 
drivers implements sequence numbers, could it be used somehow?
The audio comes from alsa input, is there some way v4l2 drivers could 
also put timestamps to audio coming from tuner to make A/V sync?

Yes I'm at the beginning. I'm trying to improve, help me, may be some 
day I can give you and the community some feedback.
So....

If the answer to my first question is yes. I think I could write a 
smarter v4l2src that would increment the value of each time time-stamp 
exactly fps_d/fps_n (1001/30000 for this example).
Or, it could be also done in videorate (videorate could wait a bit more 
before insert a new buffer) some thing like 'max-lateness' for 'alsasink'.

What do you think?

btw: If I'm completely out of track, please give me deeper explanation 
of how it works, or else tell me where to find out such info, Thanks.

BR,
Edgard



edlima at edlima:~$ gst-launch-0.10 -v v4l2src device=/dev/video1 ! 
fakesink sync=false
Setting pipeline to PAUSED ...
/pipeline0/v4l2src0: std = "PAL-M"
/pipeline0/v4l2src0: input = "Television"
/pipeline0/v4l2src0: frequency = 526250000
/pipeline0/v4l2src0: num-buffers = -1
/pipeline0/v4l2src0.src: caps = video/x-raw-yuv, format=(fourcc)UYVY, 
width=(int)640, height=(int)480, framerate=(fraction)30000/1001
Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
/pipeline0/fakesink0.sink: caps = video/x-raw-yuv, format=(fourcc)UYVY, 
width=(int)640, height=(int)480, framerate=(fraction)30000/1001
/pipeline0/fakesink0: last-message = "preroll   ******* "
/pipeline0/fakesink0: last-message = "event   ******* E (type: 102, 
GstEventNewsegment, update=(boolean)false, rate=(double)1, 
applied_rate=(double)1, format=(GstFormat)GST_FORMAT_TIME, 
start=(gint64)0, stop=(gint64)-1, position=(gint64)0) 0x80e90a0"
/pipeline0/fakesink0: last-message = "chain   ******* < (614400 bytes, 
timestamp: 0:00:00.064468000, duration: 0:00:00.033366666, offset: 0, 
offset_end: -1, flags: 33) 0x80f6e80"
/pipeline0/fakesink0: last-message = "chain   ******* < (614400 bytes, 
timestamp: 0:00:00.082425000, duration: 0:00:00.033366666, offset: 1, 
offset_end: -1, flags: 1) 0x80f6ed8"
/pipeline0/fakesink0: last-message = "chain   ******* < (614400 bytes, 
timestamp: 0:00:00.127624000, duration: 0:00:00.033366666, offset: 2, 
offset_end: -1, flags: 1) 0x80f6f30"
/pipeline0/fakesink0: last-message = "chain   ******* < (614400 bytes, 
timestamp: 0:00:00.161079000, duration: 0:00:00.033366666, offset: 3, 
offset_end: -1, flags: 1) 0x80f6f88"
/pipeline0/fakesink0: last-message = "chain   ******* < (614400 bytes, 
timestamp: 0:00:00.182542000, duration: 0:00:00.033366666, offset: 4, 
offset_end: -1, flags: 1) 0x80fb800"
/pipeline0/fakesink0: last-message = "chain   ******* < (614400 bytes, 
timestamp: 0:00:00.232085000, duration: 0:00:00.033366666, offset: 5, 
offset_end: -1, flags: 1) 0x80fb858"
/pipeline0/fakesink0: last-message = "chain   ******* < (614400 bytes, 
timestamp: 0:00:00.249269000, duration: 0:00:00.033366666, offset: 6, 
offset_end: -1, flags: 1) 0x80fb8b0"
/pipeline0/fakesink0: last-message = "chain   ******* < (614400 bytes, 
timestamp: 0:00:00.288730000, duration: 0:00:00.033366666, offset: 7, 
offset_end: -1, flags: 1) 0x80fb908"




More information about the gstreamer-devel mailing list