diff options
-rw-r--r-- | media/libmedia/AudioTrack.cpp | 3 | ||||
-rw-r--r-- | services/audioflinger/AudioFlinger.cpp | 6 |
2 files changed, 4 insertions, 5 deletions
diff --git a/media/libmedia/AudioTrack.cpp b/media/libmedia/AudioTrack.cpp index 8daf08b..dc4f90e 100644 --- a/media/libmedia/AudioTrack.cpp +++ b/media/libmedia/AudioTrack.cpp @@ -1005,7 +1005,8 @@ status_t AudioTrack::createTrack_l(size_t epoch) sp<IAudioTrack> track = audioFlinger->createTrack(mStreamType, mSampleRate, // AudioFlinger only sees 16-bit PCM - mFormat == AUDIO_FORMAT_PCM_8_BIT ? + mFormat == AUDIO_FORMAT_PCM_8_BIT && + !(mFlags & AUDIO_OUTPUT_FLAG_DIRECT) ? AUDIO_FORMAT_PCM_16_BIT : mFormat, mChannelMask, &temp, diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp index 755d480..eb00c82 100644 --- a/services/audioflinger/AudioFlinger.cpp +++ b/services/audioflinger/AudioFlinger.cpp @@ -541,10 +541,8 @@ sp<IAudioTrack> AudioFlinger::createTrack( goto Exit; } - // client is responsible for conversion of 8-bit PCM to 16-bit PCM, - // and we don't yet support 8.24 or 32-bit PCM - if (!audio_is_valid_format(format) || - (audio_is_linear_pcm(format) && format != AUDIO_FORMAT_PCM_16_BIT)) { + // further format checks are performed by createTrack_l() depending on the thread type + if (!audio_is_valid_format(format)) { ALOGE("createTrack() invalid format %#x", format); lStatus = BAD_VALUE; goto Exit; |