Chromium Code Reviews| 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(); |
|
stefan-webrtc
2015/09/28 11:19:01
This seems a bit strange to me. Shouldn't we alway
hbos
2015/09/30 15:35:18
You're right. If we are able to support both HW an
stefan-webrtc
2015/10/01 08:19:30
But what I'm opposed to is that IsOpenH264CodecSup
hbos
2015/10/01 12:19:45
Poor name choice. It wasn't "do we support the Ope
|
| + #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 |