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

Unified Diff: third_party/openh264/testing/h264_codec_tester.cc

Issue 1403893007: Adding third_party/openh264/src, build files and unittests (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rename var to 'use_openh264', add OpenH264 to 'all' target of GN Created 5 years, 1 month 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: third_party/openh264/testing/h264_codec_tester.cc
diff --git a/third_party/openh264/testing/h264_codec_tester.cc b/third_party/openh264/testing/h264_codec_tester.cc
new file mode 100644
index 0000000000000000000000000000000000000000..cdf9d8152cd1692e4055a9594cf6310d665e3cce
--- /dev/null
+++ b/third_party/openh264/testing/h264_codec_tester.cc
@@ -0,0 +1,112 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "third_party/openh264/testing/h264_codec_tester.h"
+
+using namespace webrtc;
+
+namespace openh264 {
+
+H264CodecTester::H264CodecTester() : last_encoded_image_(nullptr),
+ last_decoded_image_(nullptr) {
+}
+
+H264CodecTester::~H264CodecTester() {
+ encoder_.Release();
+ decoder_.Release();
+}
+
+bool H264CodecTester::Init(unsigned short width, unsigned short height) {
+ const int32_t number_of_cores = 1;
+ const size_t max_payload_size = 0;
+
+ // Codec settings...
+ VideoCodec codec;
+ memset(&codec, 0, sizeof(codec));
+
+ codec.codecType = kVideoCodecH264;
+ strncpy(codec.plName, "H264", 5);
+ codec.plType = 120;
+
+ codec.width = width;
+ codec.height = height;
+
+ codec.minBitrate = 300;
+ codec.maxBitrate = 600;
+ codec.targetBitrate = 450;
+ codec.startBitrate = codec.minBitrate;
+ codec.maxFramerate = 30;
+
+ memset(&codec.codecSpecific.H264, 0, sizeof(codec.codecSpecific.H264));
+ codec.codecSpecific.H264.profile = kProfileBase;
+ codec.codecSpecific.H264.frameDroppingOn = true;
+ codec.codecSpecific.H264.keyFrameInterval = 3000;
+ codec.codecSpecific.H264.spsData = nullptr;
+ codec.codecSpecific.H264.spsLen = 0;
+ codec.codecSpecific.H264.ppsData = nullptr;
+ codec.codecSpecific.H264.ppsLen = 0;
+
+ codec.qpMax = 56;
+ codec.numberOfSimulcastStreams = 1;
+ codec.simulcastStream[0].width = codec.width;
+ codec.simulcastStream[0].height = codec.height;
+ codec.simulcastStream[0].minBitrate = codec.minBitrate;
+ codec.simulcastStream[0].maxBitrate = codec.maxBitrate;
+ codec.simulcastStream[0].targetBitrate = codec.targetBitrate;
+ codec.simulcastStream[0].qpMax = codec.qpMax;
+ codec.simulcastStream[0].numberOfTemporalLayers = 1;
+
+ codec.mode = kRealtimeVideo;
+ codec.extra_options = nullptr;
+
+ // Initialize encoder and decoder.
+ if (encoder_.InitEncode(&codec, number_of_cores, max_payload_size)
+ != WEBRTC_VIDEO_CODEC_OK) {
+ encoder_.Release();
+ return false;
+ }
+ if (decoder_.InitDecode(&codec, number_of_cores) != WEBRTC_VIDEO_CODEC_OK) {
+ encoder_.Release();
+ decoder_.Release();
+ return false;
+ }
+
+ // Register so that Encoded and Decoded will be called.
+ encoder_.RegisterEncodeCompleteCallback(this);
+ decoder_.RegisterDecodeCompleteCallback(this);
+
+ return true;
+}
+
+bool H264CodecTester::Encode(const VideoFrame& frame) {
+ last_encoded_image_ = nullptr;
+ if (encoder_.Encode(frame, nullptr, nullptr) != WEBRTC_VIDEO_CODEC_OK ||
+ !last_encoded_image_) {
+ return false;
+ }
+ return true;
+}
+
+VideoFrame* H264CodecTester::Decode() {
+ last_decoded_image_ = nullptr;
+ if (decoder_.Decode(*last_encoded_image_, false, nullptr)
+ != WEBRTC_VIDEO_CODEC_OK || !last_decoded_image_) {
+ return nullptr;
+ }
+ return last_decoded_image_;
+}
+
+int32_t H264CodecTester::Encoded(const EncodedImage& encoded_image,
+ const CodecSpecificInfo* codec_specific_info,
+ const RTPFragmentationHeader* fragmentation) {
+ last_encoded_image_ = &encoded_image;
+ return WEBRTC_VIDEO_CODEC_OK;
+}
+
+int32_t H264CodecTester::Decoded(VideoFrame& decoded_image) {
+ last_decoded_image_ = &decoded_image;
+ return WEBRTC_VIDEO_CODEC_OK;
+}
+
+} // namespace openh264

Powered by Google App Engine
This is Rietveld 408576698