41 Commits

Author SHA1 Message Date
pbos
081af25c11 Remove kProtectionKey* and VCMKeyRequestMode.
Enforces previous kProtectionKeyOnLoss as the permanent method which was
the only one used in use. This simplifies SetVideoProtection and
transition over to SetReceiverRobustnessMode.

BUG=webrtc:1596
R=stefan@webrtc.org

Review URL: https://codereview.webrtc.org/1244753002

Cr-Commit-Position: refs/heads/master@{#9641}
2015-07-27 15:02:27 +00:00
pbos
ba8c15b857 Merge methods for configuring NACK/FEC/hybrid.
BUG=webrtc:1695
R=stefan@webrtc.org

Review URL: https://codereview.webrtc.org/1226143013

Cr-Commit-Position: refs/heads/master@{#9580}
2015-07-14 16:36:37 +00:00
jackychen
6e2ce6e1ae Allow for framerate reduction for HW encoder.
R=pbos@webrtc.org, stefan@webrtc.org
TBR=glaznev@google.com

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

Cr-Commit-Position: refs/heads/master@{#9573}
2015-07-13 23:26:40 +00:00
Erik Språng
66a641a9c6 Update encoder settings periodically, not only on new bandwidth estimate
Also moved actual update call to encoder thread, and tweaked frame rate
estimate to be less noisy.

This is a re-upload of https://review.webrtc.org/47249004

BUG=chromium:476469
R=stefan@webrtc.org

Review URL: https://codereview.webrtc.org/1180623005.

Cr-Commit-Position: refs/heads/master@{#9417}
2015-06-11 12:20:17 +00:00
Peter Boström
eb66e800d1 Re-land "Convert native handles to buffers before encoding."
This reverts commit a67675506c9057bd9ffd4d76aae8b743343d434d.

BUG=webrtc:4081
TBR=magjed@webrtc.org

Review URL: https://codereview.webrtc.org/1158273010

Cr-Commit-Position: refs/heads/master@{#9381}
2015-06-05 09:08:12 +00:00
Peter Boström
308d163c71 Revert "Convert native handles to buffers before encoding."
This reverts commit a831dc3a7d10a1fbaa258ee6b1ca6cfc7e91c5ca to unblock
rolling into Chromium.

BUG=4081
TBR=magjed@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#9354}
2015-06-02 13:04:31 +00:00
Peter Boström
a831dc3a7d Convert native handles to buffers before encoding.
Required to permit conversion of NV12 handles on iOS to I420 for VP8
software encoding, which blocks texture-based capture. This change
enforces that all texture-based input provides a method for converting
native handles to I420 if they are ever used with software encoders that
do not understand the native handles.

BUG=4081
R=emircan@chromium.org, glaznev@webrtc.org, hbos@webrtc.org, magjed@webrtc.org, mflodman@webrtc.org, stefan@webrtc.org, tkchin@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#9347}
2015-06-01 18:06:52 +00:00
Miguel Casas-Sanchez
4765070b8d Rename I420VideoFrame to VideoFrame.
This is a mechanical change since it affects so many
files.
I420VideoFrame -> VideoFrame
and reformatted.

Rationale: in the next CL I420VideoFrame will
get an indication of Pixel Format (I420 for
starters) and of storage type: usually
UNOWNED, could be SHMEM, and in the near
future will be possibly TEXTURE. See
https://codereview.chromium.org/1154153003
for the change that happened in Cr.

BUG=4730, chromium:440843
R=jiayl@webrtc.org, niklas.enbom@webrtc.org, pthatcher@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#9339}
2015-05-30 00:21:56 +00:00
Peter Boström
ca667dbfdd Remove VCM debug recordings.
BUG=1695
R=stefan@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#9233}
2015-05-20 11:47:26 +00:00
Peter Boström
df664536af Remove FPS->kilo-FPS conversion in VideoSender.
Wat.

Also moving the parameter to make sure this doesn't happen as easily
(right now it was part of a bitrate conversion from kilobits to bits).

BUG=
R=mflodman@webrtc.org, stefan@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#9177}
2015-05-12 10:22:07 +00:00
jackychen
61b4d518af Dynamic resolution change for VP8 HW encode.
Off by default for now.

BUG=
R=glaznev@webrtc.org, stefan@webrtc.org
TBR=mflodman@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#9045}
2015-04-21 22:29:53 +00:00
Peter Boström
9dbbcfbcb5 Remove VideoCodingModule::InitializeSender.
This code is no longer used to reset, so we can just initialize the
object in the constructor.

BUG=4391
R=stefan@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#9043}
2015-04-21 13:54:56 +00:00
mflodman
fcf54bdabb Reland "Avoid critsect for protection- and qm setting callbacks in
VideoSender."

The original Cl is uploaded as patch set 1, the fix in ps#2 and I'll rebase in ps#3.

BUG=4534
R=pbos@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#9000}
2015-04-14 19:28:03 +00:00
mflodman
0828a0c094 Revert "Avoid critsect for protection- and qm setting callbacks in VideoSender."
This reverts commit 903c0f2e7649a2b98659286dc228447facd49bb7,
aka #8899.

TBR=pbos@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#8901}
2015-03-31 13:29:31 +00:00
mflodman
903c0f2e76 Avoid critsect for protection- and qm setting callbacks in VideoSender.
This CL avoids changing the mentioned callbacks during a call, to avoid
a potential deadlock when acquiring _sendCritSect and calling
_mediaOpt.SetTargetRates.

Moving the critsect revealed a race for the FEC parameters in RtpVideoSender, so the CL grew a bit to avoid this. I also cleaned up some code here at the same time, but tried to keep it at a minimum since this CL had already increased a lot in size.

BUG=769
R=pbos@webrtc.org, stefan@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#8899}
2015-03-31 13:07:26 +00:00
pbos@webrtc.org
0b52cebd28 Improve logging and add DCHECKs in codec database.
BUG=
R=mflodman@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#8842}
git-svn-id: http://webrtc.googlecode.com/svn/trunk@8842 4adac7df-926f-26a2-2b94-8c16560cd09d
2015-03-24 11:21:18 +00:00
pbos@webrtc.org
cade82c56f Refactor MediaOptimization protection methods.
Makes MediaOptimization::EnableProtectionMethod significantly less
confusing. Also removing some dead methods in VideoSender.

BUG=
R=mflodman@webrtc.org
TBR=stefan@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#8693}
git-svn-id: http://webrtc.googlecode.com/svn/trunk@8693 4adac7df-926f-26a2-2b94-8c16560cd09d
2015-03-12 10:39:43 +00:00
tommi@webrtc.org
558dc40c88 Reland 8631 "Speculative revert of 8631 "Remove lock from Bitrat..."
> Speculative revert of 8631 "Remove lock from Bitrate() and FrameRate() in Video..."
> 
> We ran into the alignment problem on Mac 10.9 debug again.  This is the only CL I see in the range that adds an rtc::CriticalSection, so I'm trying out reverting it before attempting another roll.
> 
> > Remove lock from Bitrate() and FrameRate() in VideoSender.
> > These methods are called on the VideoSender's construction thread, which is the same thread as modifies the value of _encoder.  It's therefore safe to not require a lock to access _encoder on this thread.
> > 
> > I'm making access to the rate variables from VCMGenericEncoder, thread safe, by using a lock that's not associated with the encoder.  There should be little to no contention there.  While modifying VCMGenericEncoder, I noticed that a couple of member variables weren't needed, so I removed them.
> > 
> > The reason for this change is that getStats is currently contending with the encoder when Bitrate() is called. On my machine, this means that getStats can take about 25-30ms instead of ~1ms.
> > 
> > Also adding some documentation for other methods and a suggestion for how we could avoid contention between the encoder and the network thread.
> > 
> > BUG=2822
> > R=mflodman@webrtc.org
> > 
> > Review URL: https://webrtc-codereview.appspot.com/43479004
> 
> TBR=tommi@webrtc.org
> 
> Review URL: https://webrtc-codereview.appspot.com/45529004

TBR=tommi@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#8645}
git-svn-id: http://webrtc.googlecode.com/svn/trunk@8645 4adac7df-926f-26a2-2b94-8c16560cd09d
2015-03-07 20:56:50 +00:00
tommi@webrtc.org
92696cd0c6 Speculative revert of 8631 "Remove lock from Bitrate() and FrameRate() in Video..."
We ran into the alignment problem on Mac 10.9 debug again.  This is the only CL I see in the range that adds an rtc::CriticalSection, so I'm trying out reverting it before attempting another roll.

> Remove lock from Bitrate() and FrameRate() in VideoSender.
> These methods are called on the VideoSender's construction thread, which is the same thread as modifies the value of _encoder.  It's therefore safe to not require a lock to access _encoder on this thread.
> 
> I'm making access to the rate variables from VCMGenericEncoder, thread safe, by using a lock that's not associated with the encoder.  There should be little to no contention there.  While modifying VCMGenericEncoder, I noticed that a couple of member variables weren't needed, so I removed them.
> 
> The reason for this change is that getStats is currently contending with the encoder when Bitrate() is called. On my machine, this means that getStats can take about 25-30ms instead of ~1ms.
> 
> Also adding some documentation for other methods and a suggestion for how we could avoid contention between the encoder and the network thread.
> 
> BUG=2822
> R=mflodman@webrtc.org
> 
> Review URL: https://webrtc-codereview.appspot.com/43479004

TBR=tommi@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#8640}
git-svn-id: http://webrtc.googlecode.com/svn/trunk@8640 4adac7df-926f-26a2-2b94-8c16560cd09d
2015-03-07 09:26:43 +00:00
tommi@webrtc.org
0d5ea21325 Remove lock from Bitrate() and FrameRate() in VideoSender.
These methods are called on the VideoSender's construction thread, which is the same thread as modifies the value of _encoder.  It's therefore safe to not require a lock to access _encoder on this thread.

I'm making access to the rate variables from VCMGenericEncoder, thread safe, by using a lock that's not associated with the encoder.  There should be little to no contention there.  While modifying VCMGenericEncoder, I noticed that a couple of member variables weren't needed, so I removed them.

The reason for this change is that getStats is currently contending with the encoder when Bitrate() is called. On my machine, this means that getStats can take about 25-30ms instead of ~1ms.

Also adding some documentation for other methods and a suggestion for how we could avoid contention between the encoder and the network thread.

BUG=2822
R=mflodman@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#8631}
git-svn-id: http://webrtc.googlecode.com/svn/trunk@8631 4adac7df-926f-26a2-2b94-8c16560cd09d
2015-03-06 12:21:41 +00:00
pbos@webrtc.org
67a9e40286 Prevent encoding frames with wrong resolution.
This is a speculative fix for a crash that should be able to happen if a
codec is reconfigured while a frame is leaving the
VideoProcessingModule, causing a mismatch between configured codec and
input frame size.

BUG=
R=magjed@webrtc.org
TBR=mflodman@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#8615}
git-svn-id: http://webrtc.googlecode.com/svn/trunk@8615 4adac7df-926f-26a2-2b94-8c16560cd09d
2015-03-05 13:58:16 +00:00
tommi@webrtc.org
658d2015f3 Allow VideoSender to be constructed on one thread but initialized and used for doing registrations, on another.
R=andresp@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#8613}
git-svn-id: http://webrtc.googlecode.com/svn/trunk@8613 4adac7df-926f-26a2-2b94-8c16560cd09d
2015-03-05 12:22:22 +00:00
kwiberg@webrtc.org
00b8f6b364 Use base/scoped_ptr.h; system_wrappers/interface/scoped_ptr.h is going away
BUG=
R=andrew@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#8517}
git-svn-id: http://webrtc.googlecode.com/svn/trunk@8517 4adac7df-926f-26a2-2b94-8c16560cd09d
2015-02-26 14:43:50 +00:00
pbos@webrtc.org
891d48393e Wire up target_media_bitrate in VideoSendStream.
Also wires up target_enc_bitrate in WebRtcVideoEngine2.

BUG=1667,1788
R=mflodman@webrtc.org, stefan@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#8515}
git-svn-id: http://webrtc.googlecode.com/svn/trunk@8515 4adac7df-926f-26a2-2b94-8c16560cd09d
2015-02-26 13:16:17 +00:00
tommi@webrtc.org
e07710cc91 Make SendCodec() lock-free.
Fetching the current codec for sake of gathering stats, is frequently blocked since it's done by acquiring the same lock as is held while encoding frames.  This can mean tens of milliseconds.

To improve this, I'm taking advantage of the fact that the codec information is set on the same thread as is used to query the information.  This means that locking isn't needed for querying this information.  I'm adding checks to make sure debug builds will crash if this isn't followed.

An alternative to this approach could be to add one more lock that is specifically used for the codec information variable.  This would also decouple querying codec information from the encoder itself, but still requires a lock.

This patch depends on making ThreadChecker part of rtc_base_approved:
https://webrtc-codereview.appspot.com/40539004/

BUG=2822
R=mflodman@webrtc.org, pthatcher@webrtc.org

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

Cr-Commit-Position: refs/heads/master@{#8435}
git-svn-id: http://webrtc.googlecode.com/svn/trunk@8435 4adac7df-926f-26a2-2b94-8c16560cd09d
2015-02-19 17:43:45 +00:00
pkasting@chromium.org
16825b1a82 Use int64_t more consistently for times, in particular for RTT values.
Existing code was inconsistent about whether to use uint16_t, int, unsigned int,
or uint32_t, and sometimes silently truncated one to another, or truncated
int64_t.  Because most core time-handling functions use int64_t, being
consistent about using int64_t unless otherwise necessary minimizes the number
of explicit or implicit casts.

BUG=chromium:81439
TEST=none
R=henrik.lundin@webrtc.org, holmer@google.com, tommi@webrtc.org

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

git-svn-id: http://webrtc.googlecode.com/svn/trunk@8045 4adac7df-926f-26a2-2b94-8c16560cd09d
2015-01-12 21:51:21 +00:00
pkasting@chromium.org
0b1534c52e Use int64_t for milliseconds more often, primarily for TimeUntilNextProcess.
This fixes a variety of MSVC warnings about value truncations when implicitly
storing the 64-bit values we get back from e.g. TimeTicks in 32-bit objects, and
removes the need for a number of explicit casts.

This also moves a number of constants so they're declared right where they're used, which is easier to read and maintain, and makes some of them of integral type rather than using the "enum hack".

BUG=chromium:81439
TEST=none
R=tommi@webrtc.org

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

git-svn-id: http://webrtc.googlecode.com/svn/trunk@7905 4adac7df-926f-26a2-2b94-8c16560cd09d
2014-12-15 22:09:40 +00:00
pbos@webrtc.org
4f16c874c6 Simplifying VideoReceiver and JitterBuffer.
Removing frame_buffers_ array and dual-receiver mechanism. Also adding
some thread annotations to VCMJitterBuffer.

R=stefan@webrtc.org
BUG=4014

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

git-svn-id: http://webrtc.googlecode.com/svn/trunk@7735 4adac7df-926f-26a2-2b94-8c16560cd09d
2014-11-24 09:06:48 +00:00
stefan@webrtc.org
34c5da6b5e Cleaned up logging in video_coding.
Converted all calls to WEBRTC_TRACE to LOG(). Also removed a large number of less useful logs.

BUG=3153
R=mflodman@webrtc.org, pbos@webrtc.org

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

git-svn-id: http://webrtc.googlecode.com/svn/trunk@5887 4adac7df-926f-26a2-2b94-8c16560cd09d
2014-04-11 14:08:35 +00:00
andresp@webrtc.org
1df9dc3957 Isolate register post encode callback in video coding module to simplify code and critical sections.
R=marpan@webrtc.org

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

git-svn-id: http://webrtc.googlecode.com/svn/trunk@5357 4adac7df-926f-26a2-2b94-8c16560cd09d
2014-01-09 08:01:57 +00:00
andresp@webrtc.org
b08a12d6e8 Isolate debug recording from video sender into a thread safe small class.
R=marpan@webrtc.org

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

git-svn-id: http://webrtc.googlecode.com/svn/trunk@5353 4adac7df-926f-26a2-2b94-8c16560cd09d
2014-01-08 12:38:22 +00:00
andresp@webrtc.org
e682aa5077 Refactoring MediaOptimization so it can easily be turned into a thread-safe class.
BUG=2732
R=stefan@webrtc.org

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

git-svn-id: http://webrtc.googlecode.com/svn/trunk@5322 4adac7df-926f-26a2-2b94-8c16560cd09d
2013-12-19 10:59:48 +00:00
sprang@webrtc.org
4070935f4f Implement and test EncodedImageCallback in new ViE API.
R=mflodman@webrtc.org, pbos@webrtc.org, stefan@webrtc.org

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

git-svn-id: http://webrtc.googlecode.com/svn/trunk@5179 4adac7df-926f-26a2-2b94-8c16560cd09d
2013-11-26 11:41:59 +00:00
henrik.lundin@webrtc.org
ce8e0936d9 Rename AutoMute to SuspendBelowMinBitrate
Changes all instances throughout the WebRTC stack.

BUG=2436
R=mflodman@webrtc.org, stefan@webrtc.org

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

git-svn-id: http://webrtc.googlecode.com/svn/trunk@5130 4adac7df-926f-26a2-2b94-8c16560cd09d
2013-11-18 12:18:43 +00:00
henrik.lundin@webrtc.org
1a3a6e5340 Removing the threshold from the auto-mute APIs
The threshold is now set equal to the minimum bitrate of the
encoder. The test is also changed to have the REMB values
depend on the minimum bitrate from the encoder.

BUG=2436
R=pbos@webrtc.org, stefan@webrtc.org

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

git-svn-id: http://webrtc.googlecode.com/svn/trunk@5040 4adac7df-926f-26a2-2b94-8c16560cd09d
2013-10-28 10:16:14 +00:00
henrik.lundin@webrtc.org
572699d3eb Propagate AutoMuter interface out to VideoCodingModule
BUG=2436
R=stefan@webrtc.org

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

git-svn-id: http://webrtc.googlecode.com/svn/trunk@4878 4adac7df-926f-26a2-2b94-8c16560cd09d
2013-09-30 12:16:08 +00:00
henrik.lundin@webrtc.org
bec11ef632 Reformatting media_optimization.cc and .h
Ran both tools/refactoring/webrtc_reformat.py and clang-format.
Changing VCMMediaOptimization -> MediaOptimization and
VCMEncodedFrameSample -> EncodedFrameSample.
Aligning the order of methods in .h and .cc files and fixing comments.

R=stefan@webrtc.org

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

git-svn-id: http://webrtc.googlecode.com/svn/trunk@4816 4adac7df-926f-26a2-2b94-8c16560cd09d
2013-09-23 19:54:25 +00:00
stefan@webrtc.org
8db81c5112 Fix races in vcm::Process().
R=pbos@webrtc.org

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

git-svn-id: http://webrtc.googlecode.com/svn/trunk@4775 4adac7df-926f-26a2-2b94-8c16560cd09d
2013-09-18 11:57:34 +00:00
pbos@webrtc.org
32d640e03d Fix typo in r4765.
Fixes compile error on all platforms.

BUG=
TEST=compile on tryboys
R=stefan@webrtc.org

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

git-svn-id: http://webrtc.googlecode.com/svn/trunk@4766 4adac7df-926f-26a2-2b94-8c16560cd09d
2013-09-17 10:36:30 +00:00
pbos@webrtc.org
da2c4cede0 Fix dangling pointer _encoder in video_sender.cc.
When _codecDataBase.SetSendCodec() fails, the encoder may be deleted.
This is however not reflected in _encoder, which then becomes a dangling
pointer to the deleted object.

BUG=2384
R=stefan@webrtc.org

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

git-svn-id: http://webrtc.googlecode.com/svn/trunk@4765 4adac7df-926f-26a2-2b94-8c16560cd09d
2013-09-17 09:38:41 +00:00
andresp@webrtc.org
f7eb75be1a Split VideoCodingModuleImpl into VideoSender and VideoReceiver.
Only implmentation is changed the interface to the module is unchanged for now.

R=mikhal@webrtc.org

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

git-svn-id: http://webrtc.googlecode.com/svn/trunk@4746 4adac7df-926f-26a2-2b94-8c16560cd09d
2013-09-14 00:25:28 +00:00