1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* 2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Copyright (c) 2011 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/main/test/video_source.h" 12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 133f45c2e0ac4cb280f941efa3a3476895795e3dd6pbos@webrtc.org#include <assert.h> 14b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 15a557f436b9d694d5a0a045e0295e1794f2df48eapbos@webrtc.org#include "webrtc/test/testsupport/fileutils.h" 16b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 17b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgVideoSource::VideoSource() 18b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org: 19b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org_fileName(webrtc::test::ProjectRootPath() + "resources/foreman_cif.yuv"), 20b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org_width(352), 21b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org_height(288), 22b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org_type(webrtc::kI420), 23b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org_frameRate(30) 24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // 26b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 27b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 28b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgVideoSource::VideoSource(std::string fileName, VideoSize size, 29b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org float frameRate, webrtc::VideoType type /*= webrtc::kI420*/) 30b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org: 31b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org_fileName(fileName), 32b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org_width(0), 33b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org_height(0), 34b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org_type(type), 35b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org_frameRate(frameRate) 36b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 37b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org assert(size != kUndefined && size != kNumberOfVideoSizes); 38b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org assert(type != webrtc::kUnknown); 39b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org assert(frameRate > 0); 40b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org GetWidthHeight(size); 41b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 42b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 43dba5f4541529da6ce75cc634834a9197e610731bpbos@webrtc.orgVideoSource::VideoSource(std::string fileName, uint16_t width, uint16_t height, 44b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org float frameRate /*= 30*/, webrtc::VideoType type /*= webrtc::kI420*/) 45b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org: 46b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org_fileName(fileName), 47b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org_width(width), 48b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org_height(height), 49b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org_type(type), 50b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org_frameRate(frameRate) 51b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 52b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org assert(width > 0); 53b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org assert(height > 0); 54b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org assert(type != webrtc::kUnknown); 55b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org assert(frameRate > 0); 56b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 57b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 58dba5f4541529da6ce75cc634834a9197e610731bpbos@webrtc.orgint32_t 59b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgVideoSource::GetFrameLength() const 60b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 61b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return webrtc::CalcBufferSize(_type, _width, _height); 62b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 63b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 64b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgstd::string 65b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgVideoSource::GetName() const 66b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 67b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Remove path. 68b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org size_t slashPos = _fileName.find_last_of("/\\"); 69b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (slashPos == std::string::npos) 70b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 71b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org slashPos = 0; 72b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 73b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org else 74b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 75b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org slashPos++; 76b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 77b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 78b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Remove extension and underscored suffix if it exists. 79b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org //return _fileName.substr(slashPos, std::min(_fileName.find_last_of("_"), 80b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // _fileName.find_last_of(".")) - slashPos); 81b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // MS: Removing suffix, not underscore....keeping full file name 82b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return _fileName.substr(slashPos, _fileName.find_last_of(".") - slashPos); 83b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 84b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 85b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 86b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgint 87b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgVideoSource::GetWidthHeight( VideoSize size) 88b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 89b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org switch(size) 90b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 91b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case kSQCIF: 92b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _width = 128; 93b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _height = 96; 94b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 95b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case kQQVGA: 96b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _width = 160; 97b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _height = 120; 98b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 99b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case kQCIF: 100b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _width = 176; 101b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _height = 144; 102b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 103b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case kCGA: 104b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _width = 320; 105b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _height = 200; 106b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 107b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case kQVGA: 108b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _width = 320; 109b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _height = 240; 110b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 111b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case kSIF: 112b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _width = 352; 113b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _height = 240; 114b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 115b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case kWQVGA: 116b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _width = 400; 117b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _height = 240; 118b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 119b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case kCIF: 120b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _width = 352; 121b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _height = 288; 122b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 123b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case kW288p: 124b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _width = 512; 125b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _height = 288; 126b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 127b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case k448p: 128b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _width = 576; 129b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _height = 448; 130b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 131b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case kVGA: 132b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _width = 640; 133b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _height = 480; 134b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 135b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case k432p: 136b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _width = 720; 137b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _height = 432; 138b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 139b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case kW432p: 140b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _width = 768; 141b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _height = 432; 142b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 143b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case k4SIF: 144b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _width = 704; 145b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _height = 480; 146b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 147b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case kW448p: 148b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _width = 768; 149b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _height = 448; 150b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 151b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case kNTSC: 152b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _width = 720; 153b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _height = 480; 154b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 155b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case kFW448p: 156b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _width = 800; 157b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _height = 448; 158b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 159b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case kWVGA: 160b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _width = 800; 161b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _height = 480; 162b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 163b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case k4CIF: 164b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _width = 704; 165b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _height = 576; 166b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 167b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case kSVGA: 168b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _width = 800; 169b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _height = 600; 170b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 171b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case kW544p: 172b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _width = 960; 173b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _height = 544; 174b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 175b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case kW576p: 176b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _width = 1024; 177b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _height = 576; 178b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 179b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case kHD: 180b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _width = 960; 181b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _height = 720; 182b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 183b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case kXGA: 184b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _width = 1024; 185b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _height = 768; 186b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 187b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case kFullHD: 188b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _width = 1440; 189b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _height = 1080; 190b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 191b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case kWHD: 192b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _width = 1280; 193b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _height = 720; 194b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 195b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case kWFullHD: 196b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _width = 1920; 197b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _height = 1080; 198b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 199b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org default: 200b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 201b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 202b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 203