summaryrefslogtreecommitdiffstats
path: root/media/libavextensions/mediaplayerservice/AVNuUtils.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'media/libavextensions/mediaplayerservice/AVNuUtils.cpp')
-rw-r--r--media/libavextensions/mediaplayerservice/AVNuUtils.cpp53
1 files changed, 24 insertions, 29 deletions
diff --git a/media/libavextensions/mediaplayerservice/AVNuUtils.cpp b/media/libavextensions/mediaplayerservice/AVNuUtils.cpp
index c475fd3..3354d23 100644
--- a/media/libavextensions/mediaplayerservice/AVNuUtils.cpp
+++ b/media/libavextensions/mediaplayerservice/AVNuUtils.cpp
@@ -138,7 +138,11 @@ bool AVNuUtils::pcmOffloadException(const sp<MetaData> &meta) {
ALOGV("%s: no audio mime present, ignoring pcm offload", __func__);
return true;
}
-//#if defined (PCM_OFFLOAD_ENABLED) || defined (PCM_OFFLOAD_ENABLED_24)
+
+ if (!is24bitPCMOffloadEnabled() && !is16bitPCMOffloadEnabled()) {
+ return true;
+ }
+
const char * const ExceptionTable[] = {
MEDIA_MIMETYPE_AUDIO_AMR_NB,
MEDIA_MIMETYPE_AUDIO_AMR_WB,
@@ -257,7 +261,10 @@ status_t AVNuUtils::convertToSinkFormatIfNeeded(
audio_format_t sinkFormat, bool isOffload) {
audio_format_t srcFormat = AUDIO_FORMAT_INVALID;
- if (!buffer->meta()->findInt32("pcm-format", (int32_t *)&srcFormat)) {
+ if (!isOffload
+ || !audio_is_offload_pcm(sinkFormat)
+ || !buffer->meta()->findInt32("pcm-format", (int32_t *)&srcFormat)
+ || ((int32_t)srcFormat < 0)) {
newBuffer = buffer;
return OK;
}
@@ -280,37 +287,25 @@ status_t AVNuUtils::convertToSinkFormatIfNeeded(
buffer->size(), frames, srcFormat);
audio_format_t dstFormat;
- if (isOffload) {
- switch (sinkFormat) {
- case AUDIO_FORMAT_PCM_16_BIT_OFFLOAD:
- dstFormat = AUDIO_FORMAT_PCM_16_BIT;
- break;
- case AUDIO_FORMAT_PCM_24_BIT_OFFLOAD:
- if (srcFormat != AUDIO_FORMAT_PCM_24_BIT_PACKED &&
- srcFormat != AUDIO_FORMAT_PCM_8_24_BIT) {
- ALOGE("Invalid src format for 24 bit conversion");
- return INVALID_OPERATION;
- }
+ switch (sinkFormat) {
+ case AUDIO_FORMAT_PCM_16_BIT_OFFLOAD:
+ dstFormat = AUDIO_FORMAT_PCM_16_BIT;
+ break;
+ case AUDIO_FORMAT_PCM_24_BIT_OFFLOAD:
+ if (srcFormat == AUDIO_FORMAT_PCM_32_BIT)
+ dstFormat = AUDIO_FORMAT_PCM_32_BIT;
+ else
dstFormat = AUDIO_FORMAT_PCM_24_BIT_OFFLOAD;
- break;
- case AUDIO_FORMAT_DEFAULT:
- ALOGI("OffloadInfo not yet initialized, retry");
- return NO_INIT;
- default:
- ALOGE("Invalid offload format %x given for conversion",
- sinkFormat);
- return INVALID_OPERATION;
- }
- } else {
- if (sinkFormat == AUDIO_FORMAT_INVALID) {
- ALOGD("PCM Info not yet initialized, drop buffer");
+ break;
+ case AUDIO_FORMAT_DEFAULT:
+ ALOGI("OffloadInfo not yet initialized, retry");
+ return NO_INIT;
+ default:
+ ALOGE("Invalid offload format %x given for conversion",
+ sinkFormat);
return INVALID_OPERATION;
- }
-
- dstFormat = sinkFormat;
}
if (srcFormat == dstFormat) {
- ALOGV("same format");
newBuffer = buffer;
return OK;
}