Bug 1354993 - Add PictureID into VP8 CodecSpecificInfo. r?jolin draft
authorMunro Mengjue Chiang <mchiang@mozilla.com>
Mon, 10 Apr 2017 14:49:36 +0800
changeset 560170 3b21d6993bb066ccb0b49fdf86ae76eded716b6d
parent 555310 b5d8b27a753725c1de41ffae2e338798f3b5cacd
child 623638 74b642d8896f1363543b53898e5cfed128834ad6
push id53357
push userbmo:mchiang@mozilla.com
push dateTue, 11 Apr 2017 08:04:14 +0000
reviewersjolin
bugs1354993
milestone55.0a1
Bug 1354993 - Add PictureID into VP8 CodecSpecificInfo. r?jolin MozReview-Commit-ID: 7l2WygPuHRX
media/webrtc/signaling/src/media-conduit/WebrtcMediaCodecVP8VideoCodec.cpp
--- a/media/webrtc/signaling/src/media-conduit/WebrtcMediaCodecVP8VideoCodec.cpp
+++ b/media/webrtc/signaling/src/media-conduit/WebrtcMediaCodecVP8VideoCodec.cpp
@@ -39,19 +39,20 @@ static const char MEDIACODEC_VIDEO_MIME_
 
 namespace mozilla {
 
 static const char* logTag ="WebrtcMediaCodecVP8VideoCodec";
 
 class CallbacksSupport final : public JavaCallbacksSupport
 {
 public:
-  CallbacksSupport(webrtc::EncodedImageCallback* aCallback) :
-    mCallback(aCallback),
-    mCritSect(webrtc::CriticalSectionWrapper::CreateCriticalSection()) {
+  CallbacksSupport(webrtc::EncodedImageCallback* aCallback)
+    : mCallback(aCallback)
+    , mCritSect(webrtc::CriticalSectionWrapper::CreateCriticalSection())
+    , mPictureId(0) {
     CSFLogDebug(logTag,  "%s %p", __FUNCTION__, this);
     memset(&mEncodedImage, 0, sizeof(mEncodedImage));
   }
 
   ~CallbacksSupport() {
     CSFLogDebug(logTag,  "%s %p", __FUNCTION__, this);
     if (mEncodedImage._size) {
       delete [] mEncodedImage._buffer;
@@ -119,17 +120,18 @@ public:
       mEncodedImage._length = size;
 
       jni::ByteBuffer::LocalRef dest =
         jni::ByteBuffer::New(mEncodedImage._buffer, size);
       aSample->WriteToByteBuffer(dest);
 
       webrtc::CodecSpecificInfo info;
       info.codecType = webrtc::kVideoCodecVP8;
-      info.codecSpecific.VP8.pictureId = -1;
+      info.codecSpecific.VP8.pictureId = mPictureId;
+      mPictureId = (mPictureId + 1) & 0x7FFF;
       info.codecSpecific.VP8.tl0PicIdx = -1;
       info.codecSpecific.VP8.keyIdx = -1;
       info.codecSpecific.VP8.temporalIdx = 1;
       info.codecSpecific.VP8.simulcastIdx = 0;
 
       webrtc::RTPFragmentationHeader header;
       memset(&header, 0, sizeof(header));
       header.VerifyAndAllocateFragmentationHeader(1);
@@ -147,16 +149,17 @@ public:
 
   friend class WebrtcMediaCodecVP8VideoRemoteEncoder;
 
 private:
   webrtc::EncodedImageCallback* mCallback;
   Atomic<bool> mCanceled;
   webrtc::EncodedImage mEncodedImage;
   rtc::scoped_ptr<webrtc::CriticalSectionWrapper> mCritSect;
+  uint32_t mPictureId;
 };
 
 static MediaCodec::LocalRef CreateDecoder(const char* aMimeType)
 {
   if (!aMimeType) {
     return nullptr;
   }