зеркало из https://github.com/mozilla/gecko-dev.git
Back out 30a8392db2c2 (bug 1198094) for mQueuedSamples assertion failures
This commit is contained in:
Родитель
02603b885d
Коммит
1e59442474
|
@ -44,7 +44,6 @@ AppleVDADecoder::AppleVDADecoder(const VideoInfo& aConfig,
|
|||
, mIsShutDown(false)
|
||||
, mUseSoftwareImages(false)
|
||||
, mIs106(!nsCocoaFeatures::OnLionOrLater())
|
||||
, mQueuedSamples(0)
|
||||
, mMonitor("AppleVideoDecoder")
|
||||
, mIsFlushing(false)
|
||||
, mDecoder(nullptr)
|
||||
|
@ -214,13 +213,15 @@ PlatformCallback(void* decompressionOutputRefCon,
|
|||
// FIXME: Distinguish between errors and empty flushed frames.
|
||||
if (status != noErr || !image) {
|
||||
NS_WARNING("AppleVDADecoder decoder returned no data");
|
||||
image = nullptr;
|
||||
} else if (infoFlags & kVDADecodeInfo_FrameDropped) {
|
||||
return;
|
||||
}
|
||||
MOZ_ASSERT(CFGetTypeID(image) == CVPixelBufferGetTypeID(),
|
||||
"AppleVDADecoder returned an unexpected image type");
|
||||
|
||||
if (infoFlags & kVDADecodeInfo_FrameDropped)
|
||||
{
|
||||
NS_WARNING(" ...frame dropped...");
|
||||
image = nullptr;
|
||||
} else {
|
||||
MOZ_ASSERT(image || CFGetTypeID(image) == CVPixelBufferGetTypeID(),
|
||||
"AppleVDADecoder returned an unexpected image type");
|
||||
return;
|
||||
}
|
||||
|
||||
AppleVDADecoder* decoder =
|
||||
|
@ -277,7 +278,6 @@ AppleVDADecoder::DrainReorderedFrames()
|
|||
while (!mReorderQueue.IsEmpty()) {
|
||||
mCallback->Output(mReorderQueue.Pop().get());
|
||||
}
|
||||
mQueuedSamples = 0;
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -286,7 +286,6 @@ AppleVDADecoder::ClearReorderedFrames()
|
|||
while (!mReorderQueue.IsEmpty()) {
|
||||
mReorderQueue.Pop();
|
||||
}
|
||||
mQueuedSamples = 0;
|
||||
}
|
||||
|
||||
// Copy and return a decoded frame.
|
||||
|
@ -309,19 +308,6 @@ AppleVDADecoder::OutputFrame(CFRefPtr<CVPixelBufferRef> aImage,
|
|||
aFrameRef.is_sync_point ? " keyframe" : ""
|
||||
);
|
||||
|
||||
if (mQueuedSamples > mMaxRefFrames) {
|
||||
// We had stopped requesting more input because we had received too much at
|
||||
// the time. We can ask for more once again.
|
||||
mCallback->InputExhausted();
|
||||
}
|
||||
MOZ_ASSERT(mQueuedSamples);
|
||||
mQueuedSamples--;
|
||||
|
||||
if (!aImage) {
|
||||
// Image was dropped by decoder.
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
// Where our resulting image will end up.
|
||||
nsRefPtr<VideoData> data;
|
||||
// Bounds.
|
||||
|
@ -485,8 +471,6 @@ AppleVDADecoder::SubmitFrame(MediaRawData* aSample)
|
|||
&kCFTypeDictionaryKeyCallBacks,
|
||||
&kCFTypeDictionaryValueCallBacks);
|
||||
|
||||
mQueuedSamples++;
|
||||
|
||||
OSStatus rv = VDADecoderDecode(mDecoder,
|
||||
0,
|
||||
block,
|
||||
|
@ -510,7 +494,7 @@ AppleVDADecoder::SubmitFrame(MediaRawData* aSample)
|
|||
}
|
||||
|
||||
// Ask for more data.
|
||||
if (!mInputIncoming && mQueuedSamples <= mMaxRefFrames) {
|
||||
if (!mInputIncoming) {
|
||||
LOG("AppleVDADecoder task queue empty; requesting more data");
|
||||
mCallback->InputExhausted();
|
||||
}
|
||||
|
|
|
@ -122,11 +122,6 @@ protected:
|
|||
bool mUseSoftwareImages;
|
||||
bool mIs106;
|
||||
|
||||
// Number of times a sample was queued via Input(). Will be decreased upon
|
||||
// the decoder's callback being invoked.
|
||||
// This is used to calculate how many frames has been buffered by the decoder.
|
||||
uint32_t mQueuedSamples;
|
||||
|
||||
// For wait on mIsFlushing during Shutdown() process.
|
||||
Monitor mMonitor;
|
||||
// Set on reader/decode thread calling Flush() to indicate that output is
|
||||
|
|
|
@ -167,13 +167,14 @@ PlatformCallback(void* decompressionOutputRefCon,
|
|||
// Validate our arguments.
|
||||
if (status != noErr || !image) {
|
||||
NS_WARNING("VideoToolbox decoder returned no data");
|
||||
image = nullptr;
|
||||
} else if (flags & kVTDecodeInfo_FrameDropped) {
|
||||
NS_WARNING(" ...frame tagged as dropped...");
|
||||
} else {
|
||||
MOZ_ASSERT(CFGetTypeID(image) == CVPixelBufferGetTypeID(),
|
||||
"VideoToolbox returned an unexpected image type");
|
||||
return;
|
||||
}
|
||||
if (flags & kVTDecodeInfo_FrameDropped) {
|
||||
NS_WARNING(" ...frame tagged as dropped...");
|
||||
}
|
||||
MOZ_ASSERT(CFGetTypeID(image) == CVPixelBufferGetTypeID(),
|
||||
"VideoToolbox returned an unexpected image type");
|
||||
|
||||
nsCOMPtr<nsIRunnable> task =
|
||||
NS_NewRunnableMethodWithArgs<CFRefPtr<CVPixelBufferRef>, AppleVTDecoder::AppleFrameRef>(
|
||||
decoder, &AppleVTDecoder::OutputFrame, image, *frameRef);
|
||||
|
@ -241,8 +242,6 @@ AppleVTDecoder::SubmitFrame(MediaRawData* aSample)
|
|||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
mQueuedSamples++;
|
||||
|
||||
VTDecodeFrameFlags decodeFlags =
|
||||
kVTDecodeFrame_EnableAsynchronousDecompression;
|
||||
rv = VTDecompressionSessionDecodeFrame(mSession,
|
||||
|
@ -258,7 +257,7 @@ AppleVTDecoder::SubmitFrame(MediaRawData* aSample)
|
|||
}
|
||||
|
||||
// Ask for more data.
|
||||
if (!mInputIncoming && mQueuedSamples <= mMaxRefFrames) {
|
||||
if (!mInputIncoming) {
|
||||
LOG("AppleVTDecoder task queue empty; requesting more data");
|
||||
mCallback->InputExhausted();
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче