| /* |
| * Copyright (c) 2011 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. |
| */ |
| |
| #ifndef WEBRTC_MODULES_VIDEO_CODING_CODECS_TEST_FRAMEWORK_VIDEO_SOURCE_H_ |
| #define WEBRTC_MODULES_VIDEO_CODING_CODECS_TEST_FRAMEWORK_VIDEO_SOURCE_H_ |
| |
| #include <string> |
| #include "common_video/libyuv/include/libyuv.h" |
| |
| enum VideoSize |
| { |
| kUndefined, |
| kSQCIF, // 128*96 = 12 288 |
| kQQVGA, // 160*120 = 19 200 |
| kQCIF, // 176*144 = 25 344 |
| kCGA, // 320*200 = 64 000 |
| kQVGA, // 320*240 = 76 800 |
| kSIF, // 352*240 = 84 480 |
| kWQVGA, // 400*240 = 96 000 |
| kCIF, // 352*288 = 101 376 |
| kW288p, // 512*288 = 147 456 (WCIF) |
| k448p, // 576*448 = 281 088 |
| kVGA, // 640*480 = 307 200 |
| k432p, // 720*432 = 311 040 |
| kW432p, // 768*432 = 331 776 |
| k4SIF, // 704*480 = 337 920 |
| kW448p, // 768*448 = 344 064 |
| kNTSC, // 720*480 = 345 600 |
| kFW448p, // 800*448 = 358 400 |
| kWVGA, // 800*480 = 384 000 |
| k4CIF, // 704�576 = 405 504 |
| kSVGA, // 800*600 = 480 000 |
| kW544p, // 960*544 = 522 240 |
| kW576p, // 1024*576 = 589 824 (W4CIF) |
| kHD, // 960*720 = 691 200 |
| kXGA, // 1024*768 = 786 432 |
| kWHD, // 1280*720 = 921 600 |
| kFullHD, // 1440*1080 = 1 555 200 |
| kWFullHD, // 1920*1080 = 2 073 600 |
| |
| kNumberOfVideoSizes |
| }; |
| |
| class VideoSource |
| { |
| public: |
| VideoSource(); |
| VideoSource(std::string fileName, VideoSize size, int frameRate = 30, |
| webrtc::VideoType type = webrtc::kI420); |
| VideoSource(std::string fileName, int width, int height, int frameRate = 30, |
| webrtc::VideoType type = webrtc::kI420); |
| |
| std::string GetFileName() const { return _fileName; } |
| int GetWidth() const { return _width; } |
| int GetHeight() const { return _height; } |
| webrtc::VideoType GetType() const { return _type; } |
| int GetFrameRate() const { return _frameRate; } |
| |
| // Returns the file path without a trailing slash. |
| std::string GetFilePath() const; |
| |
| // Returns the filename with the path (including the leading slash) removed. |
| std::string GetName() const; |
| |
| VideoSize GetSize() const; |
| static VideoSize GetSize(WebRtc_UWord16 width, WebRtc_UWord16 height); |
| unsigned int GetFrameLength() const; |
| |
| // Returns a human-readable size string. |
| static const char* GetSizeString(VideoSize size); |
| const char* GetMySizeString() const; |
| |
| // Opens the video source, converting and writing to the specified target. |
| // If force is true, the conversion will be done even if the target file |
| // already exists. |
| void Convert(const VideoSource& target, bool force = false) const; |
| static bool FileExists(const char* fileName); |
| private: |
| static int GetWidthHeight( VideoSize size, int& width, int& height); |
| std::string _fileName; |
| int _width; |
| int _height; |
| webrtc::VideoType _type; |
| int _frameRate; |
| }; |
| |
| class FrameDropper |
| { |
| public: |
| FrameDropper(); |
| bool DropFrame(); |
| unsigned int DropsBetweenRenders(); |
| void SetFrameRate(double frameRate, double maxFrameRate); |
| |
| private: |
| unsigned int _dropsBetweenRenders; |
| unsigned int _frameCounter; |
| }; |
| |
| |
| #endif // WEBRTC_MODULES_VIDEO_CODING_CODECS_TEST_FRAMEWORK_VIDEO_SOURCE_H_ |
| |