Skip to content

Commit f8c3c68

Browse files
committed
Merge tag 'android-6.0.1_r24' into HEAD
Android 6.0.1 release 24 Change-Id: Ib8e0def00cdbb1e163d8b088a6206c8509c67ea1
2 parents 81a5e4f + 8696728 commit f8c3c68

10 files changed

Lines changed: 91 additions & 43 deletions

File tree

include/media/mediametadataretriever.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ class MediaMetadataRetriever: public RefBase
8282
const char* extractMetadata(int keyCode);
8383

8484
private:
85-
static const sp<IMediaPlayerService>& getService();
85+
static const sp<IMediaPlayerService> getService();
8686

8787
class DeathNotifier: public IBinder::DeathRecipient
8888
{

media/libmedia/IDrm.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -658,7 +658,7 @@ status_t BnDrm::onTransact(
658658

659659
Vector<uint8_t> request;
660660
String8 defaultUrl;
661-
DrmPlugin::KeyRequestType keyRequestType;
661+
DrmPlugin::KeyRequestType keyRequestType = DrmPlugin::kKeyRequestType_Unknown;
662662

663663
status_t result = getKeyRequest(sessionId, initData, mimeType,
664664
keyType, optionalParameters, request, defaultUrl,

media/libmedia/IOMX.cpp

Lines changed: 49 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -447,7 +447,7 @@ class BpOMX : public BpInterface<IOMX> {
447447
remote()->transact(CONFIGURE_VIDEO_TUNNEL_MODE, data, &reply);
448448

449449
status_t err = reply.readInt32();
450-
if (sidebandHandle) {
450+
if (err == OK && sidebandHandle) {
451451
*sidebandHandle = (native_handle_t *)reply.readNativeHandle();
452452
}
453453
return err;
@@ -694,34 +694,39 @@ status_t BnOMX::onTransact(
694694

695695
size_t size = data.readInt64();
696696

697-
void *params = malloc(size);
698-
data.read(params, size);
699-
700-
status_t err;
701-
switch (code) {
702-
case GET_PARAMETER:
703-
err = getParameter(node, index, params, size);
704-
break;
705-
case SET_PARAMETER:
706-
err = setParameter(node, index, params, size);
707-
break;
708-
case GET_CONFIG:
709-
err = getConfig(node, index, params, size);
710-
break;
711-
case SET_CONFIG:
712-
err = setConfig(node, index, params, size);
713-
break;
714-
case SET_INTERNAL_OPTION:
715-
{
716-
InternalOptionType type =
717-
(InternalOptionType)data.readInt32();
718-
719-
err = setInternalOption(node, index, type, params, size);
720-
break;
697+
status_t err = NO_MEMORY;
698+
void *params = calloc(size, 1);
699+
if (params) {
700+
err = data.read(params, size);
701+
if (err != OK) {
702+
android_errorWriteLog(0x534e4554, "26914474");
703+
} else {
704+
switch (code) {
705+
case GET_PARAMETER:
706+
err = getParameter(node, index, params, size);
707+
break;
708+
case SET_PARAMETER:
709+
err = setParameter(node, index, params, size);
710+
break;
711+
case GET_CONFIG:
712+
err = getConfig(node, index, params, size);
713+
break;
714+
case SET_CONFIG:
715+
err = setConfig(node, index, params, size);
716+
break;
717+
case SET_INTERNAL_OPTION:
718+
{
719+
InternalOptionType type =
720+
(InternalOptionType)data.readInt32();
721+
722+
err = setInternalOption(node, index, type, params, size);
723+
break;
724+
}
725+
726+
default:
727+
TRESPASS();
728+
}
721729
}
722-
723-
default:
724-
TRESPASS();
725730
}
726731

727732
reply->writeInt32(err);
@@ -846,9 +851,13 @@ status_t BnOMX::onTransact(
846851
OMX_U32 port_index = data.readInt32();
847852

848853
sp<IGraphicBufferProducer> bufferProducer;
849-
MetadataBufferType type;
854+
MetadataBufferType type = kMetadataBufferTypeInvalid;
850855
status_t err = createInputSurface(node, port_index, &bufferProducer, &type);
851856

857+
if ((err != OK) && (type == kMetadataBufferTypeInvalid)) {
858+
android_errorWriteLog(0x534e4554, "26324358");
859+
}
860+
852861
reply->writeInt32(type);
853862
reply->writeInt32(err);
854863

@@ -888,9 +897,13 @@ status_t BnOMX::onTransact(
888897
sp<IGraphicBufferConsumer> bufferConsumer =
889898
interface_cast<IGraphicBufferConsumer>(data.readStrongBinder());
890899

891-
MetadataBufferType type;
900+
MetadataBufferType type = kMetadataBufferTypeInvalid;
892901
status_t err = setInputSurface(node, port_index, bufferConsumer, &type);
893902

903+
if ((err != OK) && (type == kMetadataBufferTypeInvalid)) {
904+
android_errorWriteLog(0x534e4554, "26324358");
905+
}
906+
894907
reply->writeInt32(type);
895908
reply->writeInt32(err);
896909
return NO_ERROR;
@@ -916,8 +929,9 @@ status_t BnOMX::onTransact(
916929
OMX_U32 port_index = data.readInt32();
917930
OMX_BOOL enable = (OMX_BOOL)data.readInt32();
918931

919-
MetadataBufferType type;
932+
MetadataBufferType type = kMetadataBufferTypeInvalid;
920933
status_t err = storeMetaDataInBuffers(node, port_index, enable, &type);
934+
921935
reply->writeInt32(type);
922936
reply->writeInt32(err);
923937

@@ -950,11 +964,13 @@ status_t BnOMX::onTransact(
950964
OMX_BOOL tunneled = (OMX_BOOL)data.readInt32();
951965
OMX_U32 audio_hw_sync = data.readInt32();
952966

953-
native_handle_t *sideband_handle;
967+
native_handle_t *sideband_handle = NULL;
954968
status_t err = configureVideoTunnelMode(
955969
node, port_index, tunneled, audio_hw_sync, &sideband_handle);
956970
reply->writeInt32(err);
957-
reply->writeNativeHandle(sideband_handle);
971+
if(err == OK){
972+
reply->writeNativeHandle(sideband_handle);
973+
}
958974

959975
return NO_ERROR;
960976
}

media/libmedia/mediametadataretriever.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ Mutex MediaMetadataRetriever::sServiceLock;
3535
sp<IMediaPlayerService> MediaMetadataRetriever::sService;
3636
sp<MediaMetadataRetriever::DeathNotifier> MediaMetadataRetriever::sDeathNotifier;
3737

38-
const sp<IMediaPlayerService>& MediaMetadataRetriever::getService()
38+
const sp<IMediaPlayerService> MediaMetadataRetriever::getService()
3939
{
4040
Mutex::Autolock lock(sServiceLock);
4141
if (sService == 0) {
@@ -62,7 +62,7 @@ const sp<IMediaPlayerService>& MediaMetadataRetriever::getService()
6262
MediaMetadataRetriever::MediaMetadataRetriever()
6363
{
6464
ALOGV("constructor");
65-
const sp<IMediaPlayerService>& service(getService());
65+
const sp<IMediaPlayerService> service(getService());
6666
if (service == 0) {
6767
ALOGE("failed to obtain MediaMetadataRetrieverService");
6868
return;

media/libmediaplayerservice/MediaPlayerService.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1970,8 +1970,13 @@ void MediaPlayerService::AudioOutput::pause()
19701970
void MediaPlayerService::AudioOutput::close()
19711971
{
19721972
ALOGV("close");
1973-
Mutex::Autolock lock(mLock);
1974-
close_l();
1973+
sp<AudioTrack> track;
1974+
{
1975+
Mutex::Autolock lock(mLock);
1976+
track = mTrack;
1977+
close_l(); // clears mTrack
1978+
}
1979+
// destruction of the track occurs outside of mutex.
19751980
}
19761981

19771982
void MediaPlayerService::AudioOutput::setVolume(float left, float right)

media/libstagefright/MPEG4Extractor.cpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4450,7 +4450,15 @@ status_t MPEG4Source::read(
44504450
continue;
44514451
}
44524452

4453-
CHECK(dstOffset + 4 <= mBuffer->size());
4453+
if (dstOffset > SIZE_MAX - 4 ||
4454+
dstOffset + 4 > SIZE_MAX - nalLength ||
4455+
dstOffset + 4 + nalLength > mBuffer->size()) {
4456+
ALOGE("b/27208621 : %zu %zu", dstOffset, mBuffer->size());
4457+
android_errorWriteLog(0x534e4554, "27208621");
4458+
mBuffer->release();
4459+
mBuffer = NULL;
4460+
return ERROR_MALFORMED;
4461+
}
44544462

44554463
dstData[dstOffset++] = 0;
44564464
dstData[dstOffset++] = 0;

media/libstagefright/omx/OMXNodeInstance.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -524,6 +524,7 @@ status_t OMXNodeInstance::storeMetaDataInBuffers(
524524
status_t OMXNodeInstance::storeMetaDataInBuffers_l(
525525
OMX_U32 portIndex, OMX_BOOL enable, MetadataBufferType *type) {
526526
if (portIndex != kPortIndexInput && portIndex != kPortIndexOutput) {
527+
android_errorWriteLog(0x534e4554, "26324358");
527528
return BAD_VALUE;
528529
}
529530

services/audioflinger/Threads.cpp

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1641,6 +1641,7 @@ void AudioFlinger::PlaybackThread::dumpInternals(int fd, const Vector<String16>&
16411641
dprintf(fd, " Mixer buffer: %p\n", mMixerBuffer);
16421642
dprintf(fd, " Effect buffer: %p\n", mEffectBuffer);
16431643
dprintf(fd, " Fast track availMask=%#x\n", mFastTrackAvailMask);
1644+
dprintf(fd, " Standby delay ns=%lld\n", (long long)mStandbyDelayNs);
16441645
AudioStreamOut *output = mOutput;
16451646
audio_output_flags_t flags = output != NULL ? output->flags : AUDIO_OUTPUT_FLAG_NONE;
16461647
String8 flagsAsString = outputFlagsToString(flags);
@@ -2560,7 +2561,8 @@ The derived values that are cached:
25602561
- mSinkBufferSize from frame count * frame size
25612562
- mActiveSleepTimeUs from activeSleepTimeUs()
25622563
- mIdleSleepTimeUs from idleSleepTimeUs()
2563-
- mStandbyDelayNs from mActiveSleepTimeUs (DIRECT only)
2564+
- mStandbyDelayNs from mActiveSleepTimeUs (DIRECT only) or forced to at least
2565+
kDefaultStandbyTimeInNsecs when connected to an A2DP device.
25642566
- maxPeriod from frame count and sample rate (MIXER only)
25652567
25662568
The parameters that affect these derived values are:
@@ -2579,6 +2581,15 @@ void AudioFlinger::PlaybackThread::cacheParameters_l()
25792581
mSinkBufferSize = mNormalFrameCount * mFrameSize;
25802582
mActiveSleepTimeUs = activeSleepTimeUs();
25812583
mIdleSleepTimeUs = idleSleepTimeUs();
2584+
2585+
// make sure standby delay is not too short when connected to an A2DP sink to avoid
2586+
// truncating audio when going to standby.
2587+
mStandbyDelayNs = AudioFlinger::mStandbyTimeInNsecs;
2588+
if ((mOutDevice & AUDIO_DEVICE_OUT_ALL_A2DP) != 0) {
2589+
if (mStandbyDelayNs < kDefaultStandbyTimeInNsecs) {
2590+
mStandbyDelayNs = kDefaultStandbyTimeInNsecs;
2591+
}
2592+
}
25822593
}
25832594

25842595
void AudioFlinger::PlaybackThread::invalidateTracks(audio_stream_type_t streamType)
@@ -4367,6 +4378,7 @@ bool AudioFlinger::MixerThread::checkForNewParameter_l(const String8& keyValuePa
43674378
status_t& status)
43684379
{
43694380
bool reconfig = false;
4381+
bool a2dpDeviceChanged = false;
43704382

43714383
status = NO_ERROR;
43724384

@@ -4446,6 +4458,8 @@ bool AudioFlinger::MixerThread::checkForNewParameter_l(const String8& keyValuePa
44464458
// forward device change to effects that have requested to be
44474459
// aware of attached audio device.
44484460
if (value != AUDIO_DEVICE_NONE) {
4461+
a2dpDeviceChanged =
4462+
(mOutDevice & AUDIO_DEVICE_OUT_ALL_A2DP) != (value & AUDIO_DEVICE_OUT_ALL_A2DP);
44494463
mOutDevice = value;
44504464
for (size_t i = 0; i < mEffectChains.size(); i++) {
44514465
mEffectChains[i]->setDevice_l(mOutDevice);
@@ -4489,7 +4503,7 @@ bool AudioFlinger::MixerThread::checkForNewParameter_l(const String8& keyValuePa
44894503
sq->push(FastMixerStateQueue::BLOCK_UNTIL_PUSHED);
44904504
}
44914505

4492-
return reconfig;
4506+
return reconfig || a2dpDeviceChanged;
44934507
}
44944508

44954509

@@ -4929,6 +4943,7 @@ bool AudioFlinger::DirectOutputThread::checkForNewParameter_l(const String8& key
49294943
status_t& status)
49304944
{
49314945
bool reconfig = false;
4946+
bool a2dpDeviceChanged = false;
49324947

49334948
status = NO_ERROR;
49344949

@@ -4939,6 +4954,8 @@ bool AudioFlinger::DirectOutputThread::checkForNewParameter_l(const String8& key
49394954
// forward device change to effects that have requested to be
49404955
// aware of attached audio device.
49414956
if (value != AUDIO_DEVICE_NONE) {
4957+
a2dpDeviceChanged =
4958+
(mOutDevice & AUDIO_DEVICE_OUT_ALL_A2DP) != (value & AUDIO_DEVICE_OUT_ALL_A2DP);
49424959
mOutDevice = value;
49434960
for (size_t i = 0; i < mEffectChains.size(); i++) {
49444961
mEffectChains[i]->setDevice_l(mOutDevice);
@@ -4971,7 +4988,7 @@ bool AudioFlinger::DirectOutputThread::checkForNewParameter_l(const String8& key
49714988
}
49724989
}
49734990

4974-
return reconfig;
4991+
return reconfig || a2dpDeviceChanged;
49754992
}
49764993

49774994
uint32_t AudioFlinger::DirectOutputThread::activeSleepTimeUs() const

services/camera/libcameraservice/CameraService.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@ void CameraService::onFirstRef()
153153
ALOGE("Could not load camera HAL module: %d (%s)", err, strerror(-err));
154154
logServiceError("Could not load camera HAL module", err);
155155
mNumberOfCameras = 0;
156+
mNumberOfNormalCameras = 0;
156157
return;
157158
}
158159

0 commit comments

Comments
 (0)