Started implementation of Video Chat (not working yet!).

- GUI part is done
- implemented a very basic JPEG codec
- added echo frame in configuration panel
- created a video capture object that uses OpenCV (should be cross systems)
Remains to do:
- serialise and send frames through p3VoRS
- use a serious codec (e.g. Theora+x264)
- add icons to reflect camera state (failure/working/sending/...)
- compilation on windows 



git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@7449 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
csoler 2014-07-13 13:57:25 +00:00
parent 3b88acb45d
commit b6089f3b91
18 changed files with 873 additions and 420 deletions

View file

@ -6,11 +6,11 @@
<rect>
<x>0</x>
<y>0</y>
<width>508</width>
<height>378</height>
<width>501</width>
<height>406</height>
</rect>
</property>
<layout class="QVBoxLayout" name="qwVadLayout">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QPushButton" name="qpbAudioWizard">
<property name="text">
@ -235,116 +235,145 @@
</widget>
</item>
<item>
<widget class="QGroupBox" name="qgbAudio">
<property name="title">
<string>Audio Processing</string>
</property>
<layout class="QGridLayout">
<item row="0" column="0">
<widget class="QLabel" name="qliNoise">
<property name="text">
<string>Noise Suppression</string>
</property>
<property name="buddy">
<cstring>qsNoise</cstring>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QSlider" name="qsNoise">
<property name="enabled">
<bool>true</bool>
</property>
<property name="toolTip">
<string>Noise suppression</string>
</property>
<property name="whatsThis">
<string>&lt;b&gt;This sets the amount of noise suppression to apply.&lt;/b&gt;&lt;br /&gt;The higher this value, the more aggressively stationary noise will be suppressed.</string>
</property>
<property name="minimum">
<number>14</number>
</property>
<property name="maximum">
<number>60</number>
</property>
<property name="pageStep">
<number>5</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QLabel" name="qlNoise">
<property name="minimumSize">
<size>
<width>30</width>
<height>0</height>
</size>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="qliAmp">
<property name="text">
<string>Amplification</string>
</property>
<property name="buddy">
<cstring>qsAmp</cstring>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QSlider" name="qsAmp">
<property name="toolTip">
<string>Maximum amplification of input sound</string>
</property>
<property name="whatsThis">
<string>&lt;b&gt;Maximum amplification of input.&lt;/b&gt;&lt;br /&gt;RetroShare normalizes the input volume before compressing, and this sets how much it's allowed to amplify.&lt;br /&gt;The actual level is continually updated based on your current speech pattern, but it will never go above the level specified here.&lt;br /&gt;If the &lt;i&gt;Microphone loudness&lt;/i&gt; level of the audio statistics hover around 100%, you probably want to set this to 2.0 or so, but if, like most people, you are unable to reach 100%, set this to something much higher.&lt;br /&gt;Ideally, set it so &lt;i&gt;Microphone Loudness * Amplification Factor &gt;= 100&lt;/i&gt;, even when you're speaking really soft.&lt;br /&gt;&lt;br /&gt;Note that there is no harm in setting this to maximum, but RetroShare will start picking up other conversations if you leave it to auto-tune to that level.</string>
</property>
<property name="maximum">
<number>19500</number>
</property>
<property name="singleStep">
<number>500</number>
</property>
<property name="pageStep">
<number>2000</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QLabel" name="qlAmp">
<property name="minimumSize">
<size>
<width>30</width>
<height>0</height>
</size>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QCheckBox" name="qcbEchoCancel">
<property name="text">
<string>Echo Cancellation Processing</string>
</property>
<property name="tristate">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</widget>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QGroupBox" name="qgbAudio">
<property name="title">
<string>Audio Processing</string>
</property>
<layout class="QGridLayout">
<item row="0" column="0">
<widget class="QLabel" name="qliNoise">
<property name="text">
<string>Noise Suppression</string>
</property>
<property name="buddy">
<cstring>qsNoise</cstring>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QSlider" name="qsNoise">
<property name="enabled">
<bool>true</bool>
</property>
<property name="toolTip">
<string>Noise suppression</string>
</property>
<property name="whatsThis">
<string>&lt;b&gt;This sets the amount of noise suppression to apply.&lt;/b&gt;&lt;br /&gt;The higher this value, the more aggressively stationary noise will be suppressed.</string>
</property>
<property name="minimum">
<number>14</number>
</property>
<property name="maximum">
<number>60</number>
</property>
<property name="pageStep">
<number>5</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QLabel" name="qlNoise">
<property name="minimumSize">
<size>
<width>30</width>
<height>0</height>
</size>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="qliAmp">
<property name="text">
<string>Amplification</string>
</property>
<property name="buddy">
<cstring>qsAmp</cstring>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QSlider" name="qsAmp">
<property name="toolTip">
<string>Maximum amplification of input sound</string>
</property>
<property name="whatsThis">
<string>&lt;b&gt;Maximum amplification of input.&lt;/b&gt;&lt;br /&gt;RetroShare normalizes the input volume before compressing, and this sets how much it's allowed to amplify.&lt;br /&gt;The actual level is continually updated based on your current speech pattern, but it will never go above the level specified here.&lt;br /&gt;If the &lt;i&gt;Microphone loudness&lt;/i&gt; level of the audio statistics hover around 100%, you probably want to set this to 2.0 or so, but if, like most people, you are unable to reach 100%, set this to something much higher.&lt;br /&gt;Ideally, set it so &lt;i&gt;Microphone Loudness * Amplification Factor &gt;= 100&lt;/i&gt;, even when you're speaking really soft.&lt;br /&gt;&lt;br /&gt;Note that there is no harm in setting this to maximum, but RetroShare will start picking up other conversations if you leave it to auto-tune to that level.</string>
</property>
<property name="maximum">
<number>19500</number>
</property>
<property name="singleStep">
<number>500</number>
</property>
<property name="pageStep">
<number>2000</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QLabel" name="qlAmp">
<property name="minimumSize">
<size>
<width>30</width>
<height>0</height>
</size>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QCheckBox" name="qcbEchoCancel">
<property name="text">
<string>Echo Cancellation Processing</string>
</property>
<property name="tristate">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Video Processing</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QVideoOutputDevice" name="videoDisplay">
<property name="minimumSize">
<size>
<width>170</width>
<height>128</height>
</size>
</property>
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</item>
<item>
<spacer>
@ -361,6 +390,14 @@
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>QVideoOutputDevice</class>
<extends>QFrame</extends>
<header>gui/QVideoDevice.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<tabstops>
<tabstop>qcbTransmit</tabstop>
<tabstop>qsDoublePush</tabstop>