Bug 1272553. Part 1 - move code around to be able to extract common code in P2. r=jya. draft
authorJW Wang <jwwang@mozilla.com>
Fri, 13 May 2016 11:19:14 +0800
changeset 366650 f9540c58cd59303822530ba76cd84c19fcecfed2
parent 366635 05819ba40a618295ef3b9e19a8083e50d2148631
child 366651 466327c20c88ebc12dfe2ef5d13f3452d2221987
push id18040
push userjwwang@mozilla.com
push dateFri, 13 May 2016 03:31:38 +0000
reviewersjya
bugs1272553
milestone49.0a1
Bug 1272553. Part 1 - move code around to be able to extract common code in P2. r=jya. MozReview-Commit-ID: 3SWrJ7xwek6
dom/media/platforms/apple/AppleVDADecoder.cpp
dom/media/platforms/apple/AppleVDADecoder.h
dom/media/platforms/apple/AppleVTDecoder.cpp
dom/media/platforms/apple/AppleVTDecoder.h
--- a/dom/media/platforms/apple/AppleVDADecoder.cpp
+++ b/dom/media/platforms/apple/AppleVDADecoder.cpp
@@ -128,22 +128,18 @@ AppleVDADecoder::Input(MediaRawData* aSa
       aSample,
       aSample->mTime,
       aSample->mDuration,
       aSample->mKeyframe ? " keyframe" : "",
       aSample->Size());
 
   mInputIncoming++;
 
-  nsCOMPtr<nsIRunnable> runnable =
-      NewRunnableMethod<RefPtr<MediaRawData>>(
-          this,
-          &AppleVDADecoder::SubmitFrame,
-          RefPtr<MediaRawData>(aSample));
-  mTaskQueue->Dispatch(runnable.forget());
+  mTaskQueue->Dispatch(NewRunnableMethod<RefPtr<MediaRawData>>(
+    this, &AppleVDADecoder::ProcessDecode, aSample));
   return NS_OK;
 }
 
 nsresult
 AppleVDADecoder::Flush()
 {
   MOZ_ASSERT(mCallback->OnReaderTaskQueue());
   mIsFlushing = true;
@@ -424,17 +420,17 @@ AppleVDADecoder::OutputFrame(CVPixelBuff
   }
   LOG("%llu decoded frames queued",
       static_cast<unsigned long long>(mReorderQueue.Length()));
 
   return NS_OK;
 }
 
 nsresult
-AppleVDADecoder::SubmitFrame(MediaRawData* aSample)
+AppleVDADecoder::ProcessDecode(MediaRawData* aSample)
 {
   MOZ_ASSERT(mTaskQueue->IsCurrentThreadIn());
 
   mInputIncoming--;
 
   AutoCFRelease<CFDataRef> block =
     CFDataCreate(kCFAllocatorDefault, aSample->Data(), aSample->Size());
   if (!block) {
--- a/dom/media/platforms/apple/AppleVDADecoder.h
+++ b/dom/media/platforms/apple/AppleVDADecoder.h
@@ -135,15 +135,15 @@ protected:
 
 private:
   VDADecoder mDecoder;
 
   // Method to set up the decompression session.
   nsresult InitializeSession();
 
   // Method to pass a frame to VideoToolbox for decoding.
-  nsresult SubmitFrame(MediaRawData* aSample);
+  nsresult ProcessDecode(MediaRawData* aSample);
   CFDictionaryRef CreateDecoderSpecification();
 };
 
 } // namespace mozilla
 
 #endif // mozilla_AppleVDADecoder_h
--- a/dom/media/platforms/apple/AppleVTDecoder.cpp
+++ b/dom/media/platforms/apple/AppleVTDecoder.cpp
@@ -87,34 +87,20 @@ AppleVTDecoder::Input(MediaRawData* aSam
 
   LOG("mp4 input sample %p pts %lld duration %lld us%s %d bytes",
       aSample,
       aSample->mTime,
       aSample->mDuration,
       aSample->mKeyframe ? " keyframe" : "",
       aSample->Size());
 
-#ifdef LOG_MEDIA_SHA1
-  SHA1Sum hash;
-  hash.update(aSample->data, aSample->size);
-  uint8_t digest_buf[SHA1Sum::kHashSize];
-  hash.finish(digest_buf);
-  nsAutoCString digest;
-  for (size_t i = 0; i < sizeof(digest_buf); i++) {
-    digest.AppendPrintf("%02x", digest_buf[i]);
-  }
-  LOG("    sha1 %s", digest.get());
-#endif // LOG_MEDIA_SHA1
-
   mInputIncoming++;
 
-  nsCOMPtr<nsIRunnable> runnable =
-      NewRunnableMethod<RefPtr<MediaRawData>>(
-          this, &AppleVTDecoder::SubmitFrame, aSample);
-  mTaskQueue->Dispatch(runnable.forget());
+  mTaskQueue->Dispatch(NewRunnableMethod<RefPtr<MediaRawData>>(
+    this, &AppleVTDecoder::ProcessDecode, aSample));
   return NS_OK;
 }
 
 void
 AppleVTDecoder::ProcessFlush()
 {
   MOZ_ASSERT(mTaskQueue->IsCurrentThreadIn());
   nsresult rv = WaitForAsynchronousFrames();
@@ -197,18 +183,30 @@ TimingInfoFromSample(MediaRawData* aSamp
     CMTimeMake(aSample->mTime, USECS_PER_S);
   timestamp.decodeTimeStamp =
     CMTimeMake(aSample->mTimecode, USECS_PER_S);
 
   return timestamp;
 }
 
 nsresult
-AppleVTDecoder::SubmitFrame(MediaRawData* aSample)
+AppleVTDecoder::ProcessDecode(MediaRawData* aSample)
 {
+#ifdef LOG_MEDIA_SHA1
+  SHA1Sum hash;
+  hash.update(aSample->data, aSample->size);
+  uint8_t digest_buf[SHA1Sum::kHashSize];
+  hash.finish(digest_buf);
+  nsAutoCString digest;
+  for (size_t i = 0; i < sizeof(digest_buf); i++) {
+    digest.AppendPrintf("%02x", digest_buf[i]);
+  }
+  LOG("    sha1 %s", digest.get());
+#endif // LOG_MEDIA_SHA1
+
   MOZ_ASSERT(mTaskQueue->IsCurrentThreadIn());
   mInputIncoming--;
   // For some reason this gives me a double-free error with stagefright.
   AutoCFRelease<CMBlockBufferRef> block = nullptr;
   AutoCFRelease<CMSampleBufferRef> sample = nullptr;
   VTDecodeInfoFlags infoFlags;
   OSStatus rv;
 
--- a/dom/media/platforms/apple/AppleVTDecoder.h
+++ b/dom/media/platforms/apple/AppleVTDecoder.h
@@ -39,17 +39,17 @@ protected:
   void ProcessDrain() override;
   void ProcessShutdown() override;
 
 private:
   CMVideoFormatDescriptionRef mFormat;
   VTDecompressionSessionRef mSession;
 
   // Method to pass a frame to VideoToolbox for decoding.
-  nsresult SubmitFrame(MediaRawData* aSample);
+  nsresult ProcessDecode(MediaRawData* aSample);
   // Method to set up the decompression session.
   nsresult InitializeSession();
   nsresult WaitForAsynchronousFrames();
   CFDictionaryRef CreateDecoderSpecification();
   CFDictionaryRef CreateDecoderExtensions();
   Atomic<bool> mIsHardwareAccelerated;
 };