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