[gst-devel] Firewire cameras with DirectShow

Julien Isorce julien.isorce at gmail.com
Mon Jun 29 13:46:57 CEST 2009


2009/6/29 Phil Rendell <philrendell at gmail.com>

>
> I also tried setting the lowres property of ffdec_dvvideo to 1/4 size to
> see if that would make a difference, but again, no luck, which leads me to
> believe that it's not a problem with decoding the stream.


Ok maybe ffdec_dv and ffdemux_dv are poor quality.


>
>
> It's just a shame there's not a windows port of libdv, otherwise I could
> try building dvdemux. I don't know if there's anything else I could try?


You could ask libdv mailing list if someone has already tried to compile or
port libdv on win32.
You could try by your self to compile libdv using msys and mingw. (maybe
it's already ported)

(http://libdv.sourceforge.net/)

You could also try to update the libavcodec.dll libavformat.dll with a newer
ffmpeg build,
to see if ffdemux_dv and ffdec_dv have been improved. (or see their git web)

Julien


>
> Phil
>
>
> 2009/6/26 Julien Isorce <julien.isorce at gmail.com>
>
>> ok so your firewire camera only supports systemstream=true.
>>
>> try with the default width, height and framerate, and without
>> deinterlacing:
>> gst-launch-0.10 dshowvideosrc ! "video/x-dv, systemstream=true" !
>> ffdemux_dv ! ffdec_dvvideo ! ffmpegcolorspace ! directdrawsink
>>
>> If still low fps, you could try to set lower width, height and framerate,
>> or qdd a queue before ffmpegcolorspace.
>>
>> You could also try:
>>
>> gst-launch-0.10 dshowvideosrc ! "video/x-dv, systemstream=true" !
>> decodebin ! ffmpegcolorspace ! directdrawsink
>> and
>> gst-launch-0.10 dshowvideosrc ! decodebin ! ffmpegcolorspace !
>> directdrawsink
>>
>> About the crash I think it came from:  format=dvsd
>> the right way is: format=(fourcc)dvsd
>>
>>
>> Julien
>>
>> 2009/6/26 Phil Rendell <philrendell at gmail.com>
>>
>>>
>>>
>>> 2009/6/26 Julien Isorce <julien.isorce at gmail.com>
>>>
>>>> Forgot this problem then we will use true and false, instead of 0 and 1.
>>>> Sorry for waste of time.
>>>
>>>
>>> No problem - without your help I would be completely stuck and end up
>>> being forced to do something drastic like hunt around in the source code
>>> before giving up!
>>>
>>>
>>>
>>>> Phil, can you tell me if
>>>> gst-launch-0.10.exe dshowvideosrc ! "video/x-dv, systemstream=false,
>>>> width=640, height=480, framerate=10" ! fakesink
>>>> leads to the same result as true ?
>>>
>>>
>>> No, it doesn't. It gives me the usual link error:
>>>
>>> D:\Camera\Common\GStreamer\bin>gst-launch-0.10.exe -v dshowvideosrc !
>>> "video/x-dv, systemstream=false, width=640, height=480, framerate=30" !
>>> fakesink
>>> WARNING: erroneous pipeline: could not link dshowvideosrc0 to fakesink0
>>>
>>>
>>>
>>>> About the screenshot. I can see that only the pin00 can be handled by
>>>> dshowvideosrc because it's
>>>> MEDIATYPE_Video and MEDIASUBTYPE_dvsd
>>>> but unfortunatelly grapedit does not tell us if it's FORMAT_DvInfo (case
>>>> systemstream=true)
>>>> or FORMAT_VideoInfo (case systemstream=false)
>>>> About the warnings, do not care about it, it seems that
>>>> granularityVideoWidth/Height are not set by your camera driver.
>>>> Or has no sense in case of systemstream=true.
>>>>
>>>
>>> Ok, thanks.
>>>
>>>
>>>> Anyway, for now I just do not know how to decode or render a video/x-dv,
>>>> systemstream=true.
>>>> I am sure someone else knows ?
>>>
>>>
>>> Good idea with the ffdemux_dv. The command you suggested didn't quite
>>> work, but once I added the dv decoder you suggested in a previous email and
>>> added a deinterlacer I managed to get something to display, although I ended
>>> up with a pretty bad 0.5-1 fps. Could I be doing something wrong?
>>>
>>> Thanks,
>>>
>>> Phil
>>>
>>>
>>> Without the decoder (runs straight through with no visual output):
>>>
>>> D:\rendell_p\Camera\Common\GStreamer\bin>gst-launch-0.10.exe -v
>>> dshowvideosrc ! "video/x-dv, systemstream=true, width=720, height=576,
>>> framerate=25" ! ffdemux_dv ! ffmpegcolorspace ! directdrawsink
>>> Setting pipeline to PAUSED ...
>>> ** (gst-launch-0.10:2500): WARNING **: your desired video size is not
>>> valid : 720 mod 1244160 !=0
>>> ** (gst-launch-0.10:2500): WARNING **: your desired video size is not
>>> valid : 576 mod 1577311108 !=0
>>> /GstPipeline:pipeline0/GstDshowVideoSrc:dshowvideosrc0.GstPad:src: caps =
>>> video/x-dv, systemstream=(boolean)true, width=(int)720, height=(int)576,
>>> framerate=(int)25
>>> Pipeline is live and does not need PREROLL ...
>>> Setting pipeline to PLAYING ...
>>> New clock: GstSystemClock
>>> /GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:src: caps =
>>> video/x-dv,systemstream=(boolean)true, width=(int)720, height=(int)576,
>>> framerate=(int)25
>>> /GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:sink: caps =
>>> video/x-dv, systemstream=(boolean)true, width=(int)720, height=(int)576,
>>> framerate=(int)25
>>> /GstPipeline:pipeline0/ffdemux_dv:ffdemux_dv0.GstPad:sink: caps =
>>> video/x-dv, systemstream=(boolean)true, width=(int)720, height=(int)576,
>>> framerate=(int)25
>>> ERROR: from element /GstPipeline:pipeline0/ffdemux_dv:ffdemux_dv0:
>>> Internal data stream error.
>>> Additional debug info:
>>> ..\..\ext\ffmpeg\gstffmpegdemux.c(1456): gst_ffmpegdemux_loop ():
>>> /GstPipeline:pipeline0/ffdemux_dv:ffdemux_dv0:
>>> streaming stopped, reason not-linked
>>> Execution ended after 187550000 ns.
>>> Setting pipeline to PAUSED ...
>>> Setting pipeline to READY ...
>>> /GstPipeline:pipeline0/ffdemux_dv:ffdemux_dv0.GstPad:audio_01: caps =
>>> NULL
>>> /GstPipeline:pipeline0/ffdemux_dv:ffdemux_dv0.GstPad:audio_00: caps =
>>> NULL
>>> /GstPipeline:pipeline0/ffdemux_dv:ffdemux_dv0.GstPad:video_00: caps =
>>> NULL
>>> /GstPipeline:pipeline0/ffdemux_dv:ffdemux_dv0.GstPad:sink: caps = NULL
>>> /GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:src: caps = NULL
>>> /GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:sink: caps = NULL
>>> /GstPipeline:pipeline0/GstDshowVideoSrc:dshowvideosrc0.GstPad:src: caps =
>>> NULL
>>> Setting pipeline to NULL ...
>>> FREEING pipeline ...
>>>
>>>
>>> With the decoder and deinterlacing (NOTE: there are no errors until I
>>> close the window):
>>>
>>> D:\Camera\Common\GStreamer\bin>gst-launch-0.10.exe -v dshowvideosrc !
>>> "video/x-dv, systemstream=true, width=720, height=576, framerate=25" !
>>> ffdemux_dv ! ffdec_dvvideo ! ffdeinterlace ! ffmpegcolorspace !
>>> directdrawsink
>>> Setting pipeline to PAUSED ...
>>> ** (gst-launch-0.10:432): WARNING **: your desired video size is not
>>> valid : 720 mod 1244160 !=0
>>> ** (gst-launch-0.10:432): WARNING **: your desired video size is not
>>> valid : 576 mod 1577311108 !=0
>>> /GstPipeline:pipeline0/GstDshowVideoSrc:dshowvideosrc0.GstPad:src: caps =
>>> video/x-dv, systemstream=(boolean)true, width=(int)720, height=(int)576,
>>> framerate=(int)25
>>> Pipeline is live and does not need PREROLL ...
>>> Setting pipeline to PLAYING ...
>>> New clock: GstSystemClock
>>> /GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:src: caps =
>>> video/x-dv,systemstream=(boolean)true, width=(int)720, height=(int)576,
>>> framerate=(int)25
>>> /GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:sink: caps =
>>> video/x-dv, systemstream=(boolean)true, width=(int)720, height=(int)576,
>>> framerate=(int)25
>>> /GstPipeline:pipeline0/ffdemux_dv:ffdemux_dv0.GstPad:sink: caps =
>>> video/x-dv, systemstream=(boolean)true, width=(int)720, height=(int)576,
>>> framerate=(int)25
>>> /GstPipeline:pipeline0/ffdec_dvvideo:ffdec_dvvideo0.GstPad:sink: caps =
>>> video/x-dv, width=(int)720, height=(int)576, framerate=(fraction)25/1,
>>> systemstream=(boolean)false, format=(fourcc)I420
>>> /GstPipeline:pipeline0/ffdec_dvvideo:ffdec_dvvideo0.GstPad:src: caps =
>>> video/x-raw-yuv, width=(int)720, height=(int)576, framerate=(fraction)25/1,
>>> format=(fourcc)I420
>>> /GstPipeline:pipeline0/GstFFMpegDeinterlace:ffmpegdeinterlace0.GstPad:src:
>>> caps= video/x-raw-yuv, width=(int)720, height=(int)576,
>>> framerate=(fraction)25/1, format=(fourcc)I420
>>> /GstPipeline:pipeline0/GstFFMpegDeinterlace:ffmpegdeinterlace0.GstPad:sink:
>>> caps = video/x-raw-yuv, width=(int)720, height=(int)576,
>>> framerate=(fraction)25/1, format=(fourcc)I420
>>> /GstPipeline:pipeline0/GstFFMpegCsp:ffmpegcsp0.GstPad:src: caps =
>>> video/x-raw-rgb, width=(int)720, height=(int)576, framerate=(fraction)25/1,
>>> bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)65280,
>>> green_mask=(int)16711680, blue_mask=(int)-16777216
>>> /GstPipeline:pipeline0/GstFFMpegCsp:ffmpegcsp0.GstPad:sink: caps =
>>> video/x-raw-yuv, width=(int)720, height=(int)576, framerate=(fraction)25/1,
>>> format=(fourcc)I420
>>> /GstPipeline:pipeline0/GstDirectDrawSink:directdrawsink0.GstPad:sink:
>>> caps = video/x-raw-rgb, width=(int)720, height=(int)576,
>>> framerate=(fraction)25/1, bpp=(int)32, depth=(int)24, endianness=(int)4321,
>>> red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216
>>> ERROR: from element /GstPipeline:pipeline0/ffdemux_dv:ffdemux_dv0:
>>> Internal data stream error.
>>> Additional debug info:
>>> ..\..\ext\ffmpeg\gstffmpegdemux.c(1456): gst_ffmpegdemux_loop ():
>>> /GstPipeline:pipeline0/ffdemux_dv:ffdemux_dv0:streaming stopped, reason
>>> error
>>> Execution ended after 6375163000 ns.
>>> Setting pipeline to PAUSED ...
>>> Setting pipeline to READY ...
>>> /GstPipeline:pipeline0/GstDirectDrawSink:directdrawsink0.GstPad:sink:
>>> caps = NULL
>>> /GstPipeline:pipeline0/GstFFMpegCsp:ffmpegcsp0.GstPad:src: caps = NULL
>>> /GstPipeline:pipeline0/GstFFMpegCsp:ffmpegcsp0.GstPad:sink: caps = NULL
>>> /GstPipeline:pipeline0/GstFFMpegDeinterlace:ffmpegdeinterlace0.GstPad:src:
>>> caps= NULL
>>> /GstPipeline:pipeline0/GstFFMpegDeinterlace:ffmpegdeinterlace0.GstPad:sink:
>>> caps = NULL
>>> /GstPipeline:pipeline0/ffdec_dvvideo:ffdec_dvvideo0.GstPad:src: caps =
>>> NULL
>>> /GstPipeline:pipeline0/ffdec_dvvideo:ffdec_dvvideo0.GstPad:sink: caps =
>>> NULL
>>> /GstPipeline:pipeline0/ffdemux_dv:ffdemux_dv0.GstPad:audio_01: caps =
>>> NULL
>>> /GstPipeline:pipeline0/ffdemux_dv:ffdemux_dv0.GstPad:audio_00: caps =
>>> NULL
>>> /GstPipeline:pipeline0/ffdemux_dv:ffdemux_dv0.GstPad:video_00: caps =
>>> NULL
>>> /GstPipeline:pipeline0/ffdemux_dv:ffdemux_dv0.GstPad:sink: caps = NULL
>>> /GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:src: caps = NULL
>>> /GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:sink: caps = NULL
>>> /GstPipeline:pipeline0/GstDshowVideoSrc:dshowvideosrc0.GstPad:src: caps =
>>> NULL
>>> Setting pipeline to NULL ...
>>> FREEING pipeline ...
>>>
>>>
>>>
>>>
>>>
>>>>
>>>>
>>>> Julien
>>>>
>>>>
>>>>
>>>>
>>>>   2009/6/26 Phil Rendell <philrendell at gmail.com>
>>>>
>>>>>
>>>>> 2009/6/26 Julien Isorce <julien.isorce at gmail.com>
>>>>>
>>>>>>
>>>>>> 2009/6/26 Phil Rendell <philrendell at gmail.com>
>>>>>>>
>>>>>>>
>>>>>>>  Sorry, no joy with this. Both complained about an erroneous
>>>>>>> pipeline. I don't think this could be the same error as before with feeding
>>>>>>> dshowvideosrc into ffmpegcolorspace, as if I remover the systemstream
>>>>>>> property, or set it to either true or false, gst-launch crashes. Setting it
>>>>>>> to anything else appears to cause the erroneous pipeline error.
>>>>>>>
>>>>>>>  D:\Camera\Common\GStreamer\bin>gst-launch-0.10.exe -v dshowvideosrc
>>>>>>> ! "video/x-dv, systemstream=0" ! fakesink
>>>>>>> WARNING: erroneous pipeline: could not link dshowvideosrc0 to
>>>>>>> fakesink0
>>>>>>> D:\Camera\Common\GStreamer\bin>gst-launch-0.10.exe -v dshowvideosrc !
>>>>>>> "video/x-dv, systemstream=1" ! fakesink
>>>>>>> WARNING: erroneous pipeline: could not link dshowvideosrc0 to
>>>>>>> fakesink0
>>>>>>> D:\Camera\Common\GStreamer\bin>gst-launch-0.10.exe -v dshowvideosrc !
>>>>>>> "video/x-dv, systemstream=2" ! fakesink
>>>>>>> WARNING: erroneous pipeline: could not link dshowvideosrc0 to
>>>>>>> fakesink0
>>>>>>> D:\Camera\Common\GStreamer\bin>gst-launch-0.10.exe -v dshowvideosrc !
>>>>>>> fakesink
>>>>>>> Setting pipeline to PAUSED ...
>>>>>>> <Crash>
>>>>>>> D:\Camera\Common\GStreamer\bin>
>>>>>>>
>>>>>>
>>>>>> I am not sure t follow you. You said "as if I remover the systemstream
>>>>>> property, or set it to either true or false"
>>>>>> but you got a link error with "video/x-dv, systemstream=1". Then a
>>>>>> crash ?
>>>>>>
>>>>>
>>>>> Sorry, I probably should have laid that out clearer. I actually
>>>>> executed 4 commands there - one for systemstream=0, one for systemstream=1,
>>>>> one for systemstream=2 and the other as before.
>>>>>
>>>>> If I do a gst-inspect on dshowvideosrc I can see that systemstream is
>>>>> set to true in one case and false in another. No matter what I set it to I
>>>>> always got a crash. However, now when I execute 'gst-launch dshowvideosrc !
>>>>> "video/x-dv, systemstream=true" ! fakesink' I get a lot of console output,
>>>>> which I assume means everything works fine. I'm really not sure what I'm
>>>>> doing differently now though.
>>>>>
>>>>>     D:\Camera\Common\GStreamer\bin>gst-launch-0.10.exe -v
>>>>>>> dshowvideosrc ! "video/x-dv, format=dvsd, width=640, height=480,
>>>>>>> framerate=10" ! fakesink
>>>>>>> Setting pipeline to PAUSED ...
>>>>>>> ** (gst-launch-0.10:2448): WARNING **: your desired video size is not
>>>>>>> valid : 640 mod 1244160 !=0
>>>>>>>
>>>>>>> ** (gst-launch-0.10:2448): WARNING **: your desired video size is not
>>>>>>> valid : 480 mod 1577311108 !=0
>>>>>>> <Crash>
>>>>>>>
>>>>>>
>>>>>> Could you try to add systemstream property as following:
>>>>>>
>>>>>> gst-launch-0.10.exe -v dshowvideosrc ! "video/x-dv, format=dvsd,
>>>>>> width=640, height=480, framerate=10, systemstream=1" ! fakesink
>>>>>> and
>>>>>> gst-launch-0.10.exe -v dshowvideosrc ! "video/x-dv, format=dvsd,
>>>>>> width=640, height=480, framerate=10, systemstream=0" ! fakesink
>>>>>>
>>>>>
>>>>> I think my attempts at experimenting are a little bit of a red herring.
>>>>> gst-launch crashes whenever I pass in the format argument. If  I run
>>>>> gst-launch without this property set I still get the warning about the
>>>>> desired video size being invalid and the same type of console output I
>>>>> experienced just setting the caps to "video/x-dv, systemstream=true":
>>>>>
>>>>> D:\Camera\Common\GStreamer\bin>gst-launch-0.10.exe -v dshowvideosrc !
>>>>> "video/x-dv, systemstream=true, width=640, height=480, framerate=10" !
>>>>> fakesink
>>>>> Setting pipeline to PAUSED ...
>>>>>
>>>>> ** (gst-launch-0.10:3556): WARNING **: your desired video size is not
>>>>> valid : 640 mod 1244160 !=0
>>>>>
>>>>> ** (gst-launch-0.10:3556): WARNING **: your desired video size is not
>>>>> valid : 480 mod 1577311108 !=0
>>>>>
>>>>> /GstPipeline:pipeline0/GstDshowVideoSrc:dshowvideosrc0.GstPad:src: caps
>>>>> = video/x-dv, systemstream=(boolean)true, width=(int)640, height=(int)480,
>>>>> framerate=(int)10
>>>>> Pipeline is live and does not need PREROLL ...
>>>>> Setting pipeline to PLAYING ...
>>>>> New clock: GstSystemClock
>>>>> /GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:src: caps =
>>>>> video/x-dv, systemstream=(boolean)true, width=(int)640, height=(int)480,
>>>>> framerate=(int)10
>>>>> /GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:sink: caps =
>>>>> video/x-dv, systemstream=(boolean)true, width=(int)640, height=(int)480,
>>>>> framerate=(int)10
>>>>> /GstPipeline:pipeline0/GstFakeSink:fakesink0.GstPad:sink: caps =
>>>>> video/x-dv, systemstream=(boolean)true, width=(int)640, height=(int)480,
>>>>> framerate=(int)10
>>>>> /GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = "preroll
>>>>> *******"
>>>>> /GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = "event
>>>>> ******* E(type: 102, GstEventNewsegment, update=(boolean)false,
>>>>> rate=(double)1, applied-rate=(double)1, format=(GstFormat)GST_FORMAT_BYTES,
>>>>> start=(gint64)0, stop=(gint64)-1, position=(gint64)0;) 013379C0"
>>>>> /GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = "chain
>>>>> ******* <(144000 bytes, timestamp: 0:00:00.078125000, duration:
>>>>> 0:00:00.040000000, offset: -1, offset_end: -1, flags: 32) 044D3320"
>>>>> /GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = "chain
>>>>> ******* <(144000 bytes, timestamp: 0:00:00.125000000, duration:
>>>>> 0:00:00.040000000, offset: -1, offset_end: -1, flags: 0) 044D3378"
>>>>> ...
>>>>>
>>>>> Again, it doesn't appear to work when I set systemstream to 0, 1, or 2,
>>>>> only booleans.
>>>>>
>>>>> For some reason when I execute 'gst-launch dshowvideosrc ! "video/x-dv,
>>>>> systemstream=true, width=640, height=480, framerate=10" ! ffdec_dvvideo !
>>>>> directdrawsink' I get the link error saying that it cannot link
>>>>> dshowvideosrc0 to ffdec_dvvideo0. Could this be something to do with the
>>>>> format parameter being missing?
>>>>>
>>>>>
>>>>>>
>>>>>> The thing I know is that dshowvideosrc implementation goes in a wrong
>>>>>> way in case of "video/x-dv, systemstream=1".
>>>>>> I mean it uses FORMAT_VideoInfos fields while it should use
>>>>>> FORMAT_DvInfo fields.
>>>>>> Even if I have no dv camera I could try something but
>>>>>> first I really have to know if it's systemstream=0 or 1.
>>>>>>
>>>>> You probably don't need it now, but I've attached a screenshot of the
>>>>> filter dialog in graphedit, which might be able to tell you which
>>>>> systemstream is being used.
>>>>>
>>>>> Thanks,
>>>>>
>>>>> Phil
>>>>>
>>>>>
>>>>> ------------------------------------------------------------------------------
>>>>>
>>>>> _______________________________________________
>>>>> gstreamer-devel mailing list
>>>>> gstreamer-devel at lists.sourceforge.net
>>>>> https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
>>>>>
>>>>>
>>>>
>>>>
>>>> ------------------------------------------------------------------------------
>>>>
>>>> _______________________________________________
>>>> gstreamer-devel mailing list
>>>> gstreamer-devel at lists.sourceforge.net
>>>> https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
>>>>
>>>>
>>>
>>>
>>> ------------------------------------------------------------------------------
>>>
>>> _______________________________________________
>>> gstreamer-devel mailing list
>>> gstreamer-devel at lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
>>>
>>>
>>
>>
>> ------------------------------------------------------------------------------
>>
>> _______________________________________________
>> gstreamer-devel mailing list
>> gstreamer-devel at lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
>>
>>
>
>
> ------------------------------------------------------------------------------
>
> _______________________________________________
> gstreamer-devel mailing list
> gstreamer-devel at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/gstreamer-devel/attachments/20090629/a53f0062/attachment.htm>


More information about the gstreamer-devel mailing list