| OLD | NEW |
| 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 #include "content/common/gpu/media/android_video_encode_accelerator.h" | 5 #include "content/common/gpu/media/android_video_encode_accelerator.h" |
| 6 | 6 |
| 7 #include <set> | 7 #include <set> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 139 profile.max_framerate_denominator = kMaxFramerateDenominator; | 139 profile.max_framerate_denominator = kMaxFramerateDenominator; |
| 140 profiles.push_back(profile); | 140 profiles.push_back(profile); |
| 141 } | 141 } |
| 142 return profiles; | 142 return profiles; |
| 143 } | 143 } |
| 144 | 144 |
| 145 bool AndroidVideoEncodeAccelerator::Initialize( | 145 bool AndroidVideoEncodeAccelerator::Initialize( |
| 146 media::VideoPixelFormat format, | 146 media::VideoPixelFormat format, |
| 147 const gfx::Size& input_visible_size, | 147 const gfx::Size& input_visible_size, |
| 148 media::VideoCodecProfile output_profile, | 148 media::VideoCodecProfile output_profile, |
| 149 uint32 initial_bitrate, | 149 uint32_t initial_bitrate, |
| 150 Client* client) { | 150 Client* client) { |
| 151 DVLOG(3) << __PRETTY_FUNCTION__ << " format: " << format | 151 DVLOG(3) << __PRETTY_FUNCTION__ << " format: " << format |
| 152 << ", input_visible_size: " << input_visible_size.ToString() | 152 << ", input_visible_size: " << input_visible_size.ToString() |
| 153 << ", output_profile: " << output_profile | 153 << ", output_profile: " << output_profile |
| 154 << ", initial_bitrate: " << initial_bitrate; | 154 << ", initial_bitrate: " << initial_bitrate; |
| 155 DCHECK(!media_codec_); | 155 DCHECK(!media_codec_); |
| 156 DCHECK(thread_checker_.CalledOnValidThread()); | 156 DCHECK(thread_checker_.CalledOnValidThread()); |
| 157 | 157 |
| 158 client_ptr_factory_.reset(new base::WeakPtrFactory<Client>(client)); | 158 client_ptr_factory_.reset(new base::WeakPtrFactory<Client>(client)); |
| 159 | 159 |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 262 DVLOG(3) << __PRETTY_FUNCTION__ << ": bitstream_buffer_id=" << buffer.id(); | 262 DVLOG(3) << __PRETTY_FUNCTION__ << ": bitstream_buffer_id=" << buffer.id(); |
| 263 DCHECK(thread_checker_.CalledOnValidThread()); | 263 DCHECK(thread_checker_.CalledOnValidThread()); |
| 264 RETURN_ON_FAILURE(buffer.size() >= media_codec_->GetOutputBuffersCapacity(), | 264 RETURN_ON_FAILURE(buffer.size() >= media_codec_->GetOutputBuffersCapacity(), |
| 265 "Output buffers too small!", | 265 "Output buffers too small!", |
| 266 kInvalidArgumentError); | 266 kInvalidArgumentError); |
| 267 available_bitstream_buffers_.push_back(buffer); | 267 available_bitstream_buffers_.push_back(buffer); |
| 268 DoIOTask(); | 268 DoIOTask(); |
| 269 } | 269 } |
| 270 | 270 |
| 271 void AndroidVideoEncodeAccelerator::RequestEncodingParametersChange( | 271 void AndroidVideoEncodeAccelerator::RequestEncodingParametersChange( |
| 272 uint32 bitrate, | 272 uint32_t bitrate, |
| 273 uint32 framerate) { | 273 uint32_t framerate) { |
| 274 DVLOG(3) << __PRETTY_FUNCTION__ << ": bitrate: " << bitrate | 274 DVLOG(3) << __PRETTY_FUNCTION__ << ": bitrate: " << bitrate |
| 275 << ", framerate: " << framerate; | 275 << ", framerate: " << framerate; |
| 276 DCHECK(thread_checker_.CalledOnValidThread()); | 276 DCHECK(thread_checker_.CalledOnValidThread()); |
| 277 if (bitrate != last_set_bitrate_) { | 277 if (bitrate != last_set_bitrate_) { |
| 278 last_set_bitrate_ = bitrate; | 278 last_set_bitrate_ = bitrate; |
| 279 media_codec_->SetVideoBitrate(bitrate); | 279 media_codec_->SetVideoBitrate(bitrate); |
| 280 } | 280 } |
| 281 // Note: Android's MediaCodec doesn't allow mid-stream adjustments to | 281 // Note: Android's MediaCodec doesn't allow mid-stream adjustments to |
| 282 // framerate, so we ignore that here. This is OK because Android only uses | 282 // framerate, so we ignore that here. This is OK because Android only uses |
| 283 // the framerate value from MediaFormat during configure() as a proxy for | 283 // the framerate value from MediaFormat during configure() as a proxy for |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 387 UMA_HISTOGRAM_BOOLEAN("Media.AVEA.OutputBuffersSuffice", ret); | 387 UMA_HISTOGRAM_BOOLEAN("Media.AVEA.OutputBuffersSuffice", ret); |
| 388 return ret; | 388 return ret; |
| 389 } | 389 } |
| 390 | 390 |
| 391 void AndroidVideoEncodeAccelerator::DequeueOutput() { | 391 void AndroidVideoEncodeAccelerator::DequeueOutput() { |
| 392 if (!client_ptr_factory_->GetWeakPtr() || | 392 if (!client_ptr_factory_->GetWeakPtr() || |
| 393 available_bitstream_buffers_.empty() || num_buffers_at_codec_ == 0) { | 393 available_bitstream_buffers_.empty() || num_buffers_at_codec_ == 0) { |
| 394 return; | 394 return; |
| 395 } | 395 } |
| 396 | 396 |
| 397 int32 buf_index = 0; | 397 int32_t buf_index = 0; |
| 398 size_t offset = 0; | 398 size_t offset = 0; |
| 399 size_t size = 0; | 399 size_t size = 0; |
| 400 bool key_frame = false; | 400 bool key_frame = false; |
| 401 do { | 401 do { |
| 402 media::MediaCodecStatus status = media_codec_->DequeueOutputBuffer( | 402 media::MediaCodecStatus status = media_codec_->DequeueOutputBuffer( |
| 403 NoWaitTimeOut(), &buf_index, &offset, &size, NULL, NULL, &key_frame); | 403 NoWaitTimeOut(), &buf_index, &offset, &size, NULL, NULL, &key_frame); |
| 404 switch (status) { | 404 switch (status) { |
| 405 case media::MEDIA_CODEC_DEQUEUE_OUTPUT_AGAIN_LATER: | 405 case media::MEDIA_CODEC_DEQUEUE_OUTPUT_AGAIN_LATER: |
| 406 return; | 406 return; |
| 407 | 407 |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 447 base::MessageLoop::current()->PostTask( | 447 base::MessageLoop::current()->PostTask( |
| 448 FROM_HERE, | 448 FROM_HERE, |
| 449 base::Bind(&VideoEncodeAccelerator::Client::BitstreamBufferReady, | 449 base::Bind(&VideoEncodeAccelerator::Client::BitstreamBufferReady, |
| 450 client_ptr_factory_->GetWeakPtr(), | 450 client_ptr_factory_->GetWeakPtr(), |
| 451 bitstream_buffer.id(), | 451 bitstream_buffer.id(), |
| 452 size, | 452 size, |
| 453 key_frame)); | 453 key_frame)); |
| 454 } | 454 } |
| 455 | 455 |
| 456 } // namespace content | 456 } // namespace content |
| OLD | NEW |