VT: Recorder gets payload type value from param

Removes hardcoded payload type in ARTPWriter.

A payload type will be assigned dynamically by an
upper layer as per SDP negotation.

Merged-in: I7c6f244c753c84a7954261b1c37292083ab5996a
Change-Id: I7c6f244c753c84a7954261b1c37292083ab5996a
Signed-off-by: Somraj Mani <som.mani@samsung.com>
Signed-off-by: Kim Sungyeon <sy85.kim@samsung.com>
diff --git a/media/libmediaplayerservice/StagefrightRecorder.cpp b/media/libmediaplayerservice/StagefrightRecorder.cpp
index 1282287..31238bc 100644
--- a/media/libmediaplayerservice/StagefrightRecorder.cpp
+++ b/media/libmediaplayerservice/StagefrightRecorder.cpp
@@ -825,6 +825,13 @@
     return OK;
 }
 
+status_t StagefrightRecorder::setParamPayloadType(int32_t payloadType) {
+    ALOGV("setParamPayloadType: %x", payloadType);
+
+    mPayloadType = payloadType;
+    return OK;
+}
+
 status_t StagefrightRecorder::setParameter(
         const String8 &key, const String8 &value) {
     ALOGV("setParameter: key (%s) => value (%s)", key.string(), value.string());
@@ -954,6 +961,11 @@
             selfID = static_cast<int32_t>(temp);
             return setParamSelfID(selfID);
         }
+    } else if (key == "rtp-param-payload-type") {
+        int32_t payloadType;
+        if (safe_strtoi32(value.string(), &payloadType)) {
+            return setParamPayloadType(payloadType);
+        }
     } else {
         ALOGE("setParameter: failed to find key %s", key.string());
     }
@@ -1121,6 +1133,7 @@
             int64_t startTimeUs = systemTime() / 1000;
             meta->setInt64(kKeyTime, startTimeUs);
             meta->setInt32(kKeySelfID, mSelfID);
+            meta->setInt32(kKeyPayloadType, mPayloadType);
             status = mWriter->start(meta.get());
             break;
         }
diff --git a/media/libmediaplayerservice/StagefrightRecorder.h b/media/libmediaplayerservice/StagefrightRecorder.h
index 2d3070e..99b0584 100644
--- a/media/libmediaplayerservice/StagefrightRecorder.h
+++ b/media/libmediaplayerservice/StagefrightRecorder.h
@@ -143,6 +143,7 @@
     int32_t mLocalPort;
     int32_t mRemotePort;
     int32_t mSelfID;
+    int32_t mPayloadType;
 
     int64_t mDurationRecordedUs;
     int64_t mStartedRecordingUs;
@@ -229,6 +230,7 @@
     status_t setParamRtpRemoteIp(const String8 &remoteIp);
     status_t setParamRtpRemotePort(int32_t remotePort);
     status_t setParamSelfID(int32_t selfID);
+    status_t setParamPayloadType(int32_t payloadType);
     void clipVideoBitRate();
     void clipVideoFrameRate();
     void clipVideoFrameWidth();
diff --git a/media/libstagefright/include/media/stagefright/MetaDataBase.h b/media/libstagefright/include/media/stagefright/MetaDataBase.h
index f761db4..53079cf 100644
--- a/media/libstagefright/include/media/stagefright/MetaDataBase.h
+++ b/media/libstagefright/include/media/stagefright/MetaDataBase.h
@@ -250,6 +250,7 @@
     kKeySps              = 'sSps', // int32_t, indicates that a buffer is sps.
     kKeyPps              = 'sPps', // int32_t, indicates that a buffer is pps.
     kKeySelfID           = 'sfid', // int32_t, source ID to identify itself on RTP protocol.
+    kKeyPayloadType      = 'pTyp', // int32_t, SDP negotiated payload type.
 };
 
 enum {
diff --git a/media/libstagefright/rtsp/ARTPWriter.cpp b/media/libstagefright/rtsp/ARTPWriter.cpp
index 5441d34..5a12b2b 100644
--- a/media/libstagefright/rtsp/ARTPWriter.cpp
+++ b/media/libstagefright/rtsp/ARTPWriter.cpp
@@ -206,6 +206,13 @@
     if(params->findInt32(kKeySelfID, &selfID))
         mSourceID = selfID;
 
+    if (mPayloadType == 0)
+        mPayloadType = PT;
+
+    int32_t payloadType = 0;
+    if(params->findInt32(kKeyPayloadType, &payloadType))
+        mPayloadType = payloadType;
+
     mMode = INVALID;
     if (!strcasecmp(mime, MEDIA_MIMETYPE_VIDEO_AVC)) {
         mMode = H264;
@@ -760,7 +767,7 @@
         // The data fits into a single packet
         uint8_t *data = buffer->data();
         data[0] = 0x80;
-        data[1] = (1 << 7) | PT;  // M-bit
+        data[1] = (1 << 7) | mPayloadType;  // M-bit
         data[2] = (mSeqNo >> 8) & 0xff;
         data[3] = mSeqNo & 0xff;
         data[4] = rtpTime >> 24;
@@ -802,7 +809,7 @@
 
             uint8_t *data = buffer->data();
             data[0] = 0x80;
-            data[1] = (lastPacket ? (1 << 7) : 0x00) | PT;  // M-bit
+            data[1] = (lastPacket ? (1 << 7) : 0x00) | mPayloadType;  // M-bit
             data[2] = (mSeqNo >> 8) & 0xff;
             data[3] = mSeqNo & 0xff;
             data[4] = rtpTime >> 24;
@@ -892,9 +899,9 @@
         uint8_t *data = buffer->data();
         data[0] = 0x80;
         if (isSpsPps)
-            data[1] = PT;  // Marker bit should not be set in case of sps/pps
+            data[1] = mPayloadType;  // Marker bit should not be set in case of sps/pps
         else
-            data[1] = (1 << 7) | PT;
+            data[1] = (1 << 7) | mPayloadType;
         data[2] = (mSeqNo >> 8) & 0xff;
         data[3] = mSeqNo & 0xff;
         data[4] = rtpTime >> 24;
@@ -935,7 +942,7 @@
 
             uint8_t *data = buffer->data();
             data[0] = 0x80;
-            data[1] = (lastPacket ? (1 << 7) : 0x00) | PT;  // M-bit
+            data[1] = (lastPacket ? (1 << 7) : 0x00) | mPayloadType;  // M-bit
             data[2] = (mSeqNo >> 8) & 0xff;
             data[3] = mSeqNo & 0xff;
             data[4] = rtpTime >> 24;
@@ -1006,7 +1013,7 @@
 
         uint8_t *data = buffer->data();
         data[0] = 0x80;
-        data[1] = (lastPacket ? 0x80 : 0x00) | PT;  // M-bit
+        data[1] = (lastPacket ? 0x80 : 0x00) | mPayloadType;  // M-bit
         data[2] = (mSeqNo >> 8) & 0xff;
         data[3] = mSeqNo & 0xff;
         data[4] = rtpTime >> 24;
@@ -1088,7 +1095,7 @@
     // The data fits into a single packet
     uint8_t *data = buffer->data();
     data[0] = 0x80;
-    data[1] = PT;
+    data[1] = mPayloadType;
     if (mNumRTPSent == 0) {
         // Signal start of talk-spurt.
         data[1] |= 0x80;  // M-bit
diff --git a/media/libstagefright/rtsp/ARTPWriter.h b/media/libstagefright/rtsp/ARTPWriter.h
index 46df94b..c2268e0 100644
--- a/media/libstagefright/rtsp/ARTPWriter.h
+++ b/media/libstagefright/rtsp/ARTPWriter.h
@@ -95,6 +95,7 @@
     MediaBufferBase *mPPSBuf;
 
     uint32_t mSourceID;
+    uint32_t mPayloadType;
     uint32_t mSeqNo;
     uint32_t mRTPTimeBase;
     uint32_t mNumRTPSent;