Commit Graph

29 Commits

Author SHA1 Message Date
f5a33f145b Resampler modifications in preparation for arbitrary audioproc rates.
- Templatize PushResampler to support int16 and float.
- Add a helper method to PushSincResampler to compute the algorithmic
delay.

This is a prerequisite of:
http://review.webrtc.org/9919004/

BUG=2894
R=turaj@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/12169004

git-svn-id: http://webrtc.googlecode.com/svn/trunk@5943 4adac7df-926f-26a2-2b94-8c16560cd09d
2014-04-19 00:32:07 +00:00
a596a389ea Fix iSAC/48000 issue with ACM2.
Registeration of iSAC into NetEq is through injecting and external AudioDecoder. This is because iSAC encoder and decoder need to share instances for bandwidth estimator to work. When external decoder is registerred, the sampling rate of the decoder had to be specified. iSAC/48000 decoder has a native sampling rate of 32000 Hz, but it has been registered as 48000 Hz decoder.

This CL fixing this issue by letting NetEq to obtain sampling rate of an external coder according to its existing database.

BUG=3143
TEST=voe_cmd_test,modules_unittest,try-bots
R=henrik.lundin@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/12139004

git-svn-id: http://webrtc.googlecode.com/svn/trunk@5936 4adac7df-926f-26a2-2b94-8c16560cd09d
2014-04-17 23:30:49 +00:00
7c6e3d188a Moved voe_neteq_stats_unittest to audio_coding_module_unittest
The design of VoeNetEqStatsTest in voice_engine_unittests depended on
being able to inject a factory for the audio coding module into
voice engine. This functionality is now likely going away, which would
make this test fail to compile. Further, the functionality under test
is mostly ACM functionality, wherefore it makes better sense to test it
at ACM level.

BUG=2996
R=henrika@webrtc.org, turaj@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/12029004

git-svn-id: http://webrtc.googlecode.com/svn/trunk@5912 4adac7df-926f-26a2-2b94-8c16560cd09d
2014-04-15 17:59:25 +00:00
2c89b5cb27 Make everyone an OWNER for .gyp/.gypi add/delete purposes, non-talk/ edition.
This CL brought to you by:
$ for d in $(for f in $(git ls-files '*gyp' '*gypi'); do dirname $f; done|sort|uniq|grep -v '^\.$'); do echo -e "\n# These are for the common case of adding or renaming files. If you're doing\n# structural changes, please get a review from a reviewer in this file.\nper-file *.gyp=*\nper-file *.gypi=*" >> $d/OWNERS; done
$ for d in $(for f in $(git ls-files '*gyp' '*gypi'); do dirname $f; done|sort|uniq|grep -v '^\.$'); do git add $d/OWNERS; done

(and then removed the talk/ impact)

R=niklas.enbom@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/11969004

git-svn-id: http://webrtc.googlecode.com/svn/trunk@5903 4adac7df-926f-26a2-2b94-8c16560cd09d
2014-04-14 20:08:03 +00:00
35ead381f8 Adding a config struct to NetEq
With this change, the parameters sent to the NetEq::Create method are
collected in one NetEq::Config struct. The benefit is that it is easier
to set, change and override default values, and easier to expand with
more parameters in the future.

BUG=3083
R=turaj@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/11949004

git-svn-id: http://webrtc.googlecode.com/svn/trunk@5902 4adac7df-926f-26a2-2b94-8c16560cd09d
2014-04-14 18:49:17 +00:00
8d1cdaa84e NetEq changes.
BUG=
R=henrik.lundin@webrtc.org, minyue@webrtc.org, tina.legrand@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/9859005

git-svn-id: http://webrtc.googlecode.com/svn/trunk@5889 4adac7df-926f-26a2-2b94-8c16560cd09d
2014-04-11 18:47:55 +00:00
40ee3d07ed Consolidate audio conversion from Channel and TransmitMixer.
Replace the two versions with a single DownConvertToCodecFormat. As
mentioned in comments, this could be further consolidated with
RemixAndResample but we should write a full audio converter class in
that case.

Along the way:
- Fix the bug present in Channel::Demultiplex with mono input and a
stereo codec.
- Remove the 32 kHz max from the OnDataAvailable path. This avoids a
48 -> 32 -> 48 conversion when VoE is passed 48 kHz audio; instead we
get a straight pass-through to ACM. The 32 kHz conversion is still
needed in the RecordedDataIsAvailable path until APM natively supports
48 kHz.
- Merge resampler improvements from ACM1 to ACM2. This allows ACM to
handle 44.1 kHz audio passed to VoE and was originally done here:
https://webrtc-codereview.appspot.com/1590004
- Reuse the RemixAndResample unit tests for DownConvertToCodecFormat.
- Remove unused functions from utility.cc.

BUG=3155,3000,b/12867572
TESTED=voe_cmd_test using both the OnDataAvailable and
RecordedDataIsAvailable paths, with a captured audio format of all
combinations of {44.1,48} kHz and {1,2} channels, running through all
codecs, and finally using both ACM1 and ACM2.

R=henrika@webrtc.org, turaj@webrtc.org, xians@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/11019005

git-svn-id: http://webrtc.googlecode.com/svn/trunk@5843 4adac7df-926f-26a2-2b94-8c16560cd09d
2014-04-03 21:56:01 +00:00
92c0e29963 Run Opus with lower complexity setting on Android, iOS and/or ARM
This CL includes a call to Opus to set a lower complexity figure, if we are compiling for Android, iOS, or ARM (e.g. ChromeOS on ARM), where we know the devices are not powerful enough to run on higher complexity setting.

BUG=3093
R=minyue@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/10489004

git-svn-id: http://webrtc.googlecode.com/svn/trunk@5760 4adac7df-926f-26a2-2b94-8c16560cd09d
2014-03-24 14:38:36 +00:00
ba5a6c3d89 ACM2/NetEq4 did not decode Opus in stereo
Two problems fixed in this CL:
- setting Opus decoder to stereo had no effect, and decoding always generated mono audio
- changing decoding setting from mono to stereo, or stereo to mono, for OPUS also had no effect (but required another change than the first one).

BUG=3082
R=henrik.lundin@webrtc.org, turaj@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/10389004

git-svn-id: http://webrtc.googlecode.com/svn/trunk@5754 4adac7df-926f-26a2-2b94-8c16560cd09d
2014-03-23 09:58:48 +00:00
3ecc162d01 Remove std:: prefixes from C functions in webrtc/.
std::memcpy -> memcpy for instance. This change was motivated by a
compile report complaining that std::rand() was used instead of rand(),
probably with a stdlib.h include instead of cstdlib. Use of C functions
without the std:: prefix is a lot more common, so removing std:: to
address this.

BUG=
R=tommi@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/9549004

git-svn-id: http://webrtc.googlecode.com/svn/trunk@5658 4adac7df-926f-26a2-2b94-8c16560cd09d
2014-03-07 15:23:34 +00:00
2086e0fbf3 Remove unnecessary warnings.
BUG=
TEST=try job
R=andrew@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/8719005

git-svn-id: http://webrtc.googlecode.com/svn/trunk@5565 4adac7df-926f-26a2-2b94-8c16560cd09d
2014-02-18 14:22:20 +00:00
24301a67c6 Update talk to 58174641 together with http://review.webrtc.org/4319005/.
R=turaj@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/5809004

git-svn-id: http://webrtc.googlecode.com/svn/trunk@5287 4adac7df-926f-26a2-2b94-8c16560cd09d
2013-12-13 19:17:43 +00:00
a92baead39 ACM 2 compatibility with ACM 1.
Removing an unregisterd codec from ACM 1 does not result in an error, so should be for ACM 2. Also ACM 1 has post-decode VAD on and AMC 2 needs to have it on by default.

BUG=
Test=trybits

R=tina.legrand@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/5549005

git-svn-id: http://webrtc.googlecode.com/svn/trunk@5276 4adac7df-926f-26a2-2b94-8c16560cd09d
2013-12-13 00:10:44 +00:00
1e8c93c953 Distinguish instances of ACM1 from ACM2 by a version string. This is fpr testing purposes and will be removed when the experiment is done and ACM1 is fade out.
BUG=
R=andrew@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/4069006

git-svn-id: http://webrtc.googlecode.com/svn/trunk@5161 4adac7df-926f-26a2-2b94-8c16560cd09d
2013-11-22 17:04:49 +00:00
57eb858698 Remove ".." from include_dirs in build/common.
BUG=1662
TEST=compile on trybots
R=tina.legrand@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/2332004

git-svn-id: http://webrtc.googlecode.com/svn/trunk@5107 4adac7df-926f-26a2-2b94-8c16560cd09d
2013-11-11 10:20:27 +00:00
31628aae7e Upgrade scoped_ptr to Chromium's latest version.
Analogous to the recent libjingle change: http://cl/54929753-p10.
This supports scoped_ptr<T[]> and scoped_ptr<C, FreeDeleter> rather
than scoped_array and scoped_ptr_malloc respectively.

- Add Chromium's template-based COMPILE_ASSERT. We didn't have this
previously in order to support the macro in C. Instead, move the
existing macro to compile_assert_c.h.
- Additionally copy the move.h and template_util.h depedencies and add
the WARN_UNUSED_RESULT macro.
- Leave scoped_array and scoped_ptr_malloc for now, but mark as
deprecated.
- Remove scoped_ptr foo(NULL) use. The default constructor handles it.
- Remove the now redundant COMPILE_ASSERT from peerconnection_jni.cc.
- Add a CHECK_ARRAY_SIZE macro to rtp_format_vp8_unittest.cc to remove
some repeated code.

TESTED=trybots
R=pbos@webrtc.org, tommi@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/2449005

git-svn-id: http://webrtc.googlecode.com/svn/trunk@5015 4adac7df-926f-26a2-2b94-8c16560cd09d
2013-10-22 12:50:00 +00:00
6d5d248075 Wrap ACM2 code inside acm2 namespace. This gurantees that one ACM would not use components of others by accident.
BUG=
R=minyue@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/2344004

git-svn-id: http://webrtc.googlecode.com/svn/trunk@4933 4adac7df-926f-26a2-2b94-8c16560cd09d
2013-10-06 04:47:28 +00:00
7ee3efb0d8 Disable Receiver unittests on Android.
BUG=
TBR=minyue@google.com

Review URL: https://webrtc-codereview.appspot.com/2344005

git-svn-id: http://webrtc.googlecode.com/svn/trunk@4909 4adac7df-926f-26a2-2b94-8c16560cd09d
2013-10-03 00:05:15 +00:00
6ea3d1cc9e ACM test are modified to run with both ACM1 and ACM2.
Beside the changes in test files. acm2/acm_generic_codec.cc and acm2/audio_coding_module_impl.cc are modified to fix a bug.

Also, nack{.cc, .h, _unittest.cc} are removed form main/sourc as nack files in both ACM1 and ACM2 are essentially identical.

R=andrew@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/2192005

git-svn-id: http://webrtc.googlecode.com/svn/trunk@4908 4adac7df-926f-26a2-2b94-8c16560cd09d
2013-10-02 21:44:33 +00:00
522227012d Reset audio bufer if codec changes, b/10835525.
If there is audio in a codec's audio buffer and sample-rate or number of channels change the audio buffer has to reset. Otherwise, the amount of audio in the buffer is misinterpreted any syncronization between 10ms audio blocks and their associated timestamps is lost.

For instance, assume changing from stereo to mono when there is 10ms stereo in the buffer. The "new" codec will interpret this as 20 ms audio, therefore, 2 blocks of 10 ms, but there is only one timestamp. This will results in  ACMGenericCodec::in_timestamp_ix_write_ updated to a negative number after an encode is performed.

The drawback with this solution is that if packet-size of the codec is changed then audio buffer is reset wich is not necessary. We accept this as it is a rare case in practice that clients of ACM re-register send codecs to change packet-size.

R=andrew@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/2151006

git-svn-id: http://webrtc.googlecode.com/svn/trunk@4887 4adac7df-926f-26a2-2b94-8c16560cd09d
2013-10-01 01:17:37 +00:00
3e7703640f Remove unused constants, so chrome can enable a warning for that. Patch from thakis@
R=andrew@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/2296006

git-svn-id: http://webrtc.googlecode.com/svn/trunk@4844 4adac7df-926f-26a2-2b94-8c16560cd09d
2013-09-25 22:05:05 +00:00
d6a7a5f385 Small fixes to run ACM2 tests.
BUG=
R=minyue@google.com

Review URL: https://webrtc-codereview.appspot.com/2238004

git-svn-id: http://webrtc.googlecode.com/svn/trunk@4836 4adac7df-926f-26a2-2b94-8c16560cd09d
2013-09-25 01:09:23 +00:00
eb524d997b Remove deprecated AudioCodingModule::Destroy.
Have Channel hold a pointer rather than reference, and shorten the name.

TESTED=trybots
R=turaj@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/2256004

git-svn-id: http://webrtc.googlecode.com/svn/trunk@4820 4adac7df-926f-26a2-2b94-8c16560cd09d
2013-09-23 23:02:24 +00:00
10e6cc7e23 VAD changes ported to ACM2.
This CL ports the relevant parts of  https://code.google.com/p/webrtc/source/detail?r=4625 to ACM2.

BUG=
R=tina.legrand@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/2264004

git-svn-id: http://webrtc.googlecode.com/svn/trunk@4804 4adac7df-926f-26a2-2b94-8c16560cd09d
2013-09-20 16:38:26 +00:00
532f3dc548 Compile ACM2 and ACM1.
First patch set is the same as patch set 3 of http://review.webrtc.org/2237004/

-Make ACM1 to depend on ACM2.
-Remove APIs to set and get background noise mode. There is no VoE call to these
APIs.
-Remove APIs to set and get receive side VAD mode. There is no VoE call to these
APIs, and NetEq 4, doesn't support them.
-Remove callback for in-band DTMF detection. ACM doesn't support in-band DTMF
detection.
-Use acm_common_defs.h everywhere required.
-Complete ACM factory method.
-Update ACMCodecDatabase of ACM2. CNG full-band need to be define-guarded.
Remove dynamic payload-type assignment.

BUG=
R=andrew@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/2249004

git-svn-id: http://webrtc.googlecode.com/svn/trunk@4785 4adac7df-926f-26a2-2b94-8c16560cd09d
2013-09-19 00:12:23 +00:00
1c77dfd521 Revert r4772 "Compile ACM1 and ACM2."
Breaks Android build.

TBR=turaj@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/2244004

git-svn-id: http://webrtc.googlecode.com/svn/trunk@4777 4adac7df-926f-26a2-2b94-8c16560cd09d
2013-09-18 12:34:05 +00:00
367baa6eb3 Compile ACM1 and ACM2.
-Make ACM1 to depend on ACM2.
-Remove APIs to set and get background noise mode. There is no VoE call to these APIs.
-Remove APIs to set and get receive side VAD mode. There is no VoE call to these APIs, and NetEq 4, doesn't support them.
-Remove callback for in-band DTMF detection. ACM doesn't support in-band DTMF detection.
-Use acm_common_defs.h everywhere required.
-Complete ACM factory method.
-Update ACMCodecDatabase of ACM2. CNG full-band need to be define-guarded. Remove dynamic payload-type assignment.

BUG=
R=andrew@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/2237004

git-svn-id: http://webrtc.googlecode.com/svn/trunk@4772 4adac7df-926f-26a2-2b94-8c16560cd09d
2013-09-18 00:36:11 +00:00
48af652ea5 Prepare to compile ACM1 and ACM2.
ACM1 code is wrapped in namespace acm1. Inculde paths and define guards of ACM2 source codes are corrected. gypi file of ACM2 is changed so that ACM1 will later on depends on ACM2.

BUG=
R=andrew@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/2206004

git-svn-id: http://webrtc.googlecode.com/svn/trunk@4743 4adac7df-926f-26a2-2b94-8c16560cd09d
2013-09-13 23:06:59 +00:00
7959e16cc2 ACM2 integration with NetEq 4.
nack{.cc, .h, _unittest.cc} are basically copies from main/source/ folder, with cpplint warning cleaned up.

BUG=
R=andrew@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/2190009

git-svn-id: http://webrtc.googlecode.com/svn/trunk@4736 4adac7df-926f-26a2-2b94-8c16560cd09d
2013-09-12 18:30:26 +00:00