Index: media/audio/android/opensles_output.cc |
=================================================================== |
--- media/audio/android/opensles_output.cc (revision 189519) |
+++ media/audio/android/opensles_output.cc (working copy) |
@@ -79,7 +79,6 @@ |
// Start streaming data by setting the play state to |SL_PLAYSTATE_PLAYING|. |
SLresult err = (*player_)->SetPlayState(player_, SL_PLAYSTATE_PLAYING); |
- DCHECK_EQ(SL_RESULT_SUCCESS, err); |
if (SL_RESULT_SUCCESS != err) { |
DLOG(WARNING) << "SetPlayState() failed to start playing"; |
Ami GONE FROM CHROMIUM
2013/03/22 16:24:41
Why is this a WARNING when the rest of the failure
|
} |
@@ -141,24 +140,27 @@ |
}; |
SLresult err = slCreateEngine(engine_object_.Receive(), 1, option, 0, |
NULL, NULL); |
- DCHECK_EQ(SL_RESULT_SUCCESS, err); |
- if (SL_RESULT_SUCCESS != err) |
+ if (SL_RESULT_SUCCESS != err) { |
+ DLOG(ERROR) << "CreatePlayer slCreateEngine: " << err; |
Ami GONE FROM CHROMIUM
2013/03/22 16:24:41
When there is this much duplicated code, it's usua
leozwang1
2013/03/23 07:00:39
Done.
|
return false; |
+ } |
// Realize the SL engine object in synchronous mode. |
err = engine_object_->Realize(engine_object_.Get(), SL_BOOLEAN_FALSE); |
- DCHECK_EQ(SL_RESULT_SUCCESS, err); |
- if (SL_RESULT_SUCCESS != err) |
+ if (SL_RESULT_SUCCESS != err) { |
+ DLOG(ERROR) << "CreatePlayer Realize: " << err; |
return false; |
+ } |
// Get the SL engine interface which is implicit. |
SLEngineItf engine; |
err = engine_object_->GetInterface(engine_object_.Get(), |
SL_IID_ENGINE, |
&engine); |
- DCHECK_EQ(SL_RESULT_SUCCESS, err); |
- if (SL_RESULT_SUCCESS != err) |
+ if (SL_RESULT_SUCCESS != err) { |
+ DLOG(ERROR) << "GetInterface(SL_IID_ENGINE): " << err; |
Ami GONE FROM CHROMIUM
2013/03/22 16:24:41
These log messages are pretty inconsistent; some h
leozwang1
2013/03/23 07:00:39
Done.
|
return false; |
+ } |
// Create ouput mixer object to be used by the player. |
// TODO(xians): Do we need the environmental reverb auxiliary effect? |
@@ -167,15 +169,17 @@ |
0, |
NULL, |
NULL); |
- DCHECK_EQ(SL_RESULT_SUCCESS, err); |
- if (SL_RESULT_SUCCESS != err) |
+ if (SL_RESULT_SUCCESS != err) { |
+ DLOG(ERROR) << "CreateOutputMix: " << err; |
return false; |
+ } |
// Realizing the output mix object in synchronous mode. |
err = output_mixer_->Realize(output_mixer_.Get(), SL_BOOLEAN_FALSE); |
- DCHECK_EQ(SL_RESULT_SUCCESS, err); |
- if (SL_RESULT_SUCCESS != err) |
+ if (SL_RESULT_SUCCESS != err) { |
+ DLOG(ERROR) << "mixer Realize: " << err; |
return false; |
+ } |
// Audio source configuration. |
SLDataLocator_AndroidSimpleBufferQueue simple_buffer_queue = { |
@@ -191,11 +195,15 @@ |
SLDataSink audio_sink = { &locator_output_mix, NULL }; |
// Create an audio player. |
- const SLuint32 number_of_interfaces = 1; |
- const SLInterfaceID interface_id[number_of_interfaces] = { |
- SL_IID_BUFFERQUEUE |
+ const SLInterfaceID interface_id[] = { |
+ SL_IID_BUFFERQUEUE, |
+ SL_IID_VOLUME, |
+ SL_IID_ANDROIDCONFIGURATION |
}; |
+ const SLuint32 number_of_interfaces = arraysize(interface_id); |
Ami GONE FROM CHROMIUM
2013/03/22 16:24:41
inline into call below.
|
const SLboolean interface_required[number_of_interfaces] = { |
Ami GONE FROM CHROMIUM
2013/03/22 16:24:41
drop number_of_interfaces
leozwang1
2013/03/22 21:37:09
Done.
|
+ SL_BOOLEAN_TRUE, |
+ SL_BOOLEAN_TRUE, |
SL_BOOLEAN_TRUE |
}; |
err = (*engine)->CreateAudioPlayer(engine, |
@@ -205,15 +213,32 @@ |
number_of_interfaces, |
interface_id, |
interface_required); |
- DCHECK_EQ(SL_RESULT_SUCCESS, err); |
if (SL_RESULT_SUCCESS != err) { |
DLOG(ERROR) << "CreateAudioPlayer() failed with error code " << err; |
return false; |
} |
+ // Create AudioPlayer and specify SL_IID_ANDROIDCONFIGURATION. |
+ SLAndroidConfigurationItf player_config; |
+ err = player_object_->GetInterface(player_object_.Get(), |
+ SL_IID_ANDROIDCONFIGURATION, |
+ &player_config); |
+ if (SL_RESULT_SUCCESS != err) { |
+ DLOG(ERROR) << "GetInterface(SL_IID_ANDROIDCONFIGURATION): " << err; |
+ return false; |
+ } |
+ |
+ SLint32 stream_type = SL_ANDROID_STREAM_VOICE; |
Ami GONE FROM CHROMIUM
2013/03/22 16:24:41
this variable is obscuring what the call below act
Ami GONE FROM CHROMIUM
2013/03/22 16:24:41
This seems to be the heart of the potential proble
leozwang1
2013/03/22 21:37:09
It's my concern too, we're going to do some tests.
Ami GONE FROM CHROMIUM
2013/03/22 22:29:55
I don't think you'd want to make the stream contai
leozwang1
2013/03/22 22:44:48
can you teach me how this "global state button (mi
Ami GONE FROM CHROMIUM
2013/03/22 23:34:20
I just mean that the toggle of what global mode to
|
+ err = (*player_config)->SetConfiguration(player_config, |
+ SL_ANDROID_KEY_STREAM_TYPE, |
+ &stream_type, sizeof(SLint32)); |
+ if (SL_RESULT_SUCCESS != err) { |
+ DLOG(ERROR) << "SetConfiguration(SL_ANDROID_STREAM_VOICE): " << err; |
+ return false; |
+ } |
+ |
// Realize the player object in synchronous mode. |
err = player_object_->Realize(player_object_.Get(), SL_BOOLEAN_FALSE); |
- DCHECK_EQ(SL_RESULT_SUCCESS, err); |
if (SL_RESULT_SUCCESS != err) { |
DLOG(ERROR) << "Player Realize() failed with error code " << err; |
return false; |
@@ -222,26 +247,31 @@ |
// Get an implicit player interface. |
err = player_object_->GetInterface( |
player_object_.Get(), SL_IID_PLAY, &player_); |
- DCHECK_EQ(SL_RESULT_SUCCESS, err); |
- if (SL_RESULT_SUCCESS != err) |
+ if (SL_RESULT_SUCCESS != err) { |
+ DLOG(ERROR) << "GetInterface(SL_IID_PLAYN): " << err; |
return false; |
+ } |
// Get the simple buffer queue interface. |
err = player_object_->GetInterface(player_object_.Get(), |
SL_IID_BUFFERQUEUE, |
&simple_buffer_queue_); |
- DCHECK_EQ(SL_RESULT_SUCCESS, err); |
- if (SL_RESULT_SUCCESS != err) |
+ if (SL_RESULT_SUCCESS != err) { |
+ DLOG(ERROR) << "GetInterface(SL_IID_BUFFERQUEUE): " << err; |
return false; |
+ } |
// Register the input callback for the simple buffer queue. |
// This callback will be called when the soundcard needs data. |
err = (*simple_buffer_queue_)->RegisterCallback(simple_buffer_queue_, |
SimpleBufferQueueCallback, |
this); |
- DCHECK_EQ(SL_RESULT_SUCCESS, err); |
+ if (SL_RESULT_SUCCESS != err) { |
+ DLOG(ERROR) << "AudioPlayer RegisterCallback: " << err; |
+ return false; |
+ } |
- return (SL_RESULT_SUCCESS == err); |
+ return true; |
} |
void OpenSLESOutputStream::SimpleBufferQueueCallback( |