Ability to disable the effects of |rtc_use_h264| with DisableRtcUseH264.

Renamed the WEBRTC_THIRD_PARTY_H264 macro to WEBRTC_USE_H264 to match flag name.

The idea is to be able to turn off H264 from chromium with this function because...
1) The Chromium trybots will soon use this flag, we want to temporarily disable H264 from chromium even if flag is set in case something is broken. That way when we are ready to flip the switch the trybots will run our test code then and not after it is already enabled.
2) If feature is launched and we discover major problems we can easily disable H264 and merge with beta/stable.
3) Or, if feature is behind a *runtime* flag, this is how we would control if it is used or not.

The idea is to call DisableRtcUseH264 in chromium's PeerConnectionDependencyFactory.

BUG=chromium:500605, chromium:468365
NOTRY=True
NOPRESUBMIT=True

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

Cr-Commit-Position: refs/heads/master@{#11474}
This commit is contained in:
hbos 2016-02-03 05:09:37 -08:00 committed by Commit bot
parent 86512b401e
commit 9dc5928eb2
4 changed files with 33 additions and 8 deletions

View File

@ -139,7 +139,7 @@ source_set("webrtc_h264") {
]
if (rtc_use_h264) {
defines += [ "WEBRTC_THIRD_PARTY_H264" ]
defines += [ "WEBRTC_USE_H264" ]
if (rtc_initialize_ffmpeg) {
defines += [ "WEBRTC_INITIALIZE_FFMPEG" ]
}

View File

@ -11,9 +11,9 @@
#include "webrtc/modules/video_coding/codecs/h264/include/h264.h"
#if defined(WEBRTC_THIRD_PARTY_H264)
#include "webrtc/modules/video_coding/codecs/h264/h264_encoder_impl.h"
#if defined(WEBRTC_USE_H264)
#include "webrtc/modules/video_coding/codecs/h264/h264_decoder_impl.h"
#include "webrtc/modules/video_coding/codecs/h264/h264_encoder_impl.h"
#endif
#if defined(WEBRTC_IOS)
#include "webrtc/modules/video_coding/codecs/h264/h264_video_toolbox_decoder.h"
@ -25,6 +25,20 @@
namespace webrtc {
namespace {
#if defined(WEBRTC_USE_H264)
bool g_rtc_use_h264 = true;
#endif
} // namespace
void DisableRtcUseH264() {
#if defined(WEBRTC_USE_H264)
g_rtc_use_h264 = false;
#endif
}
// We need this file to be C++ only so it will compile properly for all
// platforms. In order to write ObjC specific implementations we use private
// externs. This function is defined in h264.mm.
@ -39,8 +53,8 @@ bool IsH264CodecSupported() {
return true;
}
#endif
#if defined(WEBRTC_THIRD_PARTY_H264)
return true;
#if defined(WEBRTC_USE_H264)
return g_rtc_use_h264;
#else
return false;
#endif
@ -54,7 +68,8 @@ H264Encoder* H264Encoder::Create() {
return new H264VideoToolboxEncoder();
}
#endif
#if defined(WEBRTC_THIRD_PARTY_H264)
#if defined(WEBRTC_USE_H264)
RTC_CHECK(g_rtc_use_h264);
LOG(LS_INFO) << "Creating H264EncoderImpl.";
return new H264EncoderImpl();
#else
@ -75,7 +90,8 @@ H264Decoder* H264Decoder::Create() {
return new H264VideoToolboxDecoder();
}
#endif
#if defined(WEBRTC_THIRD_PARTY_H264)
#if defined(WEBRTC_USE_H264)
RTC_CHECK(g_rtc_use_h264);
LOG(LS_INFO) << "Creating H264DecoderImpl.";
return new H264DecoderImpl();
#else

View File

@ -23,9 +23,12 @@
'h264_objc.mm',
],
}],
# TODO(hbos): Consider renaming this flag and the below macro to
# something which helps distinguish OpenH264/FFmpeg from other H264
# implementations.
['rtc_use_h264==1', {
'defines': [
'WEBRTC_THIRD_PARTY_H264',
'WEBRTC_USE_H264',
],
'conditions': [
['rtc_initialize_ffmpeg==1', {

View File

@ -27,6 +27,12 @@
namespace webrtc {
// Set to disable the H.264 encoder/decoder implementations that are provided if
// |rtc_use_h264| build flag is true (if false, this function does nothing).
// This function should only be called before or during WebRTC initialization
// and is not thread-safe.
void DisableRtcUseH264();
class H264Encoder : public VideoEncoder {
public:
static H264Encoder* Create();