void FFmpegH264Decoder<LIBAV_VER>::DoDrain() { nsRefPtr<MediaRawData> empty(new MediaRawData()); while (DoDecodeFrame(empty) == DecodeResult::DECODE_FRAME) { } mCallback->DrainComplete(); }
void FFmpegH264Decoder<LIBAV_VER>::DecodeFrame(MediaRawData* aSample) { if (DoDecodeFrame(aSample) != DecodeResult::DECODE_ERROR && mTaskQueue->IsEmpty()) { mCallback->InputExhausted(); } }
void FFmpegH264Decoder<LIBAV_VER>::DoDrain() { nsAutoPtr<MP4Sample> empty(new MP4Sample()); while (DoDecodeFrame(empty) == DecodeResult::DECODE_FRAME) { } mCallback->DrainComplete(); }
void FFmpegH264Decoder<LIBAV_VER>::DecodeFrame(mp4_demuxer::MP4Sample* aSample) { if (DoDecodeFrame(aSample) != DecodeResult::DECODE_ERROR && mTaskQueue->IsEmpty()) { mCallback->InputExhausted(); } }
FFmpegH264Decoder<LIBAV_VER>::DecodeResult FFmpegH264Decoder<LIBAV_VER>::DoDecodeFrame(MediaRawData* aSample) { MOZ_ASSERT(mTaskQueue->IsCurrentThreadIn()); uint8_t* inputData = const_cast<uint8_t*>(aSample->Data()); size_t inputSize = aSample->Size(); #if LIBAVCODEC_VERSION_MAJOR >= 54 if (inputSize && mCodecParser && (mCodecID == AV_CODEC_ID_VP8 #if LIBAVCODEC_VERSION_MAJOR >= 55 || mCodecID == AV_CODEC_ID_VP9 #endif )) { bool gotFrame = false; while (inputSize) { uint8_t* data; int size; int len = av_parser_parse2(mCodecParser, mCodecContext, &data, &size, inputData, inputSize, aSample->mTime, aSample->mTimecode, aSample->mOffset); if (size_t(len) > inputSize) { mCallback->Error(); return DecodeResult::DECODE_ERROR; } inputData += len; inputSize -= len; if (size) { switch (DoDecodeFrame(aSample, data, size)) { case DecodeResult::DECODE_ERROR: return DecodeResult::DECODE_ERROR; case DecodeResult::DECODE_FRAME: gotFrame = true; break; default: break; } } } return gotFrame ? DecodeResult::DECODE_FRAME : DecodeResult::DECODE_NO_FRAME; } #endif return DoDecodeFrame(aSample, inputData, inputSize); }
void FFmpegH264Decoder<LIBAV_VER>::ProcessDrain() { MOZ_ASSERT(mTaskQueue->IsCurrentThreadIn()); RefPtr<MediaRawData> empty(new MediaRawData()); while (DoDecodeFrame(empty) == DecodeResult::DECODE_FRAME) { } mCallback->DrainComplete(); }
void VPXDecoder::DecodeFrame(MediaRawData* aSample) { if (DoDecodeFrame(aSample) == -1) { mCallback->Error(); } else if (mTaskQueue->IsEmpty()) { mCallback->InputExhausted(); } }
void FFmpegVideoDecoder<LIBAV_VER>::DecodeFrame(MediaRawData* aSample) { MOZ_ASSERT(mTaskQueue->IsCurrentThreadIn()); if (DoDecodeFrame(aSample) != DecodeResult::DECODE_ERROR && mTaskQueue->IsEmpty()) { mCallback->InputExhausted(); } }