Add setParameter/getParameter to MediaPlayer API.
for bug 1982947

Change-Id: If3f40e4f18cbba155af29944af38bdc627f8cd53
diff --git a/media/libmedia/IMediaPlayer.cpp b/media/libmedia/IMediaPlayer.cpp
index 8885bd5..76a8a91 100644
--- a/media/libmedia/IMediaPlayer.cpp
+++ b/media/libmedia/IMediaPlayer.cpp
@@ -48,6 +48,8 @@
     SET_AUX_EFFECT_SEND_LEVEL,
     ATTACH_AUX_EFFECT,
     SET_VIDEO_SURFACETEXTURE,
+    SET_PARAMETER,
+    GET_PARAMETER,
 };
 
 class BpMediaPlayer: public BpInterface<IMediaPlayer>
@@ -236,6 +238,26 @@
         return reply.readInt32();
     }
 
+    status_t setParameter(int key, const Parcel& request)
+    {
+        Parcel data, reply;
+        data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor());
+        data.writeInt32(key);
+        if (request.dataSize() > 0) {
+            data.appendFrom(const_cast<Parcel *>(&request), 0, request.dataSize());
+        }
+        remote()->transact(SET_PARAMETER, data, &reply);
+        return reply.readInt32();
+    }
+
+    status_t getParameter(int key, Parcel *reply)
+    {
+        Parcel data;
+        data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor());
+        data.writeInt32(key);
+        return remote()->transact(GET_PARAMETER, data, reply);
+    }
+
 };
 
 IMPLEMENT_META_INTERFACE(MediaPlayer, "android.media.IMediaPlayer");
@@ -361,6 +383,23 @@
             reply->writeInt32(attachAuxEffect(data.readInt32()));
             return NO_ERROR;
         } break;
+        case SET_PARAMETER: {
+            CHECK_INTERFACE(IMediaPlayer, data, reply);
+            int key = data.readInt32();
+
+            Parcel request;
+            if (data.dataAvail() > 0) {
+                request.appendFrom(
+                        const_cast<Parcel *>(&data), data.dataPosition(), data.dataAvail());
+            }
+            request.setDataPosition(0);
+            reply->writeInt32(setParameter(key, request));
+            return NO_ERROR;
+        } break;
+        case GET_PARAMETER: {
+            CHECK_INTERFACE(IMediaPlayer, data, reply);
+            return getParameter(data.readInt32(), reply);
+        } break;
         default:
             return BBinder::onTransact(code, data, reply, flags);
     }
diff --git a/media/libmedia/mediaplayer.cpp b/media/libmedia/mediaplayer.cpp
index 9daa80f..28e07ff 100644
--- a/media/libmedia/mediaplayer.cpp
+++ b/media/libmedia/mediaplayer.cpp
@@ -553,6 +553,28 @@
     return mPlayer->attachAuxEffect(effectId);
 }
 
+status_t MediaPlayer::setParameter(int key, const Parcel& request)
+{
+    LOGV("MediaPlayer::setParameter(%d)", key);
+    Mutex::Autolock _l(mLock);
+    if (mPlayer != NULL) {
+        return  mPlayer->setParameter(key, request);
+    }
+    LOGV("setParameter: no active player");
+    return INVALID_OPERATION;
+}
+
+status_t MediaPlayer::getParameter(int key, Parcel *reply)
+{
+    LOGV("MediaPlayer::getParameter(%d)", key);
+    Mutex::Autolock _l(mLock);
+    if (mPlayer != NULL) {
+         return  mPlayer->getParameter(key, reply);
+    }
+    LOGV("getParameter: no active player");
+    return INVALID_OPERATION;
+}
+
 void MediaPlayer::notify(int msg, int ext1, int ext2, const Parcel *obj)
 {
     LOGV("message received msg=%d, ext1=%d, ext2=%d", msg, ext1, ext2);