ability to fix framerate and video size for jingle video.
This commit is contained in:
parent
50653e2a10
commit
44d53c40cc
|
@ -2136,7 +2136,7 @@ $T will be replaced by auto-not-available timeout</property>
|
|||
<child>
|
||||
<object class="GtkTable" id="table8">
|
||||
<property name="visible">True</property>
|
||||
<property name="n_rows">2</property>
|
||||
<property name="n_rows">4</property>
|
||||
<property name="n_columns">2</property>
|
||||
<property name="column_spacing">6</property>
|
||||
<property name="row_spacing">6</property>
|
||||
|
@ -2184,6 +2184,52 @@ $T will be replaced by auto-not-available timeout</property>
|
|||
<property name="bottom_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label26">
|
||||
<property name="visible">True</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">Video framerate</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label27">
|
||||
<property name="visible">True</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">Video size</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="video_framerate_combobox">
|
||||
<property name="visible">True</property>
|
||||
<signal name="changed" handler="on_video_framerate_combobox_changed"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="video_size_combobox">
|
||||
<property name="visible">True</property>
|
||||
<signal name="changed" handler="on_video_size_combobox_changed"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
|
|
|
@ -277,6 +277,8 @@ class Config:
|
|||
'audio_output_device': [opt_str, 'autoaudiosink'],
|
||||
'video_input_device': [opt_str, 'autovideosrc ! videoscale ! ffmpegcolorspace'],
|
||||
'video_output_device': [opt_str, 'autovideosink'],
|
||||
'video_framerate': [opt_str, '', _('Optionally fix jingle output video framerate. Example: 10/1 or 25/2')],
|
||||
'video_size': [opt_str, '', _('Optionally resize jingle output video. Example: 320x240')],
|
||||
'audio_input_volume': [opt_int, 50],
|
||||
'audio_output_volume': [opt_int, 50],
|
||||
'use_stun_server': [opt_bool, True, _('If True, Gajim will try to use a STUN server when using jingle. The one in "stun_server" option, or the one given by the jabber server.')],
|
||||
|
|
|
@ -365,8 +365,22 @@ class JingleVideo(JingleRTPContent):
|
|||
JingleRTPContent.setup_stream(self)
|
||||
|
||||
# the local parts
|
||||
if gajim.config.get('video_framerate'):
|
||||
framerate = 'videorate ! video/x-raw-yuv,framerate=%s ! ' % \
|
||||
gajim.config.get('video_framerate')
|
||||
else:
|
||||
framerate = ''
|
||||
try:
|
||||
w, h = gajim.config.get('video_size').split('x')
|
||||
except:
|
||||
w = h = None
|
||||
if w and h:
|
||||
video_size = 'video/x-raw-yuv,width=%s,height=%s ! ' % (w, h)
|
||||
else:
|
||||
video_size = ''
|
||||
self.src_bin = self.make_bin_from_config('video_input_device',
|
||||
'%s ! videoscale ! ffmpegcolorspace', _("video input"))
|
||||
'%%s ! %svideoscale ! %sffmpegcolorspace' % (framerate, video_size),
|
||||
_("video input"))
|
||||
#caps = gst.element_factory_make('capsfilter')
|
||||
#caps.set_property('caps', gst.caps_from_string('video/x-raw-yuv, width=320, height=240'))
|
||||
|
||||
|
|
|
@ -429,27 +429,47 @@ class PreferencesWindow:
|
|||
buf.connect('changed', self.on_msg_textview_changed)
|
||||
|
||||
### Audio / Video tab ###
|
||||
def create_av_combobox(opt_name, device_dict):
|
||||
def create_av_combobox(opt_name, device_dict, config_name=None,
|
||||
key=None):
|
||||
combobox = self.xml.get_object(opt_name + '_combobox')
|
||||
cell = gtk.CellRendererText()
|
||||
combobox.pack_start(cell, True)
|
||||
combobox.add_attribute(cell, 'text', 0)
|
||||
model = gtk.ListStore(str, str)
|
||||
combobox.set_model(model)
|
||||
if config_name:
|
||||
config = gajim.config.get(config_name)
|
||||
else:
|
||||
config = gajim.config.get(opt_name + '_device')
|
||||
|
||||
for index, (name, value) in enumerate(sorted(device_dict.iteritems())):
|
||||
for index, (name, value) in enumerate(sorted(device_dict.\
|
||||
iteritems(), key=key)):
|
||||
model.append((name, value))
|
||||
if gajim.config.get(opt_name + '_device') == value:
|
||||
if config == value:
|
||||
combobox.set_active(index)
|
||||
|
||||
if HAS_GST:
|
||||
create_av_combobox('audio_input', AudioInputManager().get_devices())
|
||||
create_av_combobox('audio_output', AudioOutputManager().get_devices())
|
||||
create_av_combobox('audio_output', AudioOutputManager().get_devices(
|
||||
))
|
||||
create_av_combobox('video_input', VideoInputManager().get_devices())
|
||||
create_av_combobox('video_output', VideoOutputManager().get_devices())
|
||||
create_av_combobox('video_output', VideoOutputManager().get_devices(
|
||||
))
|
||||
|
||||
def cmp_framerate(f1, f2):
|
||||
print 'tt'
|
||||
create_av_combobox('video_framerate', {_('Default'): '',
|
||||
'15fps': '15/1', '10fps': '10/1', '5fps': '5/1',
|
||||
'2.5fps': '5/2'}, 'video_framerate', key=lambda x: -1 if \
|
||||
x[0] == 'Default' else float(x[0][:-3]))
|
||||
create_av_combobox('video_size', {_('Default'): '',
|
||||
'800x600': '800x600', '640x480': '640x480',
|
||||
'320x240': '320x240'}, 'video_size', key=lambda x: -1 if \
|
||||
x[0] == 'Default' else int(x[0][:3]))
|
||||
|
||||
else:
|
||||
for opt_name in ('audio_input', 'audio_output', 'video_input',
|
||||
'video_output'):
|
||||
'video_output', 'video_framerate', 'video_size'):
|
||||
combobox = self.xml.get_object(opt_name + '_combobox')
|
||||
combobox.set_sensitive(False)
|
||||
|
||||
|
@ -1076,23 +1096,29 @@ class PreferencesWindow:
|
|||
def on_msg_treemodel_row_deleted(self, model, path):
|
||||
self.save_status_messages(model)
|
||||
|
||||
def on_av_combobox_changed(self, combobox, opt_name):
|
||||
def on_av_combobox_changed(self, combobox, config_name):
|
||||
model = combobox.get_model()
|
||||
active = combobox.get_active()
|
||||
device = model[active][1].decode('utf-8')
|
||||
gajim.config.set(opt_name + '_device', device)
|
||||
gajim.config.set(config_name, device)
|
||||
|
||||
def on_audio_input_combobox_changed(self, widget):
|
||||
self.on_av_combobox_changed(widget, 'audio_input')
|
||||
self.on_av_combobox_changed(widget, 'audio_input_device')
|
||||
|
||||
def on_audio_output_combobox_changed(self, widget):
|
||||
self.on_av_combobox_changed(widget, 'audio_output')
|
||||
self.on_av_combobox_changed(widget, 'audio_output_device')
|
||||
|
||||
def on_video_input_combobox_changed(self, widget):
|
||||
self.on_av_combobox_changed(widget, 'video_input')
|
||||
self.on_av_combobox_changed(widget, 'video_input_device')
|
||||
|
||||
def on_video_output_combobox_changed(self, widget):
|
||||
self.on_av_combobox_changed(widget, 'video_output')
|
||||
self.on_av_combobox_changed(widget, 'video_output_device')
|
||||
|
||||
def on_video_framerate_combobox_changed(self, widget):
|
||||
self.on_av_combobox_changed(widget, 'video_framerate')
|
||||
|
||||
def on_video_size_combobox_changed(self, widget):
|
||||
self.on_av_combobox_changed(widget, 'video_size')
|
||||
|
||||
def on_stun_checkbutton_toggled(self, widget):
|
||||
self.on_checkbutton_toggled(widget, 'use_stun_server',
|
||||
|
|
Loading…
Reference in New Issue