Merge "Expand mediaextractor dumpsys" into nyc-dev
diff --git a/media/libstagefright/codecs/aacdec/SoftAAC2.cpp b/media/libstagefright/codecs/aacdec/SoftAAC2.cpp
index 1fc5995..e88dfa8 100644
--- a/media/libstagefright/codecs/aacdec/SoftAAC2.cpp
+++ b/media/libstagefright/codecs/aacdec/SoftAAC2.cpp
@@ -198,6 +198,10 @@
mDrcWrap.setParam(DRC_PRES_MODE_WRAP_ENCODER_TARGET, DRC_DEFAULT_MOBILE_ENC_LEVEL);
}
+ // By default, the decoder creates a 5.1 channel downmix signal.
+ // For seven and eight channel input streams, enable 6.1 and 7.1 channel output
+ aacDecoder_SetParam(mAACDecoder, AAC_PCM_MAX_OUTPUT_CHANNELS, -1);
+
return status;
}
@@ -341,7 +345,7 @@
// for the following parameters of the OMX_AUDIO_PARAM_AACPROFILETYPE structure,
// a value of -1 implies the parameter is not set by the application:
- // nMaxOutputChannels uses default platform properties, see configureDownmix()
+ // nMaxOutputChannels -1 by default
// nDrcCut uses default platform properties, see initDecoder()
// nDrcBoost idem
// nHeavyCompression idem
@@ -425,18 +429,6 @@
return mInputBufferCount > 0;
}
-void SoftAAC2::configureDownmix() const {
- char value[PROPERTY_VALUE_MAX];
- if (!(property_get("media.aac_51_output_enabled", value, NULL)
- && (!strcmp(value, "1") || !strcasecmp(value, "true")))) {
- ALOGI("limiting to stereo output");
- aacDecoder_SetParam(mAACDecoder, AAC_PCM_MAX_OUTPUT_CHANNELS, 2);
- // By default, the decoder creates a 5.1 channel downmix signal
- // for seven and eight channel input streams. To enable 6.1 and 7.1 channel output
- // use aacDecoder_SetParam(mAACDecoder, AAC_PCM_MAX_OUTPUT_CHANNELS, -1)
- }
-}
-
bool SoftAAC2::outputDelayRingBufferPutSamples(INT_PCM *samples, int32_t numSamples) {
if (numSamples == 0) {
return true;
@@ -571,7 +563,6 @@
notifyEmptyBufferDone(inHeader);
inHeader = NULL;
- configureDownmix();
// Only send out port settings changed event if both sample rate
// and numChannels are valid.
if (mStreamInfo->sampleRate && mStreamInfo->numChannels) {
diff --git a/media/libstagefright/codecs/aacdec/SoftAAC2.h b/media/libstagefright/codecs/aacdec/SoftAAC2.h
index c3e4459..a1cf285 100644
--- a/media/libstagefright/codecs/aacdec/SoftAAC2.h
+++ b/media/libstagefright/codecs/aacdec/SoftAAC2.h
@@ -74,7 +74,6 @@
void initPorts();
status_t initDecoder();
bool isConfigured() const;
- void configureDownmix() const;
void drainDecoder();
// delay compensation
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp
index e5c7177..208dc8b 100644
--- a/services/audioflinger/AudioFlinger.cpp
+++ b/services/audioflinger/AudioFlinger.cpp
@@ -2258,6 +2258,12 @@
audio_unique_id_t AudioFlinger::newAudioUniqueId(audio_unique_id_use_t use)
{
+ // This is a binder API, so a malicious client could pass in a bad parameter.
+ // Check for that before calling the internal API nextUniqueId().
+ if ((unsigned) use >= (unsigned) AUDIO_UNIQUE_ID_USE_MAX) {
+ ALOGE("newAudioUniqueId invalid use %d", use);
+ return AUDIO_UNIQUE_ID_ALLOCATE;
+ }
return nextUniqueId(use);
}
@@ -2421,6 +2427,7 @@
int32_t base = android_atomic_add(AUDIO_UNIQUE_ID_USE_MAX, &mNextUniqueId);
// We have no way of recovering from wraparound
LOG_ALWAYS_FATAL_IF(base == 0, "unique ID overflow");
+ // This is the internal API, so it is OK to assert on bad parameter.
LOG_ALWAYS_FATAL_IF((unsigned) use >= (unsigned) AUDIO_UNIQUE_ID_USE_MAX);
ALOG_ASSERT(audio_unique_id_get_use(base) == AUDIO_UNIQUE_ID_USE_UNSPECIFIED);
return (audio_unique_id_t) (base | use);
diff --git a/services/audioflinger/AudioFlinger.h b/services/audioflinger/AudioFlinger.h
index f11fd1c..498c33e 100644
--- a/services/audioflinger/AudioFlinger.h
+++ b/services/audioflinger/AudioFlinger.h
@@ -196,6 +196,7 @@
virtual uint32_t getInputFramesLost(audio_io_handle_t ioHandle) const;
+ // This is the binder API. For the internal API see nextUniqueId().
virtual audio_unique_id_t newAudioUniqueId(audio_unique_id_use_t use);
virtual void acquireAudioSessionId(audio_session_t audioSession, pid_t pid);
@@ -559,6 +560,7 @@
// or from positive to negative (for signed IDs).
// Thus it may fail by returning an ID of the wrong sign,
// or by returning a non-unique ID.
+ // This is the internal API. For the binder API see newAudioUniqueId().
audio_unique_id_t nextUniqueId(audio_unique_id_use_t use);
status_t moveEffectChain_l(audio_session_t sessionId,