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 11b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifndef WEBRTC_MODULES_VIDEO_CODING_CODECS_TEST_FRAMEWORK_VIDEO_SOURCE_H_ 12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define WEBRTC_MODULES_VIDEO_CODING_CODECS_TEST_FRAMEWORK_VIDEO_SOURCE_H_ 13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 14b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <string> 15a557f436b9d694d5a0a045e0295e1794f2df48eapbos@webrtc.org#include "webrtc/common_video/libyuv/include/webrtc_libyuv.h" 16b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 17b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum VideoSize 18b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 19b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kUndefined, 20b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kSQCIF, // 128*96 = 12 288 21b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kQQVGA, // 160*120 = 19 200 22b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kQCIF, // 176*144 = 25 344 23b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kCGA, // 320*200 = 64 000 24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kQVGA, // 320*240 = 76 800 25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kSIF, // 352*240 = 84 480 26b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kWQVGA, // 400*240 = 96 000 27b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kCIF, // 352*288 = 101 376 28b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kW288p, // 512*288 = 147 456 (WCIF) 29b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org k448p, // 576*448 = 281 088 30b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kVGA, // 640*480 = 307 200 31b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org k432p, // 720*432 = 311 040 32b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kW432p, // 768*432 = 331 776 33b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org k4SIF, // 704*480 = 337 920 34b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kW448p, // 768*448 = 344 064 35b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kNTSC, // 720*480 = 345 600 36b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kFW448p, // 800*448 = 358 400 37b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kWVGA, // 800*480 = 384 000 38b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org k4CIF, // 704�576 = 405 504 39b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kSVGA, // 800*600 = 480 000 40b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kW544p, // 960*544 = 522 240 41b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kW576p, // 1024*576 = 589 824 (W4CIF) 42b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kHD, // 960*720 = 691 200 43b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kXGA, // 1024*768 = 786 432 44b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kWHD, // 1280*720 = 921 600 45b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kFullHD, // 1440*1080 = 1 555 200 46b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kWFullHD, // 1920*1080 = 2 073 600 47b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 48b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kNumberOfVideoSizes 49b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org }; 50b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 51b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass VideoSource 52b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 53b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgpublic: 54b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VideoSource(); 55b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VideoSource(std::string fileName, VideoSize size, int frameRate = 30, 56b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org webrtc::VideoType type = webrtc::kI420); 57b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VideoSource(std::string fileName, int width, int height, int frameRate = 30, 58b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org webrtc::VideoType type = webrtc::kI420); 59b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 60b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org std::string GetFileName() const { return _fileName; } 61b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int GetWidth() const { return _width; } 62b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int GetHeight() const { return _height; } 63b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org webrtc::VideoType GetType() const { return _type; } 64b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int GetFrameRate() const { return _frameRate; } 65b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 66b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Returns the file path without a trailing slash. 67b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org std::string GetFilePath() const; 68b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 69b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Returns the filename with the path (including the leading slash) removed. 70b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org std::string GetName() const; 71b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 72b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VideoSize GetSize() const; 7348c4b75e8d0d02294460e357ddb3a07ce295b964pbos@webrtc.org static VideoSize GetSize(uint16_t width, uint16_t height); 74b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org unsigned int GetFrameLength() const; 75b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 76b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Returns a human-readable size string. 77b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org static const char* GetSizeString(VideoSize size); 78b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const char* GetMySizeString() const; 79b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 80b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Opens the video source, converting and writing to the specified target. 81b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // If force is true, the conversion will be done even if the target file 82b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // already exists. 83b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org void Convert(const VideoSource& target, bool force = false) const; 84b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org static bool FileExists(const char* fileName); 85b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgprivate: 86b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org static int GetWidthHeight( VideoSize size, int& width, int& height); 87b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org std::string _fileName; 88b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int _width; 89b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int _height; 90b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org webrtc::VideoType _type; 91b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int _frameRate; 92b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}; 93b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 94b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass FrameDropper 95b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 96b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgpublic: 97b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org FrameDropper(); 98b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool DropFrame(); 99b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org unsigned int DropsBetweenRenders(); 100b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org void SetFrameRate(double frameRate, double maxFrameRate); 101b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 102b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgprivate: 103b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org unsigned int _dropsBetweenRenders; 104b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org unsigned int _frameCounter; 105b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}; 106b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 107b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 108b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif // WEBRTC_MODULES_VIDEO_CODING_CODECS_TEST_FRAMEWORK_VIDEO_SOURCE_H_ 109