Skip to content

Commit 05e8074

Browse files
theandi666Android (Google) Code Review
authored andcommitted
Merge "Add new APIs AMessage::(set|find)Buffer to make it safer to pass"
2 parents 812c623 + 5c85039 commit 05e8074

22 files changed

+81
-83
lines changed

cmds/stagefright/SimplePlayer.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -324,9 +324,8 @@ status_t SimplePlayer::onPrepare() {
324324
CHECK_EQ(err, (status_t)OK);
325325

326326
size_t j = 0;
327-
sp<RefBase> obj;
328-
while (format->findObject(StringPrintf("csd-%d", j).c_str(), &obj)) {
329-
sp<ABuffer> buffer = static_cast<ABuffer *>(obj.get());
327+
sp<ABuffer> buffer;
328+
while (format->findBuffer(StringPrintf("csd-%d", j).c_str(), &buffer)) {
330329
state->mCSD.push_back(buffer);
331330

332331
++j;

include/media/stagefright/foundation/AMessage.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525

2626
namespace android {
2727

28+
struct ABuffer;
2829
struct AString;
2930
struct Parcel;
3031

@@ -50,6 +51,7 @@ struct AMessage : public RefBase {
5051
void setPointer(const char *name, void *value);
5152
void setString(const char *name, const char *s, ssize_t len = -1);
5253
void setObject(const char *name, const sp<RefBase> &obj);
54+
void setBuffer(const char *name, const sp<ABuffer> &buffer);
5355
void setMessage(const char *name, const sp<AMessage> &obj);
5456

5557
void setRect(
@@ -64,6 +66,7 @@ struct AMessage : public RefBase {
6466
bool findPointer(const char *name, void **value) const;
6567
bool findString(const char *name, AString *value) const;
6668
bool findObject(const char *name, sp<RefBase> *obj) const;
69+
bool findBuffer(const char *name, sp<ABuffer> *buffer) const;
6770
bool findMessage(const char *name, sp<AMessage> *obj) const;
6871

6972
bool findRect(
@@ -101,6 +104,7 @@ struct AMessage : public RefBase {
101104
kTypeObject,
102105
kTypeMessage,
103106
kTypeRect,
107+
kTypeBuffer,
104108
};
105109

106110
size_t countEntries() const;
@@ -143,6 +147,9 @@ struct AMessage : public RefBase {
143147
void freeItem(Item *item);
144148
const Item *findItem(const char *name, Type type) const;
145149

150+
void setObjectInternal(
151+
const char *name, const sp<RefBase> &obj, Type type);
152+
146153
DISALLOW_EVIL_CONSTRUCTORS(AMessage);
147154
};
148155

media/jni/android_media_Utils.cpp

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -176,13 +176,10 @@ status_t ConvertMessageToMap(
176176
break;
177177
}
178178

179-
case AMessage::kTypeObject:
179+
case AMessage::kTypeBuffer:
180180
{
181-
sp<RefBase> obj;
182-
CHECK(msg->findObject(key, &obj));
183-
184-
// XXX dangerous, object is not guaranteed to be a buffer.
185-
sp<ABuffer> buffer = static_cast<ABuffer *>(obj.get());
181+
sp<ABuffer> buffer;
182+
CHECK(msg->findBuffer(key, &buffer));
186183

187184
valueObj = makeByteBufferObject(
188185
env, buffer->data(), buffer->size());

media/libmediaplayerservice/nuplayer/NuPlayer.cpp

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -768,7 +768,7 @@ status_t NuPlayer::feedDecoderInputData(bool audio, const sp<AMessage> &msg) {
768768
mediaTimeUs / 1E6);
769769
#endif
770770

771-
reply->setObject("buffer", accessUnit);
771+
reply->setBuffer("buffer", accessUnit);
772772
reply->post();
773773

774774
return OK;
@@ -793,10 +793,8 @@ void NuPlayer::renderBuffer(bool audio, const sp<AMessage> &msg) {
793793
return;
794794
}
795795

796-
sp<RefBase> obj;
797-
CHECK(msg->findObject("buffer", &obj));
798-
799-
sp<ABuffer> buffer = static_cast<ABuffer *>(obj.get());
796+
sp<ABuffer> buffer;
797+
CHECK(msg->findBuffer("buffer", &buffer));
800798

801799
int64_t &skipUntilMediaTimeUs =
802800
audio

media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -214,8 +214,6 @@ sp<AMessage> NuPlayer::Decoder::makeFormat(const sp<MetaData> &meta) {
214214

215215
buffer->meta()->setInt32("csd", true);
216216
mCSD.push(buffer);
217-
218-
msg->setObject("csd", buffer);
219217
} else if (meta->findData(kKeyESDS, &type, &data, &size)) {
220218
ESDS esds((const char *)data, size);
221219
CHECK_EQ(esds.InitCheck(), (status_t)OK);
@@ -242,9 +240,8 @@ void NuPlayer::Decoder::onFillThisBuffer(const sp<AMessage> &msg) {
242240
CHECK(msg->findMessage("reply", &reply));
243241

244242
#if 0
245-
sp<RefBase> obj;
246-
CHECK(msg->findObject("buffer", &obj));
247-
sp<ABuffer> outBuffer = static_cast<ABuffer *>(obj.get());
243+
sp<ABuffer> outBuffer;
244+
CHECK(msg->findBuffer("buffer", &outBuffer));
248245
#else
249246
sp<ABuffer> outBuffer;
250247
#endif
@@ -253,7 +250,7 @@ void NuPlayer::Decoder::onFillThisBuffer(const sp<AMessage> &msg) {
253250
outBuffer = mCSD.editItemAt(mCSDIndex++);
254251
outBuffer->meta()->setInt64("timeUs", 0);
255252

256-
reply->setObject("buffer", outBuffer);
253+
reply->setBuffer("buffer", outBuffer);
257254
reply->post();
258255
return;
259256
}

media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ void NuPlayer::Renderer::queueBuffer(
6060
const sp<AMessage> &notifyConsumed) {
6161
sp<AMessage> msg = new AMessage(kWhatQueueBuffer, id());
6262
msg->setInt32("audio", static_cast<int32_t>(audio));
63-
msg->setObject("buffer", buffer);
63+
msg->setBuffer("buffer", buffer);
6464
msg->setMessage("notifyConsumed", notifyConsumed);
6565
msg->post();
6666
}
@@ -411,9 +411,8 @@ void NuPlayer::Renderer::onQueueBuffer(const sp<AMessage> &msg) {
411411
return;
412412
}
413413

414-
sp<RefBase> obj;
415-
CHECK(msg->findObject("buffer", &obj));
416-
sp<ABuffer> buffer = static_cast<ABuffer *>(obj.get());
414+
sp<ABuffer> buffer;
415+
CHECK(msg->findBuffer("buffer", &buffer));
417416

418417
sp<AMessage> notifyConsumed;
419418
CHECK(msg->findMessage("notifyConsumed", &notifyConsumed));

media/libmediaplayerservice/nuplayer/RTSPSource.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -218,10 +218,8 @@ void NuPlayer::RTSPSource::onMessageReceived(const sp<AMessage> &msg) {
218218
CHECK(msg->findSize("trackIndex", &trackIndex));
219219
CHECK_LT(trackIndex, mTracks.size());
220220

221-
sp<RefBase> obj;
222-
CHECK(msg->findObject("accessUnit", &obj));
223-
224-
sp<ABuffer> accessUnit = static_cast<ABuffer *>(obj.get());
221+
sp<ABuffer> accessUnit;
222+
CHECK(msg->findBuffer("accessUnit", &accessUnit));
225223

226224
int32_t damaged;
227225
if (accessUnit->meta()->findInt32("damaged", &damaged)

media/libstagefright/ACodec.cpp

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -446,7 +446,7 @@ status_t ACodec::allocateBuffersOnPort(OMX_U32 portIndex) {
446446
notify->setPointer(name.c_str(), mBuffers[portIndex][i].mBufferID);
447447

448448
name = StringPrintf("data_%d", i);
449-
notify->setObject(name.c_str(), mBuffers[portIndex][i].mData);
449+
notify->setBuffer(name.c_str(), mBuffers[portIndex][i].mData);
450450
}
451451

452452
notify->post();
@@ -2142,7 +2142,7 @@ void ACodec::BaseState::postFillThisBuffer(BufferInfo *info) {
21422142
notify->setPointer("buffer-id", info->mBufferID);
21432143

21442144
info->mData->meta()->clear();
2145-
notify->setObject("buffer", info->mData);
2145+
notify->setBuffer("buffer", info->mData);
21462146

21472147
sp<AMessage> reply = new AMessage(kWhatInputBufferFilled, mCodec->id());
21482148
reply->setPointer("buffer-id", info->mBufferID);
@@ -2158,23 +2158,21 @@ void ACodec::BaseState::onInputBufferFilled(const sp<AMessage> &msg) {
21582158
IOMX::buffer_id bufferID;
21592159
CHECK(msg->findPointer("buffer-id", &bufferID));
21602160

2161-
sp<RefBase> obj;
2161+
sp<ABuffer> buffer;
21622162
int32_t err = OK;
21632163
bool eos = false;
21642164

2165-
if (!msg->findObject("buffer", &obj)) {
2165+
if (!msg->findBuffer("buffer", &buffer)) {
21662166
CHECK(msg->findInt32("err", &err));
21672167

21682168
ALOGV("[%s] saw error %d instead of an input buffer",
21692169
mCodec->mComponentName.c_str(), err);
21702170

2171-
obj.clear();
2171+
buffer.clear();
21722172

21732173
eos = true;
21742174
}
21752175

2176-
sp<ABuffer> buffer = static_cast<ABuffer *>(obj.get());
2177-
21782176
int32_t tmp;
21792177
if (buffer != NULL && buffer->meta()->findInt32("eos", &tmp) && tmp) {
21802178
eos = true;
@@ -2374,7 +2372,7 @@ bool ACodec::BaseState::onOMXFillBufferDone(
23742372
sp<AMessage> notify = mCodec->mNotify->dup();
23752373
notify->setInt32("what", ACodec::kWhatDrainThisBuffer);
23762374
notify->setPointer("buffer-id", info->mBufferID);
2377-
notify->setObject("buffer", info->mData);
2375+
notify->setBuffer("buffer", info->mData);
23782376
notify->setInt32("flags", flags);
23792377

23802378
sp<AMessage> reply =

media/libstagefright/MPEG2TSWriter.cpp

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,7 @@ void MPEG2TSWriter::SourceInfo::extractCodecSpecificData() {
244244

245245
sp<AMessage> notify = mNotify->dup();
246246
notify->setInt32("what", kNotifyBuffer);
247-
notify->setObject("buffer", out);
247+
notify->setBuffer("buffer", out);
248248
notify->setInt32("oob", true);
249249
notify->post();
250250
}
@@ -270,7 +270,7 @@ void MPEG2TSWriter::SourceInfo::postAVCFrame(MediaBuffer *buffer) {
270270
copy->meta()->setInt32("isSync", true);
271271
}
272272

273-
notify->setObject("buffer", copy);
273+
notify->setBuffer("buffer", copy);
274274
notify->post();
275275
}
276276

@@ -351,7 +351,7 @@ bool MPEG2TSWriter::SourceInfo::flushAACFrames() {
351351

352352
sp<AMessage> notify = mNotify->dup();
353353
notify->setInt32("what", kNotifyBuffer);
354-
notify->setObject("buffer", mAACBuffer);
354+
notify->setBuffer("buffer", mAACBuffer);
355355
notify->post();
356356

357357
mAACBuffer.clear();
@@ -614,10 +614,8 @@ void MPEG2TSWriter::onMessageReceived(const sp<AMessage> &msg) {
614614

615615
++mNumSourcesDone;
616616
} else if (what == SourceInfo::kNotifyBuffer) {
617-
sp<RefBase> obj;
618-
CHECK(msg->findObject("buffer", &obj));
619-
620-
sp<ABuffer> buffer = static_cast<ABuffer *>(obj.get());
617+
sp<ABuffer> buffer;
618+
CHECK(msg->findBuffer("buffer", &buffer));
621619

622620
int32_t oob;
623621
if (msg->findInt32("oob", &oob) && oob) {

media/libstagefright/MediaCodec.cpp

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -515,13 +515,10 @@ void MediaCodec::onMessageReceived(const sp<AMessage> &msg) {
515515

516516
name = StringPrintf("data_%d", i);
517517

518-
sp<RefBase> obj;
519-
CHECK(msg->findObject(name.c_str(), &obj));
520-
521518
BufferInfo info;
522519
info.mBufferID = bufferID;
523-
info.mData = static_cast<ABuffer *>(obj.get());
524520
info.mOwnedByClient = false;
521+
CHECK(msg->findBuffer(name.c_str(), &info.mData));
525522

526523
buffers->push_back(info);
527524
}
@@ -604,10 +601,8 @@ void MediaCodec::onMessageReceived(const sp<AMessage> &msg) {
604601
break;
605602
}
606603

607-
sp<RefBase> obj;
608-
CHECK(msg->findObject("buffer", &obj));
609-
610-
sp<ABuffer> buffer = static_cast<ABuffer *>(obj.get());
604+
sp<ABuffer> buffer;
605+
CHECK(msg->findBuffer("buffer", &buffer));
611606

612607
int32_t omxFlags;
613608
CHECK(msg->findInt32("flags", &omxFlags));
@@ -1118,7 +1113,7 @@ status_t MediaCodec::onQueueInputBuffer(const sp<AMessage> &msg) {
11181113
info->mData->meta()->setInt32("csd", true);
11191114
}
11201115

1121-
reply->setObject("buffer", info->mData);
1116+
reply->setBuffer("buffer", info->mData);
11221117
reply->post();
11231118

11241119
return OK;

0 commit comments

Comments
 (0)