| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  *  Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. | 2  *  Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. | 
| 3  * | 3  * | 
| 4  *  Use of this source code is governed by a BSD-style license | 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 | 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 | 6  *  tree. An additional intellectual property rights grant can be found | 
| 7  *  in the file PATENTS.  All contributing project authors may | 7  *  in the file PATENTS.  All contributing project authors may | 
| 8  *  be found in the AUTHORS file in the root of the source tree. | 8  *  be found in the AUTHORS file in the root of the source tree. | 
| 9  */ | 9  */ | 
| 10 | 10 | 
| 11 #ifndef WEBRTC_VIDEO_FRAME_H_ | 11 #ifndef WEBRTC_VIDEO_FRAME_H_ | 
| 12 #define WEBRTC_VIDEO_FRAME_H_ | 12 #define WEBRTC_VIDEO_FRAME_H_ | 
| 13 | 13 | 
| 14 #include "webrtc/base/scoped_ref_ptr.h" | 14 // TODO(nisse): This header file should eventually be deleted. For | 
| 15 #include "webrtc/base/timeutils.h" | 15 // declarations of classes related to unencoded video frame, use the | 
|  | 16 // headers under api/video instead. The EncodedImage class stays in | 
|  | 17 // this file until we have figured out how to refactor and clean up | 
|  | 18 // related interfaces. | 
|  | 19 | 
|  | 20 #include "webrtc/api/video/video_frame.h" | 
|  | 21 #include "webrtc/api/video/i420_buffer.h" | 
| 16 #include "webrtc/common_types.h" | 22 #include "webrtc/common_types.h" | 
| 17 #include "webrtc/common_video/include/video_frame_buffer.h" |  | 
| 18 #include "webrtc/common_video/rotation.h" |  | 
| 19 #include "webrtc/typedefs.h" | 23 #include "webrtc/typedefs.h" | 
| 20 | 24 | 
| 21 namespace webrtc { | 25 namespace webrtc { | 
| 22 | 26 | 
| 23 class VideoFrame { |  | 
| 24  public: |  | 
| 25   // TODO(nisse): This constructor is consistent with |  | 
| 26   // cricket::WebRtcVideoFrame. After the class |  | 
| 27   // cricket::WebRtcVideoFrame and its baseclass cricket::VideoFrame |  | 
| 28   // are deleted, we should consider whether or not we want to stick |  | 
| 29   // to this style and deprecate the other constructors. |  | 
| 30   VideoFrame(const rtc::scoped_refptr<VideoFrameBuffer>& buffer, |  | 
| 31              webrtc::VideoRotation rotation, |  | 
| 32              int64_t timestamp_us); |  | 
| 33 |  | 
| 34   // Preferred constructor. |  | 
| 35   VideoFrame(const rtc::scoped_refptr<VideoFrameBuffer>& buffer, |  | 
| 36              uint32_t timestamp, |  | 
| 37              int64_t render_time_ms, |  | 
| 38              VideoRotation rotation); |  | 
| 39 |  | 
| 40   // Support move and copy. |  | 
| 41   VideoFrame(const VideoFrame&) = default; |  | 
| 42   VideoFrame(VideoFrame&&) = default; |  | 
| 43   VideoFrame& operator=(const VideoFrame&) = default; |  | 
| 44   VideoFrame& operator=(VideoFrame&&) = default; |  | 
| 45 |  | 
| 46   // Get frame width. |  | 
| 47   int width() const; |  | 
| 48 |  | 
| 49   // Get frame height. |  | 
| 50   int height() const; |  | 
| 51 |  | 
| 52   // System monotonic clock, same timebase as rtc::TimeMicros(). |  | 
| 53   int64_t timestamp_us() const { return timestamp_us_; } |  | 
| 54   void set_timestamp_us(int64_t timestamp_us) { |  | 
| 55     timestamp_us_ = timestamp_us; |  | 
| 56   } |  | 
| 57 |  | 
| 58   // TODO(nisse): After the cricket::VideoFrame and webrtc::VideoFrame |  | 
| 59   // merge, timestamps other than timestamp_us will likely be |  | 
| 60   // deprecated. |  | 
| 61 |  | 
| 62   // Set frame timestamp (90kHz). |  | 
| 63   void set_timestamp(uint32_t timestamp) { timestamp_rtp_ = timestamp; } |  | 
| 64 |  | 
| 65   // Get frame timestamp (90kHz). |  | 
| 66   uint32_t timestamp() const { return timestamp_rtp_; } |  | 
| 67 |  | 
| 68   // For now, transport_frame_id and rtp timestamp are the same. |  | 
| 69   // TODO(nisse): Must be handled differently for QUIC. |  | 
| 70   uint32_t transport_frame_id() const { return timestamp(); } |  | 
| 71 |  | 
| 72   // Set capture ntp time in milliseconds. |  | 
| 73   void set_ntp_time_ms(int64_t ntp_time_ms) { |  | 
| 74     ntp_time_ms_ = ntp_time_ms; |  | 
| 75   } |  | 
| 76 |  | 
| 77   // Get capture ntp time in milliseconds. |  | 
| 78   int64_t ntp_time_ms() const { return ntp_time_ms_; } |  | 
| 79 |  | 
| 80   // Naming convention for Coordination of Video Orientation. Please see |  | 
| 81   // http://www.etsi.org/deliver/etsi_ts/126100_126199/126114/12.07.00_60/ts_126
     114v120700p.pdf |  | 
| 82   // |  | 
| 83   // "pending rotation" or "pending" = a frame that has a VideoRotation > 0. |  | 
| 84   // |  | 
| 85   // "not pending" = a frame that has a VideoRotation == 0. |  | 
| 86   // |  | 
| 87   // "apply rotation" = modify a frame from being "pending" to being "not |  | 
| 88   //                    pending" rotation (a no-op for "unrotated"). |  | 
| 89   // |  | 
| 90   VideoRotation rotation() const { return rotation_; } |  | 
| 91   void set_rotation(VideoRotation rotation) { |  | 
| 92     rotation_ = rotation; |  | 
| 93   } |  | 
| 94 |  | 
| 95   // Set render time in milliseconds. |  | 
| 96   void set_render_time_ms(int64_t render_time_ms) { |  | 
| 97     set_timestamp_us(render_time_ms * rtc::kNumMicrosecsPerMillisec);; |  | 
| 98   } |  | 
| 99 |  | 
| 100   // Get render time in milliseconds. |  | 
| 101   int64_t render_time_ms() const { |  | 
| 102     return timestamp_us() / rtc::kNumMicrosecsPerMillisec; |  | 
| 103   } |  | 
| 104 |  | 
| 105   // Return the underlying buffer. Never nullptr for a properly |  | 
| 106   // initialized VideoFrame. |  | 
| 107   rtc::scoped_refptr<webrtc::VideoFrameBuffer> video_frame_buffer() const; |  | 
| 108 |  | 
| 109   // Return true if the frame is stored in a texture. |  | 
| 110   bool is_texture() const { |  | 
| 111     return video_frame_buffer() && |  | 
| 112            video_frame_buffer()->native_handle() != nullptr; |  | 
| 113   } |  | 
| 114 |  | 
| 115  private: |  | 
| 116   // An opaque reference counted handle that stores the pixel data. |  | 
| 117   rtc::scoped_refptr<webrtc::VideoFrameBuffer> video_frame_buffer_; |  | 
| 118   uint32_t timestamp_rtp_; |  | 
| 119   int64_t ntp_time_ms_; |  | 
| 120   int64_t timestamp_us_; |  | 
| 121   VideoRotation rotation_; |  | 
| 122 }; |  | 
| 123 |  | 
| 124 |  | 
| 125 // TODO(pbos): Rename EncodedFrame and reformat this class' members. | 27 // TODO(pbos): Rename EncodedFrame and reformat this class' members. | 
| 126 class EncodedImage { | 28 class EncodedImage { | 
| 127  public: | 29  public: | 
| 128   static const size_t kBufferPaddingBytesH264; | 30   static const size_t kBufferPaddingBytesH264; | 
| 129 | 31 | 
| 130   // Some decoders require encoded image buffers to be padded with a small | 32   // Some decoders require encoded image buffers to be padded with a small | 
| 131   // number of additional bytes (due to over-reading byte readers). | 33   // number of additional bytes (due to over-reading byte readers). | 
| 132   static size_t GetBufferPaddingBytes(VideoCodecType codec_type); | 34   static size_t GetBufferPaddingBytes(VideoCodecType codec_type); | 
| 133 | 35 | 
| 134   EncodedImage() : EncodedImage(nullptr, 0, 0) {} | 36   EncodedImage() : EncodedImage(nullptr, 0, 0) {} | 
| (...skipping 25 matching lines...) Expand all  Loading... | 
| 160   int qp_ = -1;  // Quantizer value. | 62   int qp_ = -1;  // Quantizer value. | 
| 161 | 63 | 
| 162   // When an application indicates non-zero values here, it is taken as an | 64   // When an application indicates non-zero values here, it is taken as an | 
| 163   // indication that all future frames will be constrained with those limits | 65   // indication that all future frames will be constrained with those limits | 
| 164   // until the application indicates a change again. | 66   // until the application indicates a change again. | 
| 165   PlayoutDelay playout_delay_ = {-1, -1}; | 67   PlayoutDelay playout_delay_ = {-1, -1}; | 
| 166 }; | 68 }; | 
| 167 | 69 | 
| 168 }  // namespace webrtc | 70 }  // namespace webrtc | 
| 169 #endif  // WEBRTC_VIDEO_FRAME_H_ | 71 #endif  // WEBRTC_VIDEO_FRAME_H_ | 
| OLD | NEW | 
|---|