111 lines
3.7 KiB
C
111 lines
3.7 KiB
C
|
/*
|
|||
|
* 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 "vplib.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<30>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_
|
|||
|
|