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

Side by Side Diff: webrtc/modules/video_coding/video_coding_impl.h

Issue 1853813002: Add support for writing raw encoder output to .ivf files. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Set pre-decode image callback on construction Created 4 years, 8 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
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2012 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_MODULES_VIDEO_CODING_VIDEO_CODING_IMPL_H_ 11 #ifndef WEBRTC_MODULES_VIDEO_CODING_VIDEO_CODING_IMPL_H_
12 #define WEBRTC_MODULES_VIDEO_CODING_VIDEO_CODING_IMPL_H_ 12 #define WEBRTC_MODULES_VIDEO_CODING_VIDEO_CODING_IMPL_H_
13 13
14 #include "webrtc/modules/video_coding/include/video_coding.h" 14 #include "webrtc/modules/video_coding/include/video_coding.h"
15 15
16 #include <memory> 16 #include <memory>
17 #include <vector> 17 #include <vector>
18 18
19 #include "webrtc/frame_callback.h"
19 #include "webrtc/base/onetimeevent.h" 20 #include "webrtc/base/onetimeevent.h"
20 #include "webrtc/base/thread_annotations.h" 21 #include "webrtc/base/thread_annotations.h"
21 #include "webrtc/base/thread_checker.h" 22 #include "webrtc/base/thread_checker.h"
22 #include "webrtc/modules/video_coding/codec_database.h" 23 #include "webrtc/modules/video_coding/codec_database.h"
23 #include "webrtc/modules/video_coding/frame_buffer.h" 24 #include "webrtc/modules/video_coding/frame_buffer.h"
24 #include "webrtc/modules/video_coding/generic_decoder.h" 25 #include "webrtc/modules/video_coding/generic_decoder.h"
25 #include "webrtc/modules/video_coding/generic_encoder.h" 26 #include "webrtc/modules/video_coding/generic_encoder.h"
26 #include "webrtc/modules/video_coding/jitter_buffer.h" 27 #include "webrtc/modules/video_coding/jitter_buffer.h"
27 #include "webrtc/modules/video_coding/media_optimization.h" 28 #include "webrtc/modules/video_coding/media_optimization.h"
28 #include "webrtc/modules/video_coding/receiver.h" 29 #include "webrtc/modules/video_coding/receiver.h"
29 #include "webrtc/modules/video_coding/timing.h" 30 #include "webrtc/modules/video_coding/timing.h"
30 #include "webrtc/modules/video_coding/utility/qp_parser.h" 31 #include "webrtc/modules/video_coding/utility/qp_parser.h"
31 #include "webrtc/system_wrappers/include/clock.h" 32 #include "webrtc/system_wrappers/include/clock.h"
32 #include "webrtc/system_wrappers/include/critical_section_wrapper.h"
33 33
34 namespace webrtc { 34 namespace webrtc {
35 35
36 namespace vcm { 36 namespace vcm {
37 37
38 class VCMProcessTimer { 38 class VCMProcessTimer {
39 public: 39 public:
40 VCMProcessTimer(int64_t periodMs, Clock* clock) 40 VCMProcessTimer(int64_t periodMs, Clock* clock)
41 : _clock(clock), 41 : _clock(clock),
42 _periodMs(periodMs), 42 _periodMs(periodMs),
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 96
97 int64_t TimeUntilNextProcess(); 97 int64_t TimeUntilNextProcess();
98 void Process(); 98 void Process();
99 99
100 private: 100 private:
101 void SetEncoderParameters(EncoderParameters params) 101 void SetEncoderParameters(EncoderParameters params)
102 EXCLUSIVE_LOCKS_REQUIRED(encoder_crit_); 102 EXCLUSIVE_LOCKS_REQUIRED(encoder_crit_);
103 103
104 Clock* const clock_; 104 Clock* const clock_;
105 105
106 std::unique_ptr<CriticalSectionWrapper> process_crit_sect_; 106 rtc::CriticalSection process_crit_;
107 rtc::CriticalSection encoder_crit_; 107 rtc::CriticalSection encoder_crit_;
108 VCMGenericEncoder* _encoder; 108 VCMGenericEncoder* _encoder;
109 VCMEncodedFrameCallback _encodedFrameCallback GUARDED_BY(encoder_crit_); 109 VCMEncodedFrameCallback _encodedFrameCallback GUARDED_BY(encoder_crit_);
110 media_optimization::MediaOptimization _mediaOpt; 110 media_optimization::MediaOptimization _mediaOpt;
111 VCMSendStatisticsCallback* _sendStatsCallback GUARDED_BY(process_crit_sect_); 111 VCMSendStatisticsCallback* _sendStatsCallback GUARDED_BY(process_crit_);
112 VCMCodecDataBase _codecDataBase GUARDED_BY(encoder_crit_); 112 VCMCodecDataBase _codecDataBase GUARDED_BY(encoder_crit_);
113 bool frame_dropper_enabled_ GUARDED_BY(encoder_crit_); 113 bool frame_dropper_enabled_ GUARDED_BY(encoder_crit_);
114 VCMProcessTimer _sendStatsTimer; 114 VCMProcessTimer _sendStatsTimer;
115 115
116 // Must be accessed on the construction thread of VideoSender. 116 // Must be accessed on the construction thread of VideoSender.
117 VideoCodec current_codec_; 117 VideoCodec current_codec_;
118 rtc::ThreadChecker main_thread_; 118 rtc::ThreadChecker main_thread_;
119 119
120 VCMQMSettingsCallback* const qm_settings_callback_; 120 VCMQMSettingsCallback* const qm_settings_callback_;
121 VCMProtectionCallback* protection_callback_; 121 VCMProtectionCallback* protection_callback_;
122 122
123 rtc::CriticalSection params_crit_; 123 rtc::CriticalSection params_crit_;
124 EncoderParameters encoder_params_ GUARDED_BY(params_crit_); 124 EncoderParameters encoder_params_ GUARDED_BY(params_crit_);
125 bool encoder_has_internal_source_ GUARDED_BY(params_crit_); 125 bool encoder_has_internal_source_ GUARDED_BY(params_crit_);
126 std::vector<FrameType> next_frame_types_ GUARDED_BY(params_crit_); 126 std::vector<FrameType> next_frame_types_ GUARDED_BY(params_crit_);
127 }; 127 };
128 128
129 class VideoReceiver { 129 class VideoReceiver {
130 public: 130 public:
131 typedef VideoCodingModule::ReceiverRobustness ReceiverRobustness; 131 typedef VideoCodingModule::ReceiverRobustness ReceiverRobustness;
132 132
133 VideoReceiver(Clock* clock, 133 VideoReceiver(Clock* clock,
134 EventFactory* event_factory, 134 EventFactory* event_factory,
135 NackSender* nack_sender = nullptr, 135 NackSender* nack_sender = nullptr,
136 KeyFrameRequestSender* keyframe_request_sender = nullptr); 136 KeyFrameRequestSender* keyframe_request_sender = nullptr,
pbos-webrtc 2016/04/13 22:01:14 no default arguments
sprang_webrtc 2016/04/14 07:36:23 Done.
137 EncodedImageCallback* pre_decode_image_callback = nullptr);
137 ~VideoReceiver(); 138 ~VideoReceiver();
138 139
139 int32_t RegisterReceiveCodec(const VideoCodec* receiveCodec, 140 int32_t RegisterReceiveCodec(const VideoCodec* receiveCodec,
140 int32_t numberOfCores, 141 int32_t numberOfCores,
141 bool requireKeyFrame); 142 bool requireKeyFrame);
142 143
143 void RegisterExternalDecoder(VideoDecoder* externalDecoder, 144 void RegisterExternalDecoder(VideoDecoder* externalDecoder,
144 uint8_t payloadType); 145 uint8_t payloadType);
145 int32_t RegisterReceiveCallback(VCMReceiveCallback* receiveCallback); 146 int32_t RegisterReceiveCallback(VCMReceiveCallback* receiveCallback);
146 int32_t RegisterReceiveStatisticsCallback( 147 int32_t RegisterReceiveStatisticsCallback(
(...skipping 25 matching lines...) Expand all
172 173
173 void SetDecodeErrorMode(VCMDecodeErrorMode decode_error_mode); 174 void SetDecodeErrorMode(VCMDecodeErrorMode decode_error_mode);
174 int SetMinReceiverDelay(int desired_delay_ms); 175 int SetMinReceiverDelay(int desired_delay_ms);
175 176
176 int32_t SetReceiveChannelParameters(int64_t rtt); 177 int32_t SetReceiveChannelParameters(int64_t rtt);
177 int32_t SetVideoProtection(VCMVideoProtection videoProtection, bool enable); 178 int32_t SetVideoProtection(VCMVideoProtection videoProtection, bool enable);
178 179
179 int64_t TimeUntilNextProcess(); 180 int64_t TimeUntilNextProcess();
180 void Process(); 181 void Process();
181 182
182 void RegisterPreDecodeImageCallback(EncodedImageCallback* observer);
183 void TriggerDecoderShutdown(); 183 void TriggerDecoderShutdown();
184 184
185 protected: 185 protected:
186 int32_t Decode(const webrtc::VCMEncodedFrame& frame) 186 int32_t Decode(const webrtc::VCMEncodedFrame& frame)
187 EXCLUSIVE_LOCKS_REQUIRED(_receiveCritSect); 187 EXCLUSIVE_LOCKS_REQUIRED(receive_crit_);
188 int32_t RequestKeyFrame(); 188 int32_t RequestKeyFrame();
189 int32_t RequestSliceLossIndication(const uint64_t pictureID) const; 189 int32_t RequestSliceLossIndication(const uint64_t pictureID) const;
190 190
191 private: 191 private:
192 Clock* const clock_; 192 Clock* const clock_;
193 std::unique_ptr<CriticalSectionWrapper> process_crit_sect_; 193 rtc::CriticalSection process_crit_;
194 CriticalSectionWrapper* _receiveCritSect; 194 rtc::CriticalSection receive_crit_;
195 VCMTiming _timing; 195 VCMTiming _timing;
196 VCMReceiver _receiver; 196 VCMReceiver _receiver;
197 VCMDecodedFrameCallback _decodedFrameCallback; 197 VCMDecodedFrameCallback _decodedFrameCallback;
198 VCMFrameTypeCallback* _frameTypeCallback GUARDED_BY(process_crit_sect_); 198 VCMFrameTypeCallback* _frameTypeCallback GUARDED_BY(process_crit_);
199 VCMReceiveStatisticsCallback* _receiveStatsCallback 199 VCMReceiveStatisticsCallback* _receiveStatsCallback GUARDED_BY(process_crit_);
200 GUARDED_BY(process_crit_sect_); 200 VCMDecoderTimingCallback* _decoderTimingCallback GUARDED_BY(process_crit_);
201 VCMDecoderTimingCallback* _decoderTimingCallback 201 VCMPacketRequestCallback* _packetRequestCallback GUARDED_BY(process_crit_);
202 GUARDED_BY(process_crit_sect_);
203 VCMPacketRequestCallback* _packetRequestCallback
204 GUARDED_BY(process_crit_sect_);
205 VCMRenderBufferSizeCallback* render_buffer_callback_ 202 VCMRenderBufferSizeCallback* render_buffer_callback_
206 GUARDED_BY(process_crit_sect_); 203 GUARDED_BY(process_crit_);
pbos-webrtc 2016/04/13 22:01:14 git cl format
sprang_webrtc 2016/04/14 07:36:23 That's already the output from git cl format.
207 VCMGenericDecoder* _decoder; 204 VCMGenericDecoder* _decoder;
208 #ifdef DEBUG_DECODER_BIT_STREAM 205
209 FILE* _bitStreamBeforeDecoder;
210 #endif
211 VCMFrameBuffer _frameFromFile; 206 VCMFrameBuffer _frameFromFile;
212 bool _scheduleKeyRequest GUARDED_BY(process_crit_sect_); 207 bool _scheduleKeyRequest GUARDED_BY(process_crit_);
213 bool drop_frames_until_keyframe_ GUARDED_BY(process_crit_sect_); 208 bool drop_frames_until_keyframe_ GUARDED_BY(process_crit_);
214 size_t max_nack_list_size_ GUARDED_BY(process_crit_sect_); 209 size_t max_nack_list_size_ GUARDED_BY(process_crit_);
215 210
216 VCMCodecDataBase _codecDataBase GUARDED_BY(_receiveCritSect); 211 VCMCodecDataBase _codecDataBase GUARDED_BY(receive_crit_);
217 EncodedImageCallback* pre_decode_image_callback_ GUARDED_BY(_receiveCritSect); 212 EncodedImageCallback* pre_decode_image_callback_;
218 213
219 VCMProcessTimer _receiveStatsTimer; 214 VCMProcessTimer _receiveStatsTimer;
220 VCMProcessTimer _retransmissionTimer; 215 VCMProcessTimer _retransmissionTimer;
221 VCMProcessTimer _keyRequestTimer; 216 VCMProcessTimer _keyRequestTimer;
222 QpParser qp_parser_; 217 QpParser qp_parser_;
223 ThreadUnsafeOneTimeEvent first_frame_received_; 218 ThreadUnsafeOneTimeEvent first_frame_received_;
224 }; 219 };
225 220
226 } // namespace vcm 221 } // namespace vcm
227 } // namespace webrtc 222 } // namespace webrtc
228 #endif // WEBRTC_MODULES_VIDEO_CODING_VIDEO_CODING_IMPL_H_ 223 #endif // WEBRTC_MODULES_VIDEO_CODING_VIDEO_CODING_IMPL_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698