Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "media/audio/android/opensles_output.h" | 5 #include "media/audio/android/opensles_output.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "media/audio/audio_util.h" | 8 #include "media/audio/audio_util.h" |
| 9 #include "media/audio/android/audio_manager_android.h" | 9 #include "media/audio/android/audio_manager_android.h" |
| 10 | 10 |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 42 | 42 |
| 43 OpenSLESOutputStream::~OpenSLESOutputStream() { | 43 OpenSLESOutputStream::~OpenSLESOutputStream() { |
| 44 DCHECK(!engine_object_.Get()); | 44 DCHECK(!engine_object_.Get()); |
| 45 DCHECK(!player_object_.Get()); | 45 DCHECK(!player_object_.Get()); |
| 46 DCHECK(!output_mixer_.Get()); | 46 DCHECK(!output_mixer_.Get()); |
| 47 DCHECK(!player_); | 47 DCHECK(!player_); |
| 48 DCHECK(!simple_buffer_queue_); | 48 DCHECK(!simple_buffer_queue_); |
| 49 DCHECK(!audio_data_[0]); | 49 DCHECK(!audio_data_[0]); |
| 50 } | 50 } |
| 51 | 51 |
| 52 void OpenSLESOutputStream::SetAudioMode() { | |
| 53 JNIEnv* env = base::android::AttachCurrentThread(); | |
| 54 DCHECK(env); | |
| 55 | |
| 56 jobject j_context = base::android::GetApplicationContext(); | |
| 57 DCHECK(j_context); | |
| 58 | |
| 59 // context.getSystemService(Context.AUDIO_SERVICE). | |
|
Yaron
2013/03/09 00:31:18
We're no longer taking patches with hand-written J
| |
| 60 jstring audio_service_string = env->NewStringUTF("audio"); | |
| 61 jclass context_class = env->GetObjectClass(j_context); | |
|
Yaron
2013/03/09 00:31:18
Examle for why we say this: you're currently leaki
| |
| 62 CHECK(context_class); | |
| 63 jmethodID method = env->GetMethodID( | |
| 64 context_class, "getSystemService", | |
| 65 "(Ljava/lang/String;)Ljava/lang/Object;"); | |
| 66 CHECK(method); | |
| 67 jobject j_am = env->CallObjectMethod(j_context, method, | |
| 68 audio_service_string); | |
| 69 CHECK(j_am); | |
| 70 jclass j_am_class = env->GetObjectClass(j_am); | |
| 71 CHECK(j_am_class); | |
| 72 | |
| 73 // AudioManager.MODE_IN_COMMUNICATION. | |
| 74 jclass cls = env->FindClass("android/media/AudioManager"); | |
| 75 CHECK(cls); | |
| 76 jfieldID field = env->GetStaticFieldID( | |
| 77 cls, | |
| 78 "MODE_IN_COMMUNICATION", | |
| 79 "I"); | |
| 80 CHECK(field); | |
| 81 jint am_mode = env->GetStaticIntField(cls, field); | |
| 82 CHECK(am_mode); | |
| 83 env->DeleteLocalRef(cls); | |
| 84 | |
| 85 // audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION) | |
| 86 jmethodID setmode_method = env->GetMethodID(j_am_class, "setMode", "(I)V"); | |
| 87 CHECK(setmode_method); | |
| 88 env->CallVoidMethod(j_am, setmode_method, am_mode); | |
| 89 base::android::CheckException(env); | |
| 90 } | |
| 91 | |
| 52 bool OpenSLESOutputStream::Open() { | 92 bool OpenSLESOutputStream::Open() { |
| 53 if (engine_object_.Get()) | 93 if (engine_object_.Get()) |
| 54 return false; | 94 return false; |
| 55 | 95 |
| 56 if (!CreatePlayer()) | 96 if (!CreatePlayer()) |
| 57 return false; | 97 return false; |
| 58 | 98 |
| 99 SetAudioMode(); | |
| 100 | |
| 59 SetupAudioBuffer(); | 101 SetupAudioBuffer(); |
| 60 | 102 |
| 61 return true; | 103 return true; |
| 62 } | 104 } |
| 63 | 105 |
| 64 void OpenSLESOutputStream::Start(AudioSourceCallback* callback) { | 106 void OpenSLESOutputStream::Start(AudioSourceCallback* callback) { |
| 65 DCHECK(callback); | 107 DCHECK(callback); |
| 66 DCHECK(player_); | 108 DCHECK(player_); |
| 67 DCHECK(simple_buffer_queue_); | 109 DCHECK(simple_buffer_queue_); |
| 68 if (started_) | 110 if (started_) |
| (...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 304 } | 346 } |
| 305 } | 347 } |
| 306 | 348 |
| 307 void OpenSLESOutputStream::HandleError(SLresult error) { | 349 void OpenSLESOutputStream::HandleError(SLresult error) { |
| 308 DLOG(ERROR) << "OpenSLES error " << error; | 350 DLOG(ERROR) << "OpenSLES error " << error; |
| 309 if (callback_) | 351 if (callback_) |
| 310 callback_->OnError(this, error); | 352 callback_->OnError(this, error); |
| 311 } | 353 } |
| 312 | 354 |
| 313 } // namespace media | 355 } // namespace media |
| OLD | NEW |