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

Side by Side Diff: webrtc/modules/video_coding/codecs/test/videoprocessor.cc

Issue 2994613002: Remove VideoProcessor interface. (Closed)
Patch Set: asapersson comments 1. Created 3 years, 4 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
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
98 case kExcludeOnlyFirstKeyFrame: 98 case kExcludeOnlyFirstKeyFrame:
99 return "ExcludeOnlyFirstKeyFrame"; 99 return "ExcludeOnlyFirstKeyFrame";
100 case kExcludeAllKeyFrames: 100 case kExcludeAllKeyFrames:
101 return "ExcludeAllKeyFrames"; 101 return "ExcludeAllKeyFrames";
102 default: 102 default:
103 RTC_NOTREACHED(); 103 RTC_NOTREACHED();
104 return "Unknown"; 104 return "Unknown";
105 } 105 }
106 } 106 }
107 107
108 VideoProcessorImpl::VideoProcessorImpl(webrtc::VideoEncoder* encoder, 108 VideoProcessor::VideoProcessor(webrtc::VideoEncoder* encoder,
109 webrtc::VideoDecoder* decoder, 109 webrtc::VideoDecoder* decoder,
110 FrameReader* analysis_frame_reader, 110 FrameReader* analysis_frame_reader,
111 FrameWriter* analysis_frame_writer, 111 FrameWriter* analysis_frame_writer,
112 PacketManipulator* packet_manipulator, 112 PacketManipulator* packet_manipulator,
113 const TestConfig& config, 113 const TestConfig& config,
114 Stats* stats, 114 Stats* stats,
115 FrameWriter* source_frame_writer, 115 FrameWriter* source_frame_writer,
116 IvfFileWriter* encoded_frame_writer, 116 IvfFileWriter* encoded_frame_writer,
117 FrameWriter* decoded_frame_writer) 117 FrameWriter* decoded_frame_writer)
118 : encoder_(encoder), 118 : encoder_(encoder),
119 decoder_(decoder), 119 decoder_(decoder),
120 bitrate_allocator_(CreateBitrateAllocator(config)), 120 bitrate_allocator_(CreateBitrateAllocator(config)),
121 encode_callback_(new VideoProcessorEncodeCompleteCallback(this)), 121 encode_callback_(new VideoProcessorEncodeCompleteCallback(this)),
122 decode_callback_(new VideoProcessorDecodeCompleteCallback(this)), 122 decode_callback_(new VideoProcessorDecodeCompleteCallback(this)),
123 packet_manipulator_(packet_manipulator), 123 packet_manipulator_(packet_manipulator),
124 config_(config), 124 config_(config),
125 analysis_frame_reader_(analysis_frame_reader), 125 analysis_frame_reader_(analysis_frame_reader),
126 analysis_frame_writer_(analysis_frame_writer), 126 analysis_frame_writer_(analysis_frame_writer),
127 source_frame_writer_(source_frame_writer), 127 source_frame_writer_(source_frame_writer),
128 encoded_frame_writer_(encoded_frame_writer), 128 encoded_frame_writer_(encoded_frame_writer),
129 decoded_frame_writer_(decoded_frame_writer), 129 decoded_frame_writer_(decoded_frame_writer),
130 initialized_(false), 130 initialized_(false),
131 last_encoded_frame_num_(-1), 131 last_encoded_frame_num_(-1),
132 last_decoded_frame_num_(-1), 132 last_decoded_frame_num_(-1),
133 first_key_frame_has_been_excluded_(false), 133 first_key_frame_has_been_excluded_(false),
134 last_decoded_frame_buffer_(0, analysis_frame_reader->FrameLength()), 134 last_decoded_frame_buffer_(0, analysis_frame_reader->FrameLength()),
135 stats_(stats), 135 stats_(stats),
136 num_dropped_frames_(0), 136 num_dropped_frames_(0),
137 num_spatial_resizes_(0) { 137 num_spatial_resizes_(0) {
138 RTC_DCHECK(encoder); 138 RTC_DCHECK(encoder);
139 RTC_DCHECK(decoder); 139 RTC_DCHECK(decoder);
140 RTC_DCHECK(packet_manipulator); 140 RTC_DCHECK(packet_manipulator);
141 RTC_DCHECK(analysis_frame_reader); 141 RTC_DCHECK(analysis_frame_reader);
142 RTC_DCHECK(analysis_frame_writer); 142 RTC_DCHECK(analysis_frame_writer);
143 RTC_DCHECK(stats); 143 RTC_DCHECK(stats);
144 frame_infos_.reserve(analysis_frame_reader->NumberOfFrames()); 144 frame_infos_.reserve(analysis_frame_reader->NumberOfFrames());
145 } 145 }
146 146
147 VideoProcessorImpl::~VideoProcessorImpl() { 147 VideoProcessor::~VideoProcessor() {
148 encoder_->RegisterEncodeCompleteCallback(nullptr); 148 encoder_->RegisterEncodeCompleteCallback(nullptr);
149 decoder_->RegisterDecodeCompleteCallback(nullptr); 149 decoder_->RegisterDecodeCompleteCallback(nullptr);
150 } 150 }
151 151
152 void VideoProcessorImpl::Init() { 152 void VideoProcessor::Init() {
153 RTC_DCHECK(!initialized_) << "VideoProcessor already initialized."; 153 RTC_DCHECK(!initialized_) << "VideoProcessor already initialized.";
154 RTC_DCHECK(config_.codec_settings) << "No codec settings supplied."; 154 RTC_DCHECK(config_.codec_settings) << "No codec settings supplied.";
155 initialized_ = true; 155 initialized_ = true;
156 156
157 // Setup required callbacks for the encoder and decoder. 157 // Setup required callbacks for the encoder and decoder.
158 RTC_CHECK_EQ(encoder_->RegisterEncodeCompleteCallback(encode_callback_.get()), 158 RTC_CHECK_EQ(encoder_->RegisterEncodeCompleteCallback(encode_callback_.get()),
159 WEBRTC_VIDEO_CODEC_OK) 159 WEBRTC_VIDEO_CODEC_OK)
160 << "Failed to register encode complete callback"; 160 << "Failed to register encode complete callback";
161 RTC_CHECK_EQ(decoder_->RegisterDecodeCompleteCallback(decode_callback_.get()), 161 RTC_CHECK_EQ(decoder_->RegisterDecodeCompleteCallback(decode_callback_.get()),
162 WEBRTC_VIDEO_CODEC_OK) 162 WEBRTC_VIDEO_CODEC_OK)
(...skipping 26 matching lines...) Expand all
189 printf(" Codec implementation name : %s_%s\n", 189 printf(" Codec implementation name : %s_%s\n",
190 CodecTypeToPayloadName(config_.codec_settings->codecType) 190 CodecTypeToPayloadName(config_.codec_settings->codecType)
191 .value_or("Unknown"), 191 .value_or("Unknown"),
192 encoder_->ImplementationName()); 192 encoder_->ImplementationName());
193 } 193 }
194 PrintCodecSettings(config_.codec_settings); 194 PrintCodecSettings(config_.codec_settings);
195 printf("\n"); 195 printf("\n");
196 } 196 }
197 } 197 }
198 198
199 bool VideoProcessorImpl::ProcessFrame(int frame_number) { 199 bool VideoProcessor::ProcessFrame(int frame_number) {
200 RTC_DCHECK_GE(frame_number, 0); 200 RTC_DCHECK_GE(frame_number, 0);
201 RTC_DCHECK_LE(frame_number, frame_infos_.size()) 201 RTC_DCHECK_LE(frame_number, frame_infos_.size())
202 << "Must process frames without gaps."; 202 << "Must process frames without gaps.";
203 RTC_DCHECK(initialized_) << "VideoProcessor not initialized."; 203 RTC_DCHECK(initialized_) << "VideoProcessor not initialized.";
204 204
205 rtc::scoped_refptr<I420BufferInterface> buffer( 205 rtc::scoped_refptr<I420BufferInterface> buffer(
206 analysis_frame_reader_->ReadFrame()); 206 analysis_frame_reader_->ReadFrame());
207 207
208 if (!buffer) { 208 if (!buffer) {
209 // Last frame has been reached. 209 // Last frame has been reached.
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
246 246
247 if (frame_stat->encode_return_code != WEBRTC_VIDEO_CODEC_OK) { 247 if (frame_stat->encode_return_code != WEBRTC_VIDEO_CODEC_OK) {
248 LOG(LS_WARNING) << "Failed to encode frame " << frame_number 248 LOG(LS_WARNING) << "Failed to encode frame " << frame_number
249 << ", return code: " << frame_stat->encode_return_code 249 << ", return code: " << frame_stat->encode_return_code
250 << "."; 250 << ".";
251 } 251 }
252 252
253 return true; 253 return true;
254 } 254 }
255 255
256 void VideoProcessorImpl::SetRates(int bit_rate, int frame_rate) { 256 void VideoProcessor::SetRates(int bit_rate, int frame_rate) {
257 config_.codec_settings->maxFramerate = frame_rate; 257 config_.codec_settings->maxFramerate = frame_rate;
258 int set_rates_result = encoder_->SetRateAllocation( 258 int set_rates_result = encoder_->SetRateAllocation(
259 bitrate_allocator_->GetAllocation(bit_rate * 1000, frame_rate), 259 bitrate_allocator_->GetAllocation(bit_rate * 1000, frame_rate),
260 frame_rate); 260 frame_rate);
261 RTC_DCHECK_GE(set_rates_result, 0) 261 RTC_DCHECK_GE(set_rates_result, 0)
262 << "Failed to update encoder with new rate " << bit_rate; 262 << "Failed to update encoder with new rate " << bit_rate;
263 num_dropped_frames_ = 0; 263 num_dropped_frames_ = 0;
264 num_spatial_resizes_ = 0; 264 num_spatial_resizes_ = 0;
265 } 265 }
266 266
267 size_t VideoProcessorImpl::EncodedFrameSize(int frame_number) { 267 size_t VideoProcessor::EncodedFrameSize(int frame_number) {
268 RTC_DCHECK_LT(frame_number, frame_infos_.size()); 268 RTC_DCHECK_LT(frame_number, frame_infos_.size());
269 return frame_infos_[frame_number].encoded_frame_size; 269 return frame_infos_[frame_number].encoded_frame_size;
270 } 270 }
271 271
272 FrameType VideoProcessorImpl::EncodedFrameType(int frame_number) { 272 FrameType VideoProcessor::EncodedFrameType(int frame_number) {
273 RTC_DCHECK_LT(frame_number, frame_infos_.size()); 273 RTC_DCHECK_LT(frame_number, frame_infos_.size());
274 return frame_infos_[frame_number].encoded_frame_type; 274 return frame_infos_[frame_number].encoded_frame_type;
275 } 275 }
276 276
277 int VideoProcessorImpl::GetQpFromEncoder(int frame_number) { 277 int VideoProcessor::GetQpFromEncoder(int frame_number) {
278 RTC_DCHECK_LT(frame_number, frame_infos_.size()); 278 RTC_DCHECK_LT(frame_number, frame_infos_.size());
279 return frame_infos_[frame_number].qp_encoder; 279 return frame_infos_[frame_number].qp_encoder;
280 } 280 }
281 281
282 int VideoProcessorImpl::GetQpFromBitstream(int frame_number) { 282 int VideoProcessor::GetQpFromBitstream(int frame_number) {
283 RTC_DCHECK_LT(frame_number, frame_infos_.size()); 283 RTC_DCHECK_LT(frame_number, frame_infos_.size());
284 return frame_infos_[frame_number].qp_bitstream; 284 return frame_infos_[frame_number].qp_bitstream;
285 } 285 }
286 286
287 int VideoProcessorImpl::NumberDroppedFrames() { 287 int VideoProcessor::NumberDroppedFrames() {
288 return num_dropped_frames_; 288 return num_dropped_frames_;
289 } 289 }
290 290
291 int VideoProcessorImpl::NumberSpatialResizes() { 291 int VideoProcessor::NumberSpatialResizes() {
292 return num_spatial_resizes_; 292 return num_spatial_resizes_;
293 } 293 }
294 294
295 void VideoProcessorImpl::FrameEncoded( 295 void VideoProcessor::FrameEncoded(
296 webrtc::VideoCodecType codec, 296 webrtc::VideoCodecType codec,
297 const EncodedImage& encoded_image, 297 const EncodedImage& encoded_image,
298 const webrtc::RTPFragmentationHeader* fragmentation) { 298 const webrtc::RTPFragmentationHeader* fragmentation) {
299 // For the highest measurement accuracy of the encode time, the start/stop 299 // For the highest measurement accuracy of the encode time, the start/stop
300 // time recordings should wrap the Encode call as tightly as possible. 300 // time recordings should wrap the Encode call as tightly as possible.
301 int64_t encode_stop_ns = rtc::TimeNanos(); 301 int64_t encode_stop_ns = rtc::TimeNanos();
302 302
303 if (encoded_frame_writer_) { 303 if (encoded_frame_writer_) {
304 RTC_CHECK(encoded_frame_writer_->WriteFrame(encoded_image, codec)); 304 RTC_CHECK(encoded_frame_writer_->WriteFrame(encoded_image, codec));
305 } 305 }
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
421 analysis_frame_writer_->WriteFrame(last_decoded_frame_buffer_.data())); 421 analysis_frame_writer_->WriteFrame(last_decoded_frame_buffer_.data()));
422 if (decoded_frame_writer_) { 422 if (decoded_frame_writer_) {
423 RTC_DCHECK_EQ(last_decoded_frame_buffer_.size(), 423 RTC_DCHECK_EQ(last_decoded_frame_buffer_.size(),
424 decoded_frame_writer_->FrameLength()); 424 decoded_frame_writer_->FrameLength());
425 RTC_CHECK( 425 RTC_CHECK(
426 decoded_frame_writer_->WriteFrame(last_decoded_frame_buffer_.data())); 426 decoded_frame_writer_->WriteFrame(last_decoded_frame_buffer_.data()));
427 } 427 }
428 } 428 }
429 } 429 }
430 430
431 void VideoProcessorImpl::FrameDecoded(const VideoFrame& image) { 431 void VideoProcessor::FrameDecoded(const VideoFrame& image) {
432 // For the highest measurement accuracy of the decode time, the start/stop 432 // For the highest measurement accuracy of the decode time, the start/stop
433 // time recordings should wrap the Decode call as tightly as possible. 433 // time recordings should wrap the Decode call as tightly as possible.
434 int64_t decode_stop_ns = rtc::TimeNanos(); 434 int64_t decode_stop_ns = rtc::TimeNanos();
435 435
436 // Update frame information and statistics. 436 // Update frame information and statistics.
437 int frame_number = TimestampToFrameNumber(image.timestamp()); 437 int frame_number = TimestampToFrameNumber(image.timestamp());
438 RTC_DCHECK_LT(frame_number, frame_infos_.size()); 438 RTC_DCHECK_LT(frame_number, frame_infos_.size());
439 FrameInfo* frame_info = &frame_infos_[frame_number]; 439 FrameInfo* frame_info = &frame_infos_[frame_number];
440 frame_info->decoded_width = image.width(); 440 frame_info->decoded_width = image.width();
441 frame_info->decoded_height = image.height(); 441 frame_info->decoded_height = image.height();
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
489 RTC_DCHECK_EQ(extracted_length, analysis_frame_writer_->FrameLength()); 489 RTC_DCHECK_EQ(extracted_length, analysis_frame_writer_->FrameLength());
490 RTC_CHECK(analysis_frame_writer_->WriteFrame(extracted_buffer.data())); 490 RTC_CHECK(analysis_frame_writer_->WriteFrame(extracted_buffer.data()));
491 if (decoded_frame_writer_) { 491 if (decoded_frame_writer_) {
492 RTC_DCHECK_EQ(extracted_length, decoded_frame_writer_->FrameLength()); 492 RTC_DCHECK_EQ(extracted_length, decoded_frame_writer_->FrameLength());
493 RTC_CHECK(decoded_frame_writer_->WriteFrame(extracted_buffer.data())); 493 RTC_CHECK(decoded_frame_writer_->WriteFrame(extracted_buffer.data()));
494 } 494 }
495 495
496 last_decoded_frame_buffer_ = std::move(extracted_buffer); 496 last_decoded_frame_buffer_ = std::move(extracted_buffer);
497 } 497 }
498 498
499 uint32_t VideoProcessorImpl::FrameNumberToTimestamp(int frame_number) { 499 uint32_t VideoProcessor::FrameNumberToTimestamp(int frame_number) {
500 RTC_DCHECK_GE(frame_number, 0); 500 RTC_DCHECK_GE(frame_number, 0);
501 const int ticks_per_frame = 501 const int ticks_per_frame =
502 kRtpClockRateHz / config_.codec_settings->maxFramerate; 502 kRtpClockRateHz / config_.codec_settings->maxFramerate;
503 return (frame_number + 1) * ticks_per_frame; 503 return (frame_number + 1) * ticks_per_frame;
504 } 504 }
505 505
506 int VideoProcessorImpl::TimestampToFrameNumber(uint32_t timestamp) { 506 int VideoProcessor::TimestampToFrameNumber(uint32_t timestamp) {
507 RTC_DCHECK_GT(timestamp, 0); 507 RTC_DCHECK_GT(timestamp, 0);
508 const int ticks_per_frame = 508 const int ticks_per_frame =
509 kRtpClockRateHz / config_.codec_settings->maxFramerate; 509 kRtpClockRateHz / config_.codec_settings->maxFramerate;
510 RTC_DCHECK_EQ(timestamp % ticks_per_frame, 0); 510 RTC_DCHECK_EQ(timestamp % ticks_per_frame, 0);
511 return (timestamp / ticks_per_frame) - 1; 511 return (timestamp / ticks_per_frame) - 1;
512 } 512 }
513 513
514 } // namespace test 514 } // namespace test
515 } // namespace webrtc 515 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698