1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* 2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Use of this source code is governed by a BSD-style license 5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * that can be found in the LICENSE file in the root of the source 6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * tree. An additional intellectual property rights grant can be found 7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * in the file PATENTS. All contributing project authors may 8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 11a557f436b9d694d5a0a045e0295e1794f2df48eapbos@webrtc.org#include "webrtc/modules/video_coding/codecs/test_framework/normal_test.h" 12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <sstream> 14b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <string.h> 15a557f436b9d694d5a0a045e0295e1794f2df48eapbos@webrtc.org#include <time.h> 16b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 17a557f436b9d694d5a0a045e0295e1794f2df48eapbos@webrtc.org#include "testing/gtest/include/gtest/gtest.h" 18a557f436b9d694d5a0a045e0295e1794f2df48eapbos@webrtc.org#include "webrtc/common_video/libyuv/include/webrtc_libyuv.h" 19a557f436b9d694d5a0a045e0295e1794f2df48eapbos@webrtc.org#include "webrtc/test/testsupport/fileutils.h" 20b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 21b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgNormalTest::NormalTest() 22b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org: 23b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgCodecTest("Normal Test 1", "A test of normal execution of the codec"), 24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org_testNo(1), 25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org_lengthEncFrame(0), 266bbb5554f3a5037af9bdf323fcfffad60579b267mikhal@webrtc.org_appendNext(false) 27b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 28b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 29b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 30b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgNormalTest::NormalTest(std::string name, std::string description, 31b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org unsigned int testNo) 32b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org: 33b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgCodecTest(name, description), 34b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org_requestKeyFrame(false), 35b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org_testNo(testNo), 36b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org_lengthEncFrame(0), 376bbb5554f3a5037af9bdf323fcfffad60579b267mikhal@webrtc.org_appendNext(false) 38b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 39b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 40b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 41b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgNormalTest::NormalTest(std::string name, std::string description, 4248c4b75e8d0d02294460e357ddb3a07ce295b964pbos@webrtc.org uint32_t bitRate, unsigned int testNo) 43b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org: 44b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgCodecTest(name, description, bitRate), 45b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org_requestKeyFrame(false), 46b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org_testNo(testNo), 47b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org_lengthEncFrame(0), 48b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org_appendNext(false) 49b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 50b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 51b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 52b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgvoid 53b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgNormalTest::Setup() 54b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 55b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CodecTest::Setup(); 56b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org std::stringstream ss; 57b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org std::string strTestNo; 58b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ss << _testNo; 59b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ss >> strTestNo; 60b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 61b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Check if settings exist. Otherwise use defaults. 62b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_outname == "") 63b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 64b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _outname = webrtc::test::OutputPath() + "out_normaltest" + strTestNo + 65b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ".yuv"; 66b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 67b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 68b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_encodedName == "") 69b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 70b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _encodedName = webrtc::test::OutputPath() + "encoded_normaltest" + 71b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org strTestNo + ".yuv"; 72b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 73b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 74b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if ((_sourceFile = fopen(_inname.c_str(), "rb")) == NULL) 75b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 76b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("Cannot read file %s.\n", _inname.c_str()); 77b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org exit(1); 78b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 79b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 80b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if ((_encodedFile = fopen(_encodedName.c_str(), "wb")) == NULL) 81b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 82b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("Cannot write encoded file.\n"); 83b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org exit(1); 84b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 85b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 86b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org char mode[3] = "wb"; 87b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_appendNext) 88b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 89b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org strncpy(mode, "ab", 3); 90b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 91b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 92b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if ((_decodedFile = fopen(_outname.c_str(), mode)) == NULL) 93b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 94b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("Cannot write file %s.\n", _outname.c_str()); 95b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org exit(1); 96b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 97b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 98b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _appendNext = true; 99b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 100b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 101b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgvoid 102b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgNormalTest::Teardown() 103b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 104b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CodecTest::Teardown(); 105b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org fclose(_sourceFile); 106b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org fclose(_decodedFile); 107b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 108b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 109b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgvoid 110b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgNormalTest::Perform() 111b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1123bbed74cdcf1f27ce82104ce645ec0dcdd36902dmikhal@webrtc.org _width = 352; 1133bbed74cdcf1f27ce82104ce645ec0dcdd36902dmikhal@webrtc.org _halfWidth = (_width + 1) / 2; 1143bbed74cdcf1f27ce82104ce645ec0dcdd36902dmikhal@webrtc.org _height = 288; 1153bbed74cdcf1f27ce82104ce645ec0dcdd36902dmikhal@webrtc.org _halfHeight = (_height + 1) / 2; 1163bbed74cdcf1f27ce82104ce645ec0dcdd36902dmikhal@webrtc.org _sizeY = _width * _height; 1173bbed74cdcf1f27ce82104ce645ec0dcdd36902dmikhal@webrtc.org _sizeUv = _halfWidth * _halfHeight; 118b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _inname = webrtc::test::ProjectRootPath() + "resources/foreman_cif.yuv"; 1193bbed74cdcf1f27ce82104ce645ec0dcdd36902dmikhal@webrtc.org CodecSettings(_width, _height, 30, _bitRate); 120b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org Setup(); 121b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1223bbed74cdcf1f27ce82104ce645ec0dcdd36902dmikhal@webrtc.org _inputVideoBuffer.CreateEmptyFrame(_width, _height, 1233bbed74cdcf1f27ce82104ce645ec0dcdd36902dmikhal@webrtc.org _width, _halfWidth, _halfWidth); 1243bbed74cdcf1f27ce82104ce645ec0dcdd36902dmikhal@webrtc.org _decodedVideoBuffer.CreateEmptyFrame(_width, _height, 1253bbed74cdcf1f27ce82104ce645ec0dcdd36902dmikhal@webrtc.org _width, _halfWidth, _halfWidth); 126b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _encodedVideoBuffer.VerifyAndAllocate(_lengthSourceFrame); 127b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 128b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _encoder->InitEncode(&_inst, 1, 1460); 129b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CodecSpecific_InitBitrate(); 130b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _decoder->InitDecode(&_inst,1); 131b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 132b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _totalEncodeTime = _totalDecodeTime = 0; 133b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _framecnt = 0; 134b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _sumEncBytes = 0; 135b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _lengthEncFrame = 0; 136b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int decodeLength = 0; 137b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org while (!Encode()) 138b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 139b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org DoPacketLoss(); 140b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _encodedVideoBuffer.SetLength(_encodedVideoBuffer.Length()); 141b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (fwrite(_encodedVideoBuffer.Buffer(), 1, 142b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _encodedVideoBuffer.Length(), 143b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _encodedFile) != _encodedVideoBuffer.Length()) { 144b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return; 145b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 146b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org decodeLength = Decode(); 147b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (decodeLength < 0) 148b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 149b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org fprintf(stderr,"\n\nError in decoder: %d\n\n", decodeLength); 150b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org exit(EXIT_FAILURE); 151b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1523bbed74cdcf1f27ce82104ce645ec0dcdd36902dmikhal@webrtc.org if (PrintI420VideoFrame(_decodedVideoBuffer, _decodedFile) < 0) { 153b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return; 154b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 155b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CodecSpecific_InitBitrate(); 156b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _framecnt++; 157b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 158b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 159b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Ensure we empty the decoding queue. 160b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org while (decodeLength > 0) 161b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 162b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org decodeLength = Decode(); 163b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (decodeLength < 0) 164b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 165b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org fprintf(stderr,"\n\nError in decoder: %d\n\n", decodeLength); 166b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org exit(EXIT_FAILURE); 167b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1683bbed74cdcf1f27ce82104ce645ec0dcdd36902dmikhal@webrtc.org if (PrintI420VideoFrame(_decodedVideoBuffer, _decodedFile) < 0) { 169b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return; 170b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 171b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 172b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 173b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org double actualBitRate = ActualBitRate(_framecnt) / 1000.0; 174b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org double avgEncTime = _totalEncodeTime / _framecnt; 175b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org double avgDecTime = _totalDecodeTime / _framecnt; 176b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("Actual bitrate: %f kbps\n", actualBitRate); 177b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("Average encode time: %f s\n", avgEncTime); 178b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("Average decode time: %f s\n", avgDecTime); 179b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org (*_log) << "Actual bitrate: " << actualBitRate << " kbps\tTarget: " << _bitRate << " kbps" << std::endl; 180b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org (*_log) << "Average encode time: " << avgEncTime << " s" << std::endl; 181b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org (*_log) << "Average decode time: " << avgDecTime << " s" << std::endl; 182b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 183b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _encoder->Release(); 184b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _decoder->Release(); 185b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 186b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org Teardown(); 187b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 188b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 189b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgbool 190b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgNormalTest::Encode() 191b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 192b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _lengthEncFrame = 0; 193b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_GT(fread(_sourceBuffer, 1, _lengthSourceFrame, _sourceFile), 0u); 194b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (feof(_sourceFile) != 0) 195b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 196b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return true; 197b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1983bbed74cdcf1f27ce82104ce645ec0dcdd36902dmikhal@webrtc.org _inputVideoBuffer.CreateFrame(_sizeY, _sourceBuffer, 1993bbed74cdcf1f27ce82104ce645ec0dcdd36902dmikhal@webrtc.org _sizeUv, _sourceBuffer + _sizeY, 2003bbed74cdcf1f27ce82104ce645ec0dcdd36902dmikhal@webrtc.org _sizeUv, _sourceBuffer + _sizeY + 2013bbed74cdcf1f27ce82104ce645ec0dcdd36902dmikhal@webrtc.org _sizeUv, 2023bbed74cdcf1f27ce82104ce645ec0dcdd36902dmikhal@webrtc.org _width, _height, 2033bbed74cdcf1f27ce82104ce645ec0dcdd36902dmikhal@webrtc.org _width, _halfWidth, _halfWidth); 2043bbed74cdcf1f27ce82104ce645ec0dcdd36902dmikhal@webrtc.org _inputVideoBuffer.set_timestamp(_framecnt); 205b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 206b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // This multiple attempt ridiculousness is to accomodate VP7: 207b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // 1. The wrapper can unilaterally reduce the framerate for low bitrates. 208b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // 2. The codec inexplicably likes to reject some frames. Perhaps there 209b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // is a good reason for this... 210b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int encodingAttempts = 0; 211b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org double starttime = 0; 212b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org double endtime = 0; 213b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org while (_lengthEncFrame == 0) 214b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 215b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org starttime = clock()/(double)CLOCKS_PER_SEC; 216b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2173bbed74cdcf1f27ce82104ce645ec0dcdd36902dmikhal@webrtc.org _inputVideoBuffer.set_width(_inst.width); 2183bbed74cdcf1f27ce82104ce645ec0dcdd36902dmikhal@webrtc.org _inputVideoBuffer.set_height(_inst.height); 219b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org endtime = clock()/(double)CLOCKS_PER_SEC; 220b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 221b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _encodedVideoBuffer.SetHeight(_inst.height); 222b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _encodedVideoBuffer.SetWidth(_inst.width); 223b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_lengthEncFrame < 0) 224b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 225b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org (*_log) << "Error in encoder: " << _lengthEncFrame << std::endl; 226b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org fprintf(stderr,"\n\nError in encoder: %d\n\n", _lengthEncFrame); 227b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org exit(EXIT_FAILURE); 228b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 229b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _sumEncBytes += _lengthEncFrame; 230b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 231b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org encodingAttempts++; 232b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (encodingAttempts > 50) 233b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 234b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org (*_log) << "Unable to encode frame: " << _framecnt << std::endl; 235b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org fprintf(stderr,"\n\nUnable to encode frame: %d\n\n", _framecnt); 236b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org exit(EXIT_FAILURE); 237b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 238b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 239b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _totalEncodeTime += endtime - starttime; 240b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 241b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (encodingAttempts > 1) 242b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 243b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org (*_log) << encodingAttempts << " attempts required to encode frame: " << 244b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _framecnt + 1 << std::endl; 245b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org fprintf(stderr,"\n%d attempts required to encode frame: %d\n", encodingAttempts, 246b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _framecnt + 1); 247b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 248b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 249b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return false; 250b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 251b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 252b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgint 253b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgNormalTest::Decode(int lossValue) 254b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 255b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _encodedVideoBuffer.SetWidth(_inst.width); 256b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _encodedVideoBuffer.SetHeight(_inst.height); 257b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int lengthDecFrame = 0; 258b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (lengthDecFrame < 0) 259b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 260b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return lengthDecFrame; 261b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 262b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _encodedVideoBuffer.SetLength(0); 263b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return lengthDecFrame; 264b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 265