| Index: webrtc/modules/video_coding/codecs/h264/h264.cc
|
| diff --git a/webrtc/modules/video_coding/codecs/h264/h264.cc b/webrtc/modules/video_coding/codecs/h264/h264.cc
|
| index d4123a2e777d7ecad519d9fe8b406eebe0777e63..8295087fd216560f164aec5e449a9b6230d4a82c 100644
|
| --- a/webrtc/modules/video_coding/codecs/h264/h264.cc
|
| +++ b/webrtc/modules/video_coding/codecs/h264/h264.cc
|
| @@ -11,6 +11,10 @@
|
|
|
| #include "webrtc/modules/video_coding/codecs/h264/include/h264.h"
|
|
|
| +#if defined(WEBRTC_OPENH264)
|
| +#include "webrtc/modules/video_coding/codecs/h264/h264_encoder_impl.h"
|
| +#include "webrtc/modules/video_coding/codecs/h264/h264_decoder_impl.h"
|
| +#endif
|
| #if defined(WEBRTC_IOS)
|
| #include "webrtc/modules/video_coding/codecs/h264/h264_video_toolbox_decoder.h"
|
| #include "webrtc/modules/video_coding/codecs/h264/h264_video_toolbox_encoder.h"
|
| @@ -27,9 +31,31 @@ namespace webrtc {
|
| extern bool IsH264CodecSupportedObjC();
|
| #endif
|
|
|
| +// If any H.264 codec is supported (iOS HW or OpenH264).
|
| bool IsH264CodecSupported() {
|
| #if defined(WEBRTC_IOS)
|
| - return IsH264CodecSupportedObjC();
|
| + if (IsH264CodecSupportedObjC()) {
|
| + return true;
|
| + }
|
| +#endif
|
| +#if defined(WEBRTC_OPENH264)
|
| + return true;
|
| +#else
|
| + return false;
|
| +#endif
|
| +}
|
| +
|
| +// If H.264 codec is supported and OpenH264 is the implementation used, meaning
|
| +// H264EncoderImpl and H264DecoderImpl.
|
| +bool IsOpenH264CodecSupported() {
|
| +#if defined(WEBRTC_OPENH264)
|
| + #if defined(WEBRTC_IOS)
|
| + // If on iOS and we have HW H.264 support we will prefer that over OpenH264
|
| + // and say that OpenH264 is not supported (even though some H264 is).
|
| + return !IsH264CodecSupportedObjC();
|
| + #else
|
| + return true;
|
| + #endif
|
| #else
|
| return false;
|
| #endif
|
| @@ -38,29 +64,49 @@ bool IsH264CodecSupported() {
|
| H264Encoder* H264Encoder::Create() {
|
| DCHECK(H264Encoder::IsSupported());
|
| #if defined(WEBRTC_IOS) && defined(WEBRTC_VIDEO_TOOLBOX_SUPPORTED)
|
| - return new H264VideoToolboxEncoder();
|
| -#else
|
| + if (IsH264CodecSupportedObjC()) {
|
| + return new H264VideoToolboxEncoder();
|
| + }
|
| +#endif
|
| +#if defined(WEBRTC_OPENH264)
|
| + if (IsOpenH264CodecSupported()) {
|
| + return new H264EncoderImpl();
|
| + }
|
| +#endif
|
| RTC_NOTREACHED();
|
| return nullptr;
|
| -#endif
|
| }
|
|
|
| bool H264Encoder::IsSupported() {
|
| return IsH264CodecSupported();
|
| }
|
|
|
| +bool H264Encoder::IsSupportedOpenH264() {
|
| + return IsOpenH264CodecSupported();
|
| +}
|
| +
|
| H264Decoder* H264Decoder::Create() {
|
| DCHECK(H264Decoder::IsSupported());
|
| #if defined(WEBRTC_IOS) && defined(WEBRTC_VIDEO_TOOLBOX_SUPPORTED)
|
| - return new H264VideoToolboxDecoder();
|
| -#else
|
| + if (IsH264CodecSupportedObjC()) {
|
| + return new H264VideoToolboxDecoder();
|
| + }
|
| +#endif
|
| +#if defined(WEBRTC_OPENH264)
|
| + if (IsOpenH264CodecSupported()) {
|
| + return new H264DecoderImpl();
|
| + }
|
| +#endif
|
| RTC_NOTREACHED();
|
| return nullptr;
|
| -#endif
|
| }
|
|
|
| bool H264Decoder::IsSupported() {
|
| return IsH264CodecSupported();
|
| }
|
|
|
| +bool H264Decoder::IsSupportedOpenH264() {
|
| + return IsOpenH264CodecSupported();
|
| +}
|
| +
|
| } // namespace webrtc
|
|
|