Index: media/base/android/webaudio_media_codec_bridge.cc |
diff --git a/media/base/android/webaudio_media_codec_bridge.cc b/media/base/android/webaudio_media_codec_bridge.cc |
deleted file mode 100644 |
index c38ba75dc5fe7d458d7a79616fba4f15874d8fcd..0000000000000000000000000000000000000000 |
--- a/media/base/android/webaudio_media_codec_bridge.cc |
+++ /dev/null |
@@ -1,202 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "media/base/android/webaudio_media_codec_bridge.h" |
- |
-#include <errno.h> |
-#include <fcntl.h> |
-#include <stddef.h> |
-#include <string.h> |
-#include <sys/stat.h> |
-#include <sys/types.h> |
-#include <unistd.h> |
-#include <vector> |
- |
-#include "base/android/context_utils.h" |
-#include "base/android/jni_android.h" |
-#include "base/android/jni_array.h" |
-#include "base/android/jni_string.h" |
-#include "base/files/scoped_file.h" |
-#include "base/logging.h" |
-#include "base/posix/eintr_wrapper.h" |
-#include "jni/WebAudioMediaCodecBridge_jni.h" |
-#include "media/base/android/webaudio_media_codec_info.h" |
- |
-using base::android::AttachCurrentThread; |
- |
-namespace media { |
- |
-void WebAudioMediaCodecBridge::RunWebAudioMediaCodec( |
- base::SharedMemoryHandle encoded_audio_handle, |
- base::FileDescriptor pcm_output, |
- uint32_t data_size, |
- base::Closure on_decode_finished_cb) { |
- WebAudioMediaCodecBridge bridge( |
- encoded_audio_handle, pcm_output, data_size); |
- |
- bridge.DecodeInMemoryAudioFile(); |
- on_decode_finished_cb.Run(); |
-} |
- |
-WebAudioMediaCodecBridge::WebAudioMediaCodecBridge( |
- base::SharedMemoryHandle encoded_audio_handle, |
- base::FileDescriptor pcm_output, |
- uint32_t data_size) |
- : encoded_audio_handle_(encoded_audio_handle), |
- pcm_output_(pcm_output.fd), |
- data_size_(data_size) { |
- DVLOG(1) << "WebAudioMediaCodecBridge start **********************" |
- << " output fd = " << pcm_output.fd; |
-} |
- |
-WebAudioMediaCodecBridge::~WebAudioMediaCodecBridge() { |
- if (close(pcm_output_)) { |
- DVLOG(1) << "Couldn't close output fd " << pcm_output_ |
- << ": " << strerror(errno); |
- } |
-} |
- |
-int WebAudioMediaCodecBridge::SaveEncodedAudioToFile( |
- JNIEnv* env, |
- jobject context) { |
- // Create a temporary file where we can save the encoded audio data. |
- std::string temporaryFile = |
- base::android::ConvertJavaStringToUTF8( |
- env, |
- Java_WebAudioMediaCodecBridge_createTempFile(env, context).obj()); |
- |
- // Open the file and unlink it, so that it will be actually removed |
- // when we close the file. |
- base::ScopedFD fd(open(temporaryFile.c_str(), O_RDWR)); |
- if (unlink(temporaryFile.c_str())) { |
- VLOG(0) << "Couldn't unlink temp file " << temporaryFile |
- << ": " << strerror(errno); |
- } |
- |
- if (!fd.is_valid()) { |
- return -1; |
- } |
- |
- // Create a local mapping of the shared memory containing the |
- // encoded audio data, and save the contents to the temporary file. |
- base::SharedMemory encoded_data(encoded_audio_handle_, true); |
- |
- if (!encoded_data.Map(data_size_)) { |
- VLOG(0) << "Unable to map shared memory!"; |
- return -1; |
- } |
- |
- if (static_cast<uint32_t>(write(fd.get(), encoded_data.memory(), data_size_)) |
- != data_size_) { |
- VLOG(0) << "Failed to write all audio data to temp file!"; |
- return -1; |
- } |
- |
- lseek(fd.get(), 0, SEEK_SET); |
- |
- return fd.release(); |
-} |
- |
-bool WebAudioMediaCodecBridge::DecodeInMemoryAudioFile() { |
- JNIEnv* env = AttachCurrentThread(); |
- CHECK(env); |
- |
- jobject context = base::android::GetApplicationContext(); |
- |
- int sourceFd = SaveEncodedAudioToFile(env, context); |
- |
- if (sourceFd < 0) |
- return false; |
- |
- jboolean decoded = Java_WebAudioMediaCodecBridge_decodeAudioFile( |
- env, |
- context, |
- reinterpret_cast<intptr_t>(this), |
- sourceFd, |
- data_size_); |
- |
- close(sourceFd); |
- |
- DVLOG(1) << "decoded = " << (decoded ? "true" : "false"); |
- |
- return decoded; |
-} |
- |
-void WebAudioMediaCodecBridge::InitializeDestination( |
- JNIEnv* env, |
- const JavaParamRef<jobject>& /*java object*/, |
- jint channel_count, |
- jint sample_rate, |
- jlong duration_microsec) { |
- // Send information about this audio file: number of channels, |
- // sample rate (Hz), and the number of frames. |
- struct WebAudioMediaCodecInfo info = { |
- static_cast<unsigned long>(channel_count), |
- static_cast<unsigned long>(sample_rate), |
- // The number of frames is the duration of the file |
- // (in microseconds) times the sample rate. |
- static_cast<unsigned long>( |
- 0.5 + (duration_microsec * 0.000001 * |
- sample_rate)) |
- }; |
- |
- DVLOG(1) << "InitializeDestination:" |
- << " channel count = " << channel_count |
- << " rate = " << sample_rate |
- << " duration = " << duration_microsec << " microsec"; |
- |
- HANDLE_EINTR(write(pcm_output_, &info, sizeof(info))); |
-} |
- |
-void WebAudioMediaCodecBridge::OnChunkDecoded( |
- JNIEnv* env, |
- const JavaParamRef<jobject>& /*java object*/, |
- const JavaParamRef<jobject>& buf, |
- jint buf_size, |
- jint input_channel_count, |
- jint output_channel_count) { |
- if (buf_size <= 0 || !buf) |
- return; |
- |
- int8_t* buffer = |
- static_cast<int8_t*>(env->GetDirectBufferAddress(buf)); |
- size_t count = static_cast<size_t>(buf_size); |
- std::vector<int16_t> decoded_data; |
- |
- if (input_channel_count == 1 && output_channel_count == 2) { |
- // See crbug.com/266006. The file has one channel, but the |
- // decoder decided to return two channels. To be consistent with |
- // the number of channels in the file, only send one channel (the |
- // first). |
- int16_t* data = static_cast<int16_t*>(env->GetDirectBufferAddress(buf)); |
- int frame_count = buf_size / sizeof(*data) / 2; |
- |
- decoded_data.resize(frame_count); |
- for (int k = 0; k < frame_count; ++k) { |
- decoded_data[k] = *data; |
- data += 2; |
- } |
- buffer = reinterpret_cast<int8_t*>(decoded_data.data()); |
- DCHECK(buffer); |
- count = frame_count * sizeof(*data); |
- } |
- |
- // Write out the data to the pipe in small chunks if necessary. |
- while (count > 0) { |
- int bytes_to_write = (count >= PIPE_BUF) ? PIPE_BUF : count; |
- ssize_t bytes_written = HANDLE_EINTR(write(pcm_output_, |
- buffer, |
- bytes_to_write)); |
- if (bytes_written == -1) |
- break; |
- count -= bytes_written; |
- buffer += bytes_written; |
- } |
-} |
- |
-bool WebAudioMediaCodecBridge::RegisterWebAudioMediaCodecBridge(JNIEnv* env) { |
- return RegisterNativesImpl(env); |
-} |
- |
-} // namespace |