| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/renderer/pepper/pepper_audio_encoder_host.h" | 5 #include "content/renderer/pepper/pepper_audio_encoder_host.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 65 | 65 |
| 66 // Used on the media thread. | 66 // Used on the media thread. |
| 67 void Encode(uint8_t* input_data, | 67 void Encode(uint8_t* input_data, |
| 68 size_t input_size, | 68 size_t input_size, |
| 69 uint8_t* output_data, | 69 uint8_t* output_data, |
| 70 size_t output_size, | 70 size_t output_size, |
| 71 BitstreamBufferReadyCB callback); | 71 BitstreamBufferReadyCB callback); |
| 72 void RequestBitrateChange(uint32_t bitrate); | 72 void RequestBitrateChange(uint32_t bitrate); |
| 73 | 73 |
| 74 private: | 74 private: |
| 75 scoped_ptr<uint8_t[]> encoder_memory_; | 75 std::unique_ptr<uint8_t[]> encoder_memory_; |
| 76 OpusEncoder* opus_encoder_; | 76 OpusEncoder* opus_encoder_; |
| 77 | 77 |
| 78 // Initialization parameters, only valid if |encoder_memory_| is not | 78 // Initialization parameters, only valid if |encoder_memory_| is not |
| 79 // nullptr. | 79 // nullptr. |
| 80 ppapi::proxy::PPB_AudioEncodeParameters parameters_; | 80 ppapi::proxy::PPB_AudioEncodeParameters parameters_; |
| 81 | 81 |
| 82 DISALLOW_COPY_AND_ASSIGN(AudioEncoderImpl); | 82 DISALLOW_COPY_AND_ASSIGN(AudioEncoderImpl); |
| 83 }; | 83 }; |
| 84 | 84 |
| 85 PepperAudioEncoderHost::AudioEncoderImpl::AudioEncoderImpl() | 85 PepperAudioEncoderHost::AudioEncoderImpl::AudioEncoderImpl() |
| (...skipping 23 matching lines...) Expand all Loading... |
| 109 const ppapi::proxy::PPB_AudioEncodeParameters& parameters) { | 109 const ppapi::proxy::PPB_AudioEncodeParameters& parameters) { |
| 110 if (parameters.output_profile != PP_AUDIOPROFILE_OPUS) | 110 if (parameters.output_profile != PP_AUDIOPROFILE_OPUS) |
| 111 return false; | 111 return false; |
| 112 | 112 |
| 113 DCHECK(!encoder_memory_); | 113 DCHECK(!encoder_memory_); |
| 114 | 114 |
| 115 int32_t encoder_size = opus_encoder_get_size(parameters.channels); | 115 int32_t encoder_size = opus_encoder_get_size(parameters.channels); |
| 116 if (encoder_size < 1) | 116 if (encoder_size < 1) |
| 117 return false; | 117 return false; |
| 118 | 118 |
| 119 scoped_ptr<uint8_t[]> encoder_memory(new uint8_t[encoder_size]); | 119 std::unique_ptr<uint8_t[]> encoder_memory(new uint8_t[encoder_size]); |
| 120 opus_encoder_ = reinterpret_cast<OpusEncoder*>(encoder_memory.get()); | 120 opus_encoder_ = reinterpret_cast<OpusEncoder*>(encoder_memory.get()); |
| 121 | 121 |
| 122 if (opus_encoder_init(opus_encoder_, parameters.input_sample_rate, | 122 if (opus_encoder_init(opus_encoder_, parameters.input_sample_rate, |
| 123 parameters.channels, OPUS_APPLICATION_AUDIO) != OPUS_OK) | 123 parameters.channels, OPUS_APPLICATION_AUDIO) != OPUS_OK) |
| 124 return false; | 124 return false; |
| 125 | 125 |
| 126 if (opus_encoder_ctl(opus_encoder_, | 126 if (opus_encoder_ctl(opus_encoder_, |
| 127 OPUS_SET_BITRATE(parameters.initial_bitrate <= 0 | 127 OPUS_SET_BITRATE(parameters.initial_bitrate <= 0 |
| 128 ? OPUS_AUTO | 128 ? OPUS_AUTO |
| 129 : parameters.initial_bitrate)) != | 129 : parameters.initial_bitrate)) != |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 215 | 215 |
| 216 int32_t PepperAudioEncoderHost::OnHostMsgInitialize( | 216 int32_t PepperAudioEncoderHost::OnHostMsgInitialize( |
| 217 ppapi::host::HostMessageContext* context, | 217 ppapi::host::HostMessageContext* context, |
| 218 const ppapi::proxy::PPB_AudioEncodeParameters& parameters) { | 218 const ppapi::proxy::PPB_AudioEncodeParameters& parameters) { |
| 219 if (initialized_) | 219 if (initialized_) |
| 220 return PP_ERROR_FAILED; | 220 return PP_ERROR_FAILED; |
| 221 | 221 |
| 222 if (!IsInitializationValid(parameters)) | 222 if (!IsInitializationValid(parameters)) |
| 223 return PP_ERROR_NOTSUPPORTED; | 223 return PP_ERROR_NOTSUPPORTED; |
| 224 | 224 |
| 225 scoped_ptr<AudioEncoderImpl> encoder(new AudioEncoderImpl); | 225 std::unique_ptr<AudioEncoderImpl> encoder(new AudioEncoderImpl); |
| 226 if (!encoder->Initialize(parameters)) | 226 if (!encoder->Initialize(parameters)) |
| 227 return PP_ERROR_FAILED; | 227 return PP_ERROR_FAILED; |
| 228 if (!AllocateBuffers(parameters, encoder->GetNumberOfSamplesPerFrame())) | 228 if (!AllocateBuffers(parameters, encoder->GetNumberOfSamplesPerFrame())) |
| 229 return PP_ERROR_NOMEMORY; | 229 return PP_ERROR_NOMEMORY; |
| 230 | 230 |
| 231 initialized_ = true; | 231 initialized_ = true; |
| 232 encoder_last_error_ = PP_OK; | 232 encoder_last_error_ = PP_OK; |
| 233 encoder_.swap(encoder); | 233 encoder_.swap(encoder); |
| 234 | 234 |
| 235 ppapi::host::ReplyMessageContext reply_context = | 235 ppapi::host::ReplyMessageContext reply_context = |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 357 bitstream_buffer_size *= 2; | 357 bitstream_buffer_size *= 2; |
| 358 bitstream_buffer_size += sizeof(ppapi::MediaStreamBuffer::Bitstream); | 358 bitstream_buffer_size += sizeof(ppapi::MediaStreamBuffer::Bitstream); |
| 359 base::CheckedNumeric<size_t> total_bitstream_memory_size = | 359 base::CheckedNumeric<size_t> total_bitstream_memory_size = |
| 360 bitstream_buffer_size; | 360 bitstream_buffer_size; |
| 361 total_bitstream_memory_size *= kDefaultNumberOfAudioBuffers; | 361 total_bitstream_memory_size *= kDefaultNumberOfAudioBuffers; |
| 362 | 362 |
| 363 if (!total_audio_memory_size.IsValid() || | 363 if (!total_audio_memory_size.IsValid() || |
| 364 !total_bitstream_memory_size.IsValid()) | 364 !total_bitstream_memory_size.IsValid()) |
| 365 return false; | 365 return false; |
| 366 | 366 |
| 367 scoped_ptr<base::SharedMemory> audio_memory( | 367 std::unique_ptr<base::SharedMemory> audio_memory( |
| 368 RenderThreadImpl::current()->HostAllocateSharedMemoryBuffer( | 368 RenderThreadImpl::current()->HostAllocateSharedMemoryBuffer( |
| 369 total_audio_memory_size.ValueOrDie())); | 369 total_audio_memory_size.ValueOrDie())); |
| 370 if (!audio_memory) | 370 if (!audio_memory) |
| 371 return false; | 371 return false; |
| 372 scoped_ptr<ppapi::MediaStreamBufferManager> audio_buffer_manager( | 372 std::unique_ptr<ppapi::MediaStreamBufferManager> audio_buffer_manager( |
| 373 new ppapi::MediaStreamBufferManager(this)); | 373 new ppapi::MediaStreamBufferManager(this)); |
| 374 if (!audio_buffer_manager->SetBuffers(kDefaultNumberOfAudioBuffers, | 374 if (!audio_buffer_manager->SetBuffers(kDefaultNumberOfAudioBuffers, |
| 375 total_audio_buffer_size.ValueOrDie(), | 375 total_audio_buffer_size.ValueOrDie(), |
| 376 std::move(audio_memory), false)) | 376 std::move(audio_memory), false)) |
| 377 return false; | 377 return false; |
| 378 | 378 |
| 379 for (int32_t i = 0; i < audio_buffer_manager->number_of_buffers(); ++i) { | 379 for (int32_t i = 0; i < audio_buffer_manager->number_of_buffers(); ++i) { |
| 380 ppapi::MediaStreamBuffer::Audio* buffer = | 380 ppapi::MediaStreamBuffer::Audio* buffer = |
| 381 &(audio_buffer_manager->GetBufferPointer(i)->audio); | 381 &(audio_buffer_manager->GetBufferPointer(i)->audio); |
| 382 buffer->header.size = total_audio_buffer_size.ValueOrDie(); | 382 buffer->header.size = total_audio_buffer_size.ValueOrDie(); |
| 383 buffer->header.type = ppapi::MediaStreamBuffer::TYPE_AUDIO; | 383 buffer->header.type = ppapi::MediaStreamBuffer::TYPE_AUDIO; |
| 384 buffer->sample_rate = | 384 buffer->sample_rate = |
| 385 static_cast<PP_AudioBuffer_SampleRate>(parameters.input_sample_rate); | 385 static_cast<PP_AudioBuffer_SampleRate>(parameters.input_sample_rate); |
| 386 buffer->number_of_channels = parameters.channels; | 386 buffer->number_of_channels = parameters.channels; |
| 387 buffer->number_of_samples = samples_per_frame; | 387 buffer->number_of_samples = samples_per_frame; |
| 388 buffer->data_size = audio_buffer_size.ValueOrDie(); | 388 buffer->data_size = audio_buffer_size.ValueOrDie(); |
| 389 } | 389 } |
| 390 | 390 |
| 391 scoped_ptr<base::SharedMemory> bitstream_memory( | 391 std::unique_ptr<base::SharedMemory> bitstream_memory( |
| 392 RenderThreadImpl::current()->HostAllocateSharedMemoryBuffer( | 392 RenderThreadImpl::current()->HostAllocateSharedMemoryBuffer( |
| 393 total_bitstream_memory_size.ValueOrDie())); | 393 total_bitstream_memory_size.ValueOrDie())); |
| 394 if (!bitstream_memory) | 394 if (!bitstream_memory) |
| 395 return false; | 395 return false; |
| 396 scoped_ptr<ppapi::MediaStreamBufferManager> bitstream_buffer_manager( | 396 std::unique_ptr<ppapi::MediaStreamBufferManager> bitstream_buffer_manager( |
| 397 new ppapi::MediaStreamBufferManager(this)); | 397 new ppapi::MediaStreamBufferManager(this)); |
| 398 if (!bitstream_buffer_manager->SetBuffers(kDefaultNumberOfAudioBuffers, | 398 if (!bitstream_buffer_manager->SetBuffers(kDefaultNumberOfAudioBuffers, |
| 399 bitstream_buffer_size.ValueOrDie(), | 399 bitstream_buffer_size.ValueOrDie(), |
| 400 std::move(bitstream_memory), true)) | 400 std::move(bitstream_memory), true)) |
| 401 return false; | 401 return false; |
| 402 | 402 |
| 403 for (int32_t i = 0; i < bitstream_buffer_manager->number_of_buffers(); ++i) { | 403 for (int32_t i = 0; i < bitstream_buffer_manager->number_of_buffers(); ++i) { |
| 404 ppapi::MediaStreamBuffer::Bitstream* buffer = | 404 ppapi::MediaStreamBuffer::Bitstream* buffer = |
| 405 &(bitstream_buffer_manager->GetBufferPointer(i)->bitstream); | 405 &(bitstream_buffer_manager->GetBufferPointer(i)->bitstream); |
| 406 buffer->header.size = bitstream_buffer_size.ValueOrDie(); | 406 buffer->header.size = bitstream_buffer_size.ValueOrDie(); |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 487 // to avoid freeing memory the encoder might still be working on. | 487 // to avoid freeing memory the encoder might still be working on. |
| 488 media_task_runner_->PostTask( | 488 media_task_runner_->PostTask( |
| 489 FROM_HERE, | 489 FROM_HERE, |
| 490 base::Bind(&StopAudioEncoder, base::Passed(std::move(encoder_)), | 490 base::Bind(&StopAudioEncoder, base::Passed(std::move(encoder_)), |
| 491 base::Passed(std::move(audio_buffer_manager_)), | 491 base::Passed(std::move(audio_buffer_manager_)), |
| 492 base::Passed(std::move(bitstream_buffer_manager_)))); | 492 base::Passed(std::move(bitstream_buffer_manager_)))); |
| 493 } | 493 } |
| 494 | 494 |
| 495 // static | 495 // static |
| 496 void PepperAudioEncoderHost::StopAudioEncoder( | 496 void PepperAudioEncoderHost::StopAudioEncoder( |
| 497 scoped_ptr<AudioEncoderImpl> encoder, | 497 std::unique_ptr<AudioEncoderImpl> encoder, |
| 498 scoped_ptr<ppapi::MediaStreamBufferManager> audio_buffer_manager, | 498 std::unique_ptr<ppapi::MediaStreamBufferManager> audio_buffer_manager, |
| 499 scoped_ptr<ppapi::MediaStreamBufferManager> bitstream_buffer_manager) {} | 499 std::unique_ptr<ppapi::MediaStreamBufferManager> bitstream_buffer_manager) { |
| 500 } |
| 500 | 501 |
| 501 } // namespace content | 502 } // namespace content |
| OLD | NEW |