![]() |
2009-09-14
, 17:26
|
|
Moderator |
Posts: 7,109 |
Thanked: 8,820 times |
Joined on Oct 2007
@ Vancouver, BC, Canada
|
#2
|
![]() |
2009-09-14
, 17:41
|
|
Posts: 2,427 |
Thanked: 2,986 times |
Joined on Dec 2007
|
#3
|
self.player = gst.parse_launch ('v4l2src device=/dev/video0 ! video/x-raw-yuv,width=320,height=240,framerate=(fraction)15/1 ! autovideosink')
![]() |
2009-09-14
, 17:56
|
|
Moderator |
Posts: 7,109 |
Thanked: 8,820 times |
Joined on Oct 2007
@ Vancouver, BC, Canada
|
#4
|
![]() |
2009-09-14
, 18:08
|
|
Posts: 2,427 |
Thanked: 2,986 times |
Joined on Dec 2007
|
#5
|
self.player = gst.parse_launch ('v4l2src device=/dev/video0 ! autovideosink')
![]() |
2009-09-14
, 18:44
|
|
Moderator |
Posts: 7,109 |
Thanked: 8,820 times |
Joined on Oct 2007
@ Vancouver, BC, Canada
|
#6
|
![]() |
2009-09-17
, 22:20
|
|
Moderator |
Posts: 7,109 |
Thanked: 8,820 times |
Joined on Oct 2007
@ Vancouver, BC, Canada
|
#7
|
![]() |
2009-09-18
, 07:39
|
Posts: 2,102 |
Thanked: 1,309 times |
Joined on Sep 2006
|
#8
|
![]() |
2009-09-18
, 07:56
|
Posts: 2,102 |
Thanked: 1,309 times |
Joined on Sep 2006
|
#9
|
![]() |
2009-09-19
, 00:04
|
|
Posts: 2,427 |
Thanked: 2,986 times |
Joined on Dec 2007
|
#10
|
#! /usr/bin/env python import string import gtk import gst class ShowMe: def __init__(self): window = gtk.Window(gtk.WINDOW_TOPLEVEL) window.set_title("Webcam-Viewer") window.connect("destroy", gtk.main_quit, "WM destroy") vbox = gtk.VBox() window.add(vbox) self.movie_window = gtk.DrawingArea() vbox.add(self.movie_window) hbox = gtk.HBox() vbox.pack_start(hbox, False) hbox.set_border_width(10) hbox.pack_start(gtk.Label()) self.takePicture = 0 self.button0 = gtk.Button("Snap") self.button0.connect("clicked", self.onTakePicture) hbox.pack_start(self.button0, False) self.button = gtk.Button("Start") self.button.connect("clicked", self.start_stop) hbox.pack_start(self.button, False) self.button2 = gtk.Button("Quit") self.button2.connect("clicked", self.exit) hbox.pack_start(self.button2, False) hbox.add(gtk.Label()) window.show_all() if 1 == 1: self.player = gst.Pipeline('ThePipe') src = gst.element_factory_make("gconfv4l2src", "src") self.player.add(src) for p in src.pads(): #print p.get_caps().to_string() print p.get_name() caps = gst.element_factory_make("capsfilter", "caps") caps.set_property('caps', gst.caps_from_string( 'video/x-raw-rgb,width=352,height=288,bpp=16,depth=16,\ framerate=15/1')) #caps.set_property('caps', gst.caps_from_string( #'video/x-raw-rgb,width=352,height=288,\ #framerate=15/1')) #red_mask=224,green_mask=28,blue_mask=3,framerate=15/1')) self.player.add(caps) filt = gst.element_factory_make("ffmpegcolorspace", "filt") self.player.add(filt) caps2 = gst.element_factory_make("capsfilter", "caps2") caps2.set_property('caps', gst.caps_from_string( 'video/x-raw-rgb,width=352,height=288,bpp=16,depth=16,\ framerate=15/1')) self.player.add(caps2) sink = gst.element_factory_make("xvimagesink", "sink") self.player.add(sink) pad = src.get_pad('src') pad.add_buffer_probe(self.doBuffer) src.link(caps) caps.link(filt) filt.link(caps2) caps2.link(sink) # Set up the gstreamer pipeline #self.player = gst.parse_launch ('gconfv4l2src ! video/x-raw-yuv,width=352,height=288,framerate=(fraction)15/1 ! autovideosink') #self.player = gst.parse_launch ('gconfv4l2src ! video/x-raw-yuv,width=352,height=288,framerate=(fraction)15/1 ! tee name=qole qole. ! ffmpegcolorspace ! queue ! filesink location=qole.raw qole. ! queue ! autovideosink') #self.player = gst.parse_launch ('gconfv4l2src ! video/x-raw-rgb,width=352,height=288,framerate=(fraction)15/1 ! tee name=qole qole. ! ffmpegcolorspace ! jpegenc ! filesink location=qole.raw qole. ! queue ! autovideosink') #self.player = gst.parse_launch ('v4l2src ! autovideosink') bus = self.player.get_bus() bus.add_signal_watch() bus.enable_sync_message_emission() bus.connect("message", self.on_message) bus.connect("sync-message::element", self.on_sync_message) def onTakePicture(self, w): self.takePicture = 1 def doBuffer(self, pad, buffer): if self.takePicture: self.takePicture = 0 #print buffer.get_caps() # 63488 2016 31 # 0xf8 0x07,0xe0 0x1f p = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB,False,8,352,288) pa = p.get_pixels() pal = list(pa) for i in range(0,len(buffer)/2): pal[i*3] = "%c" % (0xf8 & ord(buffer[i*2+1])) pal[i*3+1] = "%c" % (((0x07 & ord(buffer[i*2+1])) << 5) |\ ((0xe0 & ord(buffer[i*2])) >> 5)) pal[i*3+2] = "%c" % ((0x1f & ord(buffer[i*2])) << 3) js = string.join(pal,'') pb = gtk.gdk.pixbuf_new_from_data(js,gtk.gdk.COLORSPACE_RGB, False,8,352,288,1056) pb.save('/home/user/MyDocs/.images/daperl00.png','png') print pb.get_width(),pb.get_height() return True def start_stop(self, w): if self.button.get_label() == "Start": self.button.set_label("Stop") self.player.set_state(gst.STATE_PLAYING) else: self.player.set_state(gst.STATE_NULL) self.button.set_label("Start") def exit(self, widget, data=None): gtk.main_quit() def on_message(self, bus, message): t = message.type if t == gst.MESSAGE_EOS: self.player.set_state(gst.STATE_NULL) self.button.set_label("Start") elif t == gst.MESSAGE_ERROR: err, debug = message.parse_error() print "Error: %s" % err, debug self.player.set_state(gst.STATE_NULL) self.button.set_label("Start") def on_sync_message(self, bus, message): if message.structure is None: return message_name = message.structure.get_name() if message_name == "prepare-xwindow-id": # Assign the viewport imagesink = message.src imagesink.set_property("force-aspect-ratio", True) imagesink.set_xwindow_id(self.movie_window.window.xid) if __name__ == "__main__": gtk.gdk.threads_init() ShowMe() gtk.main()
I'm willing to test GStreamer applications on Fremantle hardware.
It would really help multimedia developers if someone could provide GStreamer Editor for Fremantle, to help figure out how to build correct pipelines.
qole.org --- twitter --- Easy Debian wiki page
Please don't send me a private message, post to the appropriate thread.
Thank you all for your donations!