Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1473)

Side by Side Diff: webrtc/video_frame.h

Issue 2517173004: Move VideoFrame and related declarations to webrtc/api/video. (Closed)
Patch Set: Make rotation check clearer. Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « webrtc/video/vie_encoder_unittest.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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_
OLDNEW
« no previous file with comments | « webrtc/video/vie_encoder_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698