~bigwhale/kazam/python3

« back to all changes in this revision

Viewing changes to kazam/backend/gstreamer_gi.py

  • Committer: David Klasinc
  • Date: 2012-11-02 00:40:11 UTC
  • Revision ID: bigwhale@lubica.net-20121102004011-tmzs28ebv5xogman
Dealt with H264 and selectable windows.

Show diffs side-by-side

added added

removed removed

Lines of Context:
60
60
        self.pipeline = Gst.Pipeline()
61
61
        self.area = None
62
62
        self.xid = None
 
63
        self.crop_vid = False
63
64
 
64
65
    def setup_sources(self,
65
66
                      video_source,
145
146
            self.vid_caps_filter = Gst.ElementFactory.make("capsfilter", "vid_filter")
146
147
            self.vid_caps_filter.set_property("caps", self.vid_caps)
147
148
        else:
148
 
 
149
 
            if self.xid:
150
 
                logger.debug("Capturing Window: {0}".format(self.xid))
 
149
            if self.xid:   # xid was passed, so we have to capture a single window.
 
150
                logger.debug("Capturing Window: {0} {1}".format(self.xid, prefs.xid_geometry))
151
151
                self.videosrc.set_property("xid", self.xid)
 
152
 
 
153
                if prefs.codec == CODEC_H264:
 
154
                    self.videocrop = Gst.ElementFactory.make("videocrop", "cropper")
 
155
                    if prefs.xid_geometry[2] % 2:
 
156
                        self.videocrop.set_property("left", 1)
 
157
                        self.crop_vid = True
 
158
                    if prefs.xid_geometry[3] % 2:
 
159
                        self.videocrop.set_property("bottom", 1)
 
160
                        self.crop_vid = True
152
161
            else:
153
162
                self.videosrc.set_property("startx", startx)
154
163
                self.videosrc.set_property("starty", starty)
158
167
            self.videosrc.set_property("use-damage", False)
159
168
            self.videosrc.set_property("show-pointer", prefs.capture_cursor)
160
169
 
161
 
            self.vid_caps = Gst.caps_from_string("video/x-raw,format=(x-raw-rgb),framerate={0}/1".format(prefs.framerate))
162
 
            self.vid_caps_filter = Gst.ElementFactory.make("capsfilter", "vid_filter")
163
 
            self.vid_caps_filter.set_property("caps", self.vid_caps)
 
170
        self.vid_caps = Gst.caps_from_string("video/x-raw,format=(x-raw-rgb),framerate={0}/1".format(prefs.framerate))
 
171
        self.vid_caps_filter = Gst.ElementFactory.make("capsfilter", "vid_filter")
 
172
        self.vid_caps_filter.set_property("caps", self.vid_caps)
164
173
 
165
174
        self.videoconvert = Gst.ElementFactory.make("videoconvert", "videoconvert")
166
175
        self.videorate = Gst.ElementFactory.make("videorate", "video_rate")
243
252
        #
244
253
        self.pipeline.add(self.videosrc)
245
254
        self.pipeline.add(self.vid_in_queue)
 
255
        if self.crop_vid:
 
256
            self.pipeline.add(self.videocrop)
246
257
        self.pipeline.add(self.videorate)
247
258
        self.pipeline.add(self.vid_caps_filter)
248
259
        self.pipeline.add(self.videoconvert)
272
283
    def setup_links(self):
273
284
        # Connect everything together
274
285
        self.videosrc.link(self.vid_in_queue)
275
 
        self.vid_in_queue.link(self.videorate)
 
286
        if self.crop_vid:
 
287
            ret = self.vid_in_queue.link(self.videocrop)
 
288
            print "*** CROPPING 222", ret
 
289
            ret = self.videocrop.link(self.videorate)
 
290
            print "*** CROPPING 222", ret
 
291
        else:
 
292
            self.vid_in_queue.link(self.videorate)
276
293
        self.videorate.link(self.vid_caps_filter)
277
294
        self.vid_caps_filter.link(self.videoconvert)
278
295
        if prefs.codec is CODEC_RAW: