Bug 1366706 - accepts video frames with negative timestamp but non-zero size. r?jya draft
authorJohn Lin <jolin@mozilla.com>
Tue, 06 Jun 2017 16:11:33 +0800
changeset 589464 3b8252f656bb0129e36a33b69de1f3d349f2ba47
parent 589301 2c6289f56812c30254acfdddabcfec1e149c0336
child 631896 360cdcb7f27546fbb514a0a2374247dc6b354a86
push id62390
push userbmo:jolin@mozilla.com
push dateTue, 06 Jun 2017 08:17:19 +0000
reviewersjya
bugs1366706
milestone55.0a1
Bug 1366706 - accepts video frames with negative timestamp but non-zero size. r?jya MozReview-Commit-ID: 5QqzOesIynN
dom/media/platforms/android/RemoteDataDecoder.cpp
--- a/dom/media/platforms/android/RemoteDataDecoder.cpp
+++ b/dom/media/platforms/android/RemoteDataDecoder.cpp
@@ -107,16 +107,19 @@ public:
       BufferInfo::LocalRef info = aSample->Info();
 
       int32_t flags;
       bool ok = NS_SUCCEEDED(info->Flags(&flags));
 
       int32_t offset;
       ok &= NS_SUCCEEDED(info->Offset(&offset));
 
+      int32_t size;
+      ok &= NS_SUCCEEDED(info->Size(&size));
+
       int64_t presentationTimeUs;
       ok &= NS_SUCCEEDED(info->PresentationTimeUs(&presentationTimeUs));
 
       if (!ok) {
         HandleError(MediaResult(NS_ERROR_DOM_MEDIA_FATAL_ERR,
                                 RESULT_DETAIL("VideoCallBack::HandleOutput")));
         return;
       }
@@ -125,17 +128,17 @@ public:
       InputInfo inputInfo;
       ok = mDecoder->mInputInfos.Find(presentationTimeUs, inputInfo);
       bool isEOS = !!(flags & MediaCodec::BUFFER_FLAG_END_OF_STREAM);
       if (!ok && !isEOS) {
         // Ignore output with no corresponding input.
         return;
       }
 
-      if (ok && presentationTimeUs >= 0) {
+      if (ok && (size > 0 || presentationTimeUs >= 0)) {
         RefPtr<layers::Image> img = new SurfaceTextureImage(
           mDecoder->mSurfaceHandle, inputInfo.mImageSize, false /* NOT continuous */,
           gl::OriginPos::BottomLeft);
 
         RefPtr<VideoData> v = VideoData::CreateFromImage(
           inputInfo.mDisplaySize, offset,
           TimeUnit::FromMicroseconds(presentationTimeUs),
           TimeUnit::FromMicroseconds(inputInfo.mDurationUs),