Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(924)

Unified Diff: webrtc/sdk/objc/Framework/UnitTests/objc_video_decoder_factory_tests.mm

Issue 2977213002: Reland of Injectable Obj-C video codecs (Closed)
Patch Set: Add checks to make sure destroy is called Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/sdk/objc/Framework/UnitTests/objc_video_decoder_factory_tests.mm
diff --git a/webrtc/sdk/objc/Framework/UnitTests/objc_video_decoder_factory_tests.mm b/webrtc/sdk/objc/Framework/UnitTests/objc_video_decoder_factory_tests.mm
new file mode 100644
index 0000000000000000000000000000000000000000..c7b1b5fb760a8b6fae2bfe6c93dd21168b273156
--- /dev/null
+++ b/webrtc/sdk/objc/Framework/UnitTests/objc_video_decoder_factory_tests.mm
@@ -0,0 +1,104 @@
+/*
+ * Copyright 2017 The WebRTC project authors. All Rights Reserved.
+ *
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree. An additional intellectual property rights grant can be found
+ * in the file PATENTS. All contributing project authors may
+ * be found in the AUTHORS file in the root of the source tree.
+ */
+
+#import <Foundation/Foundation.h>
+#import <OCMock/OCMock.h>
+
+#include "webrtc/sdk/objc/Framework/Classes/VideoToolbox/objc_video_decoder_factory.h"
+
+#import "WebRTC/RTCVideoCodec.h"
+#import "WebRTC/RTCVideoCodecFactory.h"
+#include "webrtc/modules/include/module_common_types.h"
+#include "webrtc/modules/video_coding/include/video_codec_interface.h"
+#include "webrtc/modules/video_coding/include/video_error_codes.h"
+#include "webrtc/rtc_base/gunit.h"
+
+id<RTCVideoDecoderFactory> CreateDecoderFactoryReturning(int return_code) {
+ id decoderMock = OCMProtocolMock(@protocol(RTCVideoDecoder));
+ OCMStub([decoderMock startDecodeWithSettings:[OCMArg any] numberOfCores:1])
+ .andReturn(return_code);
+ OCMStub([decoderMock decode:[OCMArg any]
+ missingFrames:NO
+ fragmentationHeader:[OCMArg any]
+ codecSpecificInfo:[OCMArg any]
+ renderTimeMs:0])
+ .andReturn(return_code);
+ OCMStub([decoderMock releaseDecoder]).andReturn(return_code);
+
+ id decoderFactoryMock = OCMProtocolMock(@protocol(RTCVideoDecoderFactory));
+ RTCVideoCodecInfo *supported =
+ [[RTCVideoCodecInfo alloc] initWithPayload:0 name:@"H264" parameters:@{}];
+ OCMStub([decoderFactoryMock supportedCodecs]).andReturn(@[ supported ]);
+ OCMStub([decoderFactoryMock createDecoder:[OCMArg any]]).andReturn(decoderMock);
+ return decoderFactoryMock;
+}
+
+id<RTCVideoDecoderFactory> CreateOKDecoderFactory() {
+ return CreateDecoderFactoryReturning(WEBRTC_VIDEO_CODEC_OK);
+}
+
+id<RTCVideoDecoderFactory> CreateErrorDecoderFactory() {
+ return CreateDecoderFactoryReturning(WEBRTC_VIDEO_CODEC_ERROR);
+}
+
+webrtc::VideoDecoder *GetObjCDecoder(id<RTCVideoDecoderFactory> factory) {
+ webrtc::ObjCVideoDecoderFactory decoder_factory(factory);
+ return decoder_factory.CreateVideoDecoder(webrtc::kVideoCodecH264);
+}
+
+#pragma mark -
+
+TEST(ObjCVideoDecoderFactoryTest, InitDecodeReturnsOKOnSuccess) {
+ webrtc::VideoDecoder *decoder = GetObjCDecoder(CreateOKDecoderFactory());
+
+ auto settings = new webrtc::VideoCodec();
+ EXPECT_EQ(decoder->InitDecode(settings, 1), WEBRTC_VIDEO_CODEC_OK);
+}
+
+TEST(ObjCVideoDecoderFactoryTest, InitDecodeReturnsErrorOnFail) {
+ webrtc::VideoDecoder *decoder = GetObjCDecoder(CreateErrorDecoderFactory());
+
+ auto settings = new webrtc::VideoCodec();
+ EXPECT_EQ(decoder->InitDecode(settings, 1), WEBRTC_VIDEO_CODEC_ERROR);
+}
+
+TEST(ObjCVideoDecoderFactoryTest, DecodeReturnsOKOnSuccess) {
+ webrtc::VideoDecoder *decoder = GetObjCDecoder(CreateOKDecoderFactory());
+
+ webrtc::EncodedImage encoded_image;
+ webrtc::RTPFragmentationHeader header;
+ webrtc::CodecSpecificInfo info;
+ info.codecType = webrtc::kVideoCodecH264;
+
+ EXPECT_EQ(decoder->Decode(encoded_image, false, &header, &info, 0), WEBRTC_VIDEO_CODEC_OK);
+}
+
+TEST(ObjCVideoDecoderFactoryTest, DecodeReturnsErrorOnFail) {
+ webrtc::VideoDecoder *decoder = GetObjCDecoder(CreateErrorDecoderFactory());
+
+ webrtc::EncodedImage encoded_image;
+ webrtc::RTPFragmentationHeader header;
+ webrtc::CodecSpecificInfo info;
+ info.codecType = webrtc::kVideoCodecH264;
+
+ EXPECT_EQ(decoder->Decode(encoded_image, false, &header, &info, 0), WEBRTC_VIDEO_CODEC_ERROR);
+}
+
+TEST(ObjCVideoDecoderFactoryTest, ReleaseDecodeReturnsOKOnSuccess) {
+ webrtc::VideoDecoder *decoder = GetObjCDecoder(CreateOKDecoderFactory());
+
+ EXPECT_EQ(decoder->Release(), WEBRTC_VIDEO_CODEC_OK);
+}
+
+TEST(ObjCVideoDecoderFactoryTest, ReleaseDecodeReturnsErrorOnFail) {
+ webrtc::VideoDecoder *decoder = GetObjCDecoder(CreateErrorDecoderFactory());
+
+ EXPECT_EQ(decoder->Release(), WEBRTC_VIDEO_CODEC_ERROR);
+}

Powered by Google App Engine
This is Rietveld 408576698