Bug 1272553. Part 1 - move code around to be able to extract common code in P2. r=jya.
MozReview-Commit-ID: 3SWrJ7xwek6
--- 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;
};