Merge "MediaPlayer2: use protobuf instead of parcel in invoke()"

gugelfrei
Dongwon Kang 6 years ago committed by Android (Google) Code Review
commit dd6f1835aa

@ -56,6 +56,8 @@ cc_library {
static_libs: [
"libmedia_helper",
"libmediaplayer2-protos",
"libprotobuf-cpp-lite",
"libstagefright_nuplayer2",
"libstagefright_rtsp",
"libstagefright_timedtext",

@ -33,6 +33,10 @@
#include <media/stagefright/foundation/AHandler.h>
#include <mediaplayer2/MediaPlayer2Types.h>
#include "mediaplayer2.pb.h"
using android::media::MediaPlayer2Proto::PlayerMessage;
// Fwd decl to make sure everyone agrees that the scope of struct sockaddr_in is
// global, and not in android::
struct sockaddr_in;
@ -217,7 +221,7 @@ public:
// data sent by the java layer.
// @param[out] reply Parcel to hold the reply data. Cannot be null.
// @return OK if the call was successful.
virtual status_t invoke(const Parcel& request, Parcel *reply) = 0;
virtual status_t invoke(const PlayerMessage &request, PlayerMessage *reply) = 0;
// The Client in the MetadataPlayerService calls this method on
// the native player to retrieve all or a subset of metadata.

@ -90,7 +90,7 @@ public:
status_t setVolume(float leftVolume, float rightVolume);
void notify(int64_t srcId, int msg, int ext1, int ext2,
const Parcel *obj = NULL);
status_t invoke(const Parcel& request, Parcel *reply);
status_t invoke(const PlayerMessage &request, PlayerMessage *reply);
status_t setMetadataFilter(const Parcel& filter);
status_t getMetadata(bool update_only, bool apply_filter, Parcel *metadata);
status_t setAudioSessionId(audio_session_t sessionId);

@ -565,16 +565,15 @@ status_t MediaPlayer2::playNextDataSource(int64_t srcId) {
return mPlayer->playNextDataSource(srcId);
}
status_t MediaPlayer2::invoke(const Parcel& request, Parcel *reply) {
status_t MediaPlayer2::invoke(const PlayerMessage &request, PlayerMessage *reply) {
Mutex::Autolock _l(mLock);
const bool hasBeenInitialized =
(mCurrentState != MEDIA_PLAYER2_STATE_ERROR) &&
((mCurrentState & MEDIA_PLAYER2_IDLE) != MEDIA_PLAYER2_IDLE);
if ((mPlayer == NULL) || !hasBeenInitialized) {
ALOGE("invoke failed: wrong state %X, mPlayer(%p)", mCurrentState, mPlayer.get());
ALOGE("invoke() failed: wrong state %X, mPlayer(%p)", mCurrentState, mPlayer.get());
return INVALID_OPERATION;
}
ALOGV("invoke %zu", request.dataSize());
return mPlayer->invoke(request, reply);
}

@ -54,6 +54,7 @@ cc_library_static {
static_libs: [
"libmedia_helper",
"libmediaplayer2-protos",
],
name: "libstagefright_nuplayer2",

@ -584,9 +584,8 @@ void NuPlayer2::seekToAsync(int64_t seekTimeUs, MediaPlayer2SeekMode mode, bool
msg->post();
}
void NuPlayer2::writeTrackInfo(
Parcel* reply, const sp<AMessage>& format) const {
PlayerMessage* reply, const sp<AMessage>& format) const {
if (format == NULL) {
ALOGE("NULL format");
return;
@ -619,10 +618,9 @@ void NuPlayer2::writeTrackInfo(
return;
}
reply->writeInt32(2); // write something non-zero
reply->writeInt32(trackType);
reply->writeString16(String16(mime.c_str()));
reply->writeString16(String16(lang.c_str()));
reply->add_values()->set_int32_value(trackType);
reply->add_values()->set_string_value(mime.c_str());
reply->add_values()->set_string_value(lang.c_str());
if (trackType == MEDIA_TRACK_TYPE_SUBTITLE) {
int32_t isAuto, isDefault, isForced;
@ -630,9 +628,9 @@ void NuPlayer2::writeTrackInfo(
CHECK(format->findInt32("default", &isDefault));
CHECK(format->findInt32("forced", &isForced));
reply->writeInt32(isAuto);
reply->writeInt32(isDefault);
reply->writeInt32(isForced);
reply->add_values()->set_int32_value(isAuto);
reply->add_values()->set_int32_value(isDefault);
reply->add_values()->set_int32_value(isForced);
}
}
@ -764,7 +762,7 @@ void NuPlayer2::onMessageReceived(const sp<AMessage> &msg) {
sp<AReplyToken> replyID;
CHECK(msg->senderAwaitsResponse(&replyID));
Parcel* reply;
PlayerMessage* reply;
CHECK(msg->findPointer("reply", (void**)&reply));
size_t inbandTracks = 0;
@ -778,7 +776,7 @@ void NuPlayer2::onMessageReceived(const sp<AMessage> &msg) {
}
// total track count
reply->writeInt32(inbandTracks + ccTracks);
reply->add_values()->set_int32_value(inbandTracks + ccTracks);
// write inband tracks
for (size_t i = 0; i < inbandTracks; ++i) {
@ -806,9 +804,9 @@ void NuPlayer2::onMessageReceived(const sp<AMessage> &msg) {
media_track_type type = (media_track_type)type32;
ssize_t selectedTrack = mSource->getSelectedTrack(type);
Parcel* reply;
PlayerMessage* reply;
CHECK(msg->findPointer("reply", (void**)&reply));
reply->writeInt32(selectedTrack);
reply->add_values()->set_int32_value(selectedTrack);
}
sp<AMessage> response = new AMessage;
@ -2231,7 +2229,7 @@ status_t NuPlayer2::setVideoScalingMode(int32_t mode) {
return OK;
}
status_t NuPlayer2::getTrackInfo(Parcel* reply) const {
status_t NuPlayer2::getTrackInfo(PlayerMessage* reply) const {
sp<AMessage> msg = new AMessage(kWhatGetTrackInfo, this);
msg->setPointer("reply", reply);
@ -2240,7 +2238,7 @@ status_t NuPlayer2::getTrackInfo(Parcel* reply) const {
return err;
}
status_t NuPlayer2::getSelectedTrack(int32_t type, Parcel* reply) const {
status_t NuPlayer2::getSelectedTrack(int32_t type, PlayerMessage* reply) const {
sp<AMessage> msg = new AMessage(kWhatGetSelectedTrack, this);
msg->setPointer("reply", reply);
msg->setInt32("type", type);

@ -23,6 +23,10 @@
#include <mediaplayer2/MediaPlayer2Interface.h>
#include "mediaplayer2.pb.h"
using android::media::MediaPlayer2Proto::PlayerMessage;
namespace android {
struct ABuffer;
@ -77,8 +81,8 @@ struct NuPlayer2 : public AHandler {
bool needNotify = false);
status_t setVideoScalingMode(int32_t mode);
status_t getTrackInfo(Parcel* reply) const;
status_t getSelectedTrack(int32_t type, Parcel* reply) const;
status_t getTrackInfo(PlayerMessage* reply) const;
status_t getSelectedTrack(int32_t type, PlayerMessage* reply) const;
status_t selectTrack(size_t trackIndex, bool select, int64_t timeUs);
status_t getCurrentPosition(int64_t *mediaUs);
void getStats(Vector<sp<AMessage> > *mTrackStats);
@ -333,7 +337,7 @@ private:
void sendTimedMetaData(const sp<ABuffer> &buffer);
void sendTimedTextData(const sp<ABuffer> &buffer);
void writeTrackInfo(Parcel* reply, const sp<AMessage>& format) const;
void writeTrackInfo(PlayerMessage* reply, const sp<AMessage>& format) const;
status_t onPrepareDrm(const sp<AMessage> &msg);
status_t onReleaseDrm();

@ -36,6 +36,9 @@
#include <media/IMediaAnalyticsService.h>
using google::protobuf::RepeatedPtrField;
using android::media::MediaPlayer2Proto::Value;
static const int kDumpLockRetries = 50;
static const int kDumpLockSleepUs = 20000;
@ -591,34 +594,30 @@ status_t NuPlayer2Driver::setLooping(int loop) {
return OK;
}
status_t NuPlayer2Driver::invoke(const Parcel &request, Parcel *reply) {
if (reply == NULL) {
status_t NuPlayer2Driver::invoke(const PlayerMessage &request, PlayerMessage *response) {
if (response == NULL) {
ALOGE("reply is a NULL pointer");
return BAD_VALUE;
}
int32_t methodId;
status_t ret = request.readInt32(&methodId);
if (ret != OK) {
ALOGE("Failed to retrieve the requested method to invoke, err(%d)", ret);
return ret;
}
RepeatedPtrField<const Value>::const_iterator it = request.values().cbegin();
int32_t methodId = (it++)->int32_value();
switch (methodId) {
case MEDIA_PLAYER2_INVOKE_ID_SET_VIDEO_SCALING_MODE:
{
int mode = request.readInt32();
int mode = (it++)->int32_value();
return mPlayer->setVideoScalingMode(mode);
}
case MEDIA_PLAYER2_INVOKE_ID_GET_TRACK_INFO:
{
return mPlayer->getTrackInfo(reply);
return mPlayer->getTrackInfo(response);
}
case MEDIA_PLAYER2_INVOKE_ID_SELECT_TRACK:
{
int trackIndex = request.readInt32();
int trackIndex = (it++)->int32_value();
int64_t msec = 0;
// getCurrentPosition should always return OK
getCurrentPosition(&msec);
@ -627,14 +626,14 @@ status_t NuPlayer2Driver::invoke(const Parcel &request, Parcel *reply) {
case MEDIA_PLAYER2_INVOKE_ID_UNSELECT_TRACK:
{
int trackIndex = request.readInt32();
int trackIndex = (it++)->int32_value();
return mPlayer->selectTrack(trackIndex, false /* select */, 0xdeadbeef /* not used */);
}
case MEDIA_PLAYER2_INVOKE_ID_GET_SELECTED_TRACK:
{
int32_t type = request.readInt32();
return mPlayer->getSelectedTrack(type, reply);
int32_t type = (it++)->int32_value();
return mPlayer->getSelectedTrack(type, response);
}
default:

@ -56,7 +56,7 @@ struct NuPlayer2Driver : public MediaPlayer2Interface {
virtual status_t reset() override;
virtual status_t notifyAt(int64_t mediaTimeUs) override;
virtual status_t setLooping(int loop) override;
virtual status_t invoke(const Parcel &request, Parcel *reply) override;
virtual status_t invoke(const PlayerMessage &request, PlayerMessage *response) override;
virtual void setAudioSink(const sp<AudioSink> &audioSink) override;
virtual status_t setParameter(int key, const Parcel &request) override;
virtual status_t getParameter(int key, Parcel *reply) override;

Loading…
Cancel
Save