diff --git a/src/common/jingle_rtp.py b/src/common/jingle_rtp.py index e64c175c0..d445d0efb 100644 --- a/src/common/jingle_rtp.py +++ b/src/common/jingle_rtp.py @@ -19,6 +19,7 @@ import gobject import xmpp import farsight, gst +from glib import GError import gajim @@ -35,12 +36,12 @@ class JingleRTPContent(JingleContent): self._dtmf_running = False self.farsight_media = {'audio': farsight.MEDIA_TYPE_AUDIO, 'video': farsight.MEDIA_TYPE_VIDEO}[media] - self.got_codecs = False self.candidates_ready = False # True when local candidates are prepared self.callbacks['session-initiate'] += [self.__on_remote_codecs] self.callbacks['content-add'] += [self.__on_remote_codecs] + self.callbacks['description-info'] += [self.__on_remote_codecs] self.callbacks['content-accept'] += [self.__on_remote_codecs, self.__on_content_accept] self.callbacks['session-accept'] += [self.__on_remote_codecs, @@ -177,8 +178,6 @@ class JingleRTPContent(JingleContent): """ Get peer codecs from what we get from peer """ - if self.got_codecs: - return codecs = [] for codec in content.getTag('description').iterTags('payload-type'): @@ -197,7 +196,6 @@ class JingleRTPContent(JingleContent): # glib.GError: There was no intersection between the remote codecs and # the local ones self.p2pstream.set_remote_codecs(codecs) - self.got_codecs = True def iter_codecs(self): codecs = self.p2psession.get_property('codecs') @@ -252,18 +250,21 @@ class JingleAudio(JingleRTPContent): self.p2psession.set_codec_preferences(codecs) # the local parts + # TODO: Add queues? try: - self.sink = gst.parse_bin_from_description(gajim.config.get('audio_output_device'), True) - except: - self.session.connection.dispatch('ERROR', (_("Audio configuration error"), - _("Couldn't setup audio output. Check your audio configuration."))) - - try: - src_bin = gst.parse_bin_from_description(gajim.config.get('audio_input_device'), True) - except: + src_bin = gst.parse_bin_from_description('%s ! audioconvert' + % gajim.config.get('audio_input_device'), True) + except GError: self.session.connection.dispatch('ERROR', (_("Audio configuration error"), _("Couldn't setup audio input. Check your audio configuration."))) + try: + self.sink = gst.parse_bin_from_description('audioconvert ! %s' + % gajim.config.get('audio_output_device'), True) + except GError: + self.session.connection.dispatch('ERROR', (_("Audio configuration error"), + _("Couldn't setup audio output. Check your audio configuration."))) + self.mic_volume = src_bin.get_by_name('gajim_vol') self.mic_volume.set_property('volume', 1) @@ -291,24 +292,26 @@ class JingleVideo(JingleRTPContent): # the local parts try: - src_bin = gst.parse_bin_from_description(gajim.config.get('video_input_device'), True) - except: + src_bin = gst.parse_bin_from_description('%s ! videoscale ! ffmpegcolorspace' + % gajim.config.get('video_input_device'), True) + except GError: self.session.connection.dispatch('ERROR', (_("Video configuration error"), _("Couldn't setup video input. Check your video configuration."))) - caps = gst.element_factory_make('capsfilter') - caps.set_property('caps', gst.caps_from_string('video/x-raw-yuv, width=320, height=240')) + #caps = gst.element_factory_make('capsfilter') + #caps.set_property('caps', gst.caps_from_string('video/x-raw-yuv, width=320, height=240')) - self.pipeline.add(src_bin, caps) - src_bin.link(caps) + self.pipeline.add(src_bin)#, caps) + #src_bin.link(caps) try: - self.sink = gst.parse_bin_from_description(gajim.config.get('video_output_device'), True) - except: + self.sink = gst.parse_bin_from_description('videoscale ! ffmpegcolorspace ! %s' + % gajim.config.get('video_output_device'), True) + except GError: self.session.connection.dispatch('ERROR', (_("Video configuration error"), _("Couldn't setup video output. Check your video configuration."))) self.pipeline.add(self.sink) - caps.get_pad('src').link(self.p2psession.get_property('sink-pad')) + src_bin.get_pad('src').link(self.p2psession.get_property('sink-pad')) self.p2pstream.connect('src-pad-added', self._on_src_pad_added) # The following is needed for farsight to process ICE requests: diff --git a/src/common/jingle_session.py b/src/common/jingle_session.py index 5fcc19029..fb020e3db 100644 --- a/src/common/jingle_session.py +++ b/src/common/jingle_session.py @@ -21,7 +21,7 @@ Handles Jingle sessions (XEP 0166) # * security preconditions # * actions: # - content-modify -# - description-info, session-info +# - session-info # - security-info # - transport-accept, transport-reject # - Tie-breaking diff --git a/src/common/multimedia_helpers.py b/src/common/multimedia_helpers.py index 59d8b635f..4a2a4fb2e 100644 --- a/src/common/multimedia_helpers.py +++ b/src/common/multimedia_helpers.py @@ -78,11 +78,9 @@ class VideoInputManager(DeviceManager): self.detect_element('videotestsrc', _('Video test'), '%s is-live=true') # Auto src - self.detect_element('autovideosrc', _('Autodetect'), - '%s ! videoscale ! ffmpegcolorspace') + self.detect_element('autovideosrc', _('Autodetect')) # V4L2 src ; TODO: Figure out why it doesn't work - self.detect_element('v4l2src', _('V4L2: %s'), - '%s ! videoscale ! ffmpegcolorspace') + self.detect_element('v4l2src', _('V4L2: %s')) # Funny things, just to test... # self.devices['GOOM'] = 'audiotestsrc ! goom' # self.devices['screen'] = 'ximagesrc'