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

Side by Side Diff: media/cast/sender/vp8_encoder.cc

Issue 388663003: Cast: Reshuffle files under media/cast (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: missing includes Created 6 years, 5 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 | Annotate | Revision Log
« no previous file with comments | « media/cast/sender/vp8_encoder.h ('k') | media/cast/test/cast_benchmarks.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 // 4
5 // TODO (pwestin): add a link to the design document describing the generic 5 #include "media/cast/sender/vp8_encoder.h"
6 // protocol and the VP8 specific details.
7 #include "media/cast/video_sender/codecs/vp8/vp8_encoder.h"
8 6
9 #include <vector> 7 #include <vector>
10 8
11 #include "base/logging.h" 9 #include "base/logging.h"
12 #include "media/base/video_frame.h" 10 #include "media/base/video_frame.h"
13 #include "media/cast/cast_defines.h" 11 #include "media/cast/cast_defines.h"
14 #include "media/cast/transport/cast_transport_config.h" 12 #include "media/cast/net/cast_transport_config.h"
15 #include "third_party/libvpx/source/libvpx/vpx/vp8cx.h" 13 #include "third_party/libvpx/source/libvpx/vpx/vp8cx.h"
16 14
17 namespace media { 15 namespace media {
18 namespace cast { 16 namespace cast {
19 17
20 static const uint32 kMinIntra = 300; 18 static const uint32 kMinIntra = 300;
21 19
22 static int ComputeMaxNumOfRepeatedBuffes(int max_unacked_frames) { 20 static int ComputeMaxNumOfRepeatedBuffes(int max_unacked_frames) {
23 if (max_unacked_frames > kNumberOfVp8VideoBuffers) 21 if (max_unacked_frames > kNumberOfVp8VideoBuffers)
24 return (max_unacked_frames - 1) / kNumberOfVp8VideoBuffers; 22 return (max_unacked_frames - 1) / kNumberOfVp8VideoBuffers;
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
128 return; 126 return;
129 } 127 }
130 vpx_codec_control(encoder_.get(), VP8E_SET_STATIC_THRESHOLD, 1); 128 vpx_codec_control(encoder_.get(), VP8E_SET_STATIC_THRESHOLD, 1);
131 vpx_codec_control(encoder_.get(), VP8E_SET_NOISE_SENSITIVITY, 0); 129 vpx_codec_control(encoder_.get(), VP8E_SET_NOISE_SENSITIVITY, 0);
132 vpx_codec_control(encoder_.get(), VP8E_SET_CPUUSED, -6); 130 vpx_codec_control(encoder_.get(), VP8E_SET_CPUUSED, -6);
133 vpx_codec_control( 131 vpx_codec_control(
134 encoder_.get(), VP8E_SET_MAX_INTRA_BITRATE_PCT, rc_max_intra_target); 132 encoder_.get(), VP8E_SET_MAX_INTRA_BITRATE_PCT, rc_max_intra_target);
135 } 133 }
136 134
137 bool Vp8Encoder::Encode(const scoped_refptr<media::VideoFrame>& video_frame, 135 bool Vp8Encoder::Encode(const scoped_refptr<media::VideoFrame>& video_frame,
138 transport::EncodedFrame* encoded_image) { 136 EncodedFrame* encoded_image) {
139 DCHECK(thread_checker_.CalledOnValidThread()); 137 DCHECK(thread_checker_.CalledOnValidThread());
140 // Image in vpx_image_t format. 138 // Image in vpx_image_t format.
141 // Input image is const. VP8's raw image is not defined as const. 139 // Input image is const. VP8's raw image is not defined as const.
142 raw_image_->planes[PLANE_Y] = 140 raw_image_->planes[PLANE_Y] =
143 const_cast<uint8*>(video_frame->data(VideoFrame::kYPlane)); 141 const_cast<uint8*>(video_frame->data(VideoFrame::kYPlane));
144 raw_image_->planes[PLANE_U] = 142 raw_image_->planes[PLANE_U] =
145 const_cast<uint8*>(video_frame->data(VideoFrame::kUPlane)); 143 const_cast<uint8*>(video_frame->data(VideoFrame::kUPlane));
146 raw_image_->planes[PLANE_V] = 144 raw_image_->planes[PLANE_V] =
147 const_cast<uint8*>(video_frame->data(VideoFrame::kVPlane)); 145 const_cast<uint8*>(video_frame->data(VideoFrame::kVPlane));
148 146
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 is_key_frame = !!(pkt->data.frame.flags & VPX_FRAME_IS_KEY); 207 is_key_frame = !!(pkt->data.frame.flags & VPX_FRAME_IS_KEY);
210 break; // Done, since all data is provided in one CX_FRAME_PKT packet. 208 break; // Done, since all data is provided in one CX_FRAME_PKT packet.
211 } 209 }
212 // Don't update frame_id for zero size frames. 210 // Don't update frame_id for zero size frames.
213 if (encoded_image->data.empty()) 211 if (encoded_image->data.empty())
214 return true; 212 return true;
215 213
216 // Populate the encoded frame. 214 // Populate the encoded frame.
217 encoded_image->frame_id = ++last_encoded_frame_id_; 215 encoded_image->frame_id = ++last_encoded_frame_id_;
218 if (is_key_frame) { 216 if (is_key_frame) {
219 encoded_image->dependency = transport::EncodedFrame::KEY; 217 encoded_image->dependency = EncodedFrame::KEY;
220 encoded_image->referenced_frame_id = encoded_image->frame_id; 218 encoded_image->referenced_frame_id = encoded_image->frame_id;
221 } else { 219 } else {
222 encoded_image->dependency = transport::EncodedFrame::DEPENDENT; 220 encoded_image->dependency = EncodedFrame::DEPENDENT;
223 encoded_image->referenced_frame_id = latest_frame_id_to_reference; 221 encoded_image->referenced_frame_id = latest_frame_id_to_reference;
224 } 222 }
225 223
226 DVLOG(1) << "VP8 encoded frame_id " << encoded_image->frame_id 224 DVLOG(1) << "VP8 encoded frame_id " << encoded_image->frame_id
227 << ", sized:" << encoded_image->data.size(); 225 << ", sized:" << encoded_image->data.size();
228 226
229 if (is_key_frame) { 227 if (is_key_frame) {
230 key_frame_requested_ = false; 228 key_frame_requested_ = false;
231 229
232 for (int i = 0; i < kNumberOfVp8VideoBuffers; ++i) { 230 for (int i = 0; i < kNumberOfVp8VideoBuffers; ++i) {
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
406 float scale_parameter = 0.5; 404 float scale_parameter = 0.5;
407 uint32 target_pct = optimal_buffer_size_ms * scale_parameter * 405 uint32 target_pct = optimal_buffer_size_ms * scale_parameter *
408 cast_config_.max_frame_rate / 10; 406 cast_config_.max_frame_rate / 10;
409 407
410 // Don't go below 3 times the per frame bandwidth. 408 // Don't go below 3 times the per frame bandwidth.
411 return std::max(target_pct, kMinIntra); 409 return std::max(target_pct, kMinIntra);
412 } 410 }
413 411
414 } // namespace cast 412 } // namespace cast
415 } // namespace media 413 } // namespace media
OLDNEW
« no previous file with comments | « media/cast/sender/vp8_encoder.h ('k') | media/cast/test/cast_benchmarks.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698