>>Set Up sts = CodecPipeline::SelectDataReader(readContext, fcap->pDataReader, FILE_DATA_READER); sts = CodecPipeline::SelectSplitter(fcap->pDataReader, UMC::VIDEO_SPLITTER, fcap->pSplitter); sts = CodecPipeline::SelectVideoDecoder(*fcap->pVideoInfo, fcap->pVideoDecSpecInfo, IPPI_INTER_NN, UMC::DEINTERLACING_DUPLICATE, 0, UMC::FLAG_VDEC_REORDER, *fcap->pPostProcessing, fcap->pVideoDecoder); sts = CodecPipeline::SelectVideoRender(renderContext, clipInfo, rectDisp, rectRange, UMC::RGB24, 0/*UMC::FLAG_VREN_REORDER*/, fcap->pVideoRender, UMC::NULL_VIDEO_RENDER, outputVideo); >>Frame capture //! lock buffer if ((sts = fcap->pVideoRender->LockInputBuffer(fcap->out)) != UMC::UMC_OK) return sts; //! capture frame do { if (4 >= fcap->in->GetDataSize() || sts == UMC::UMC_ERR_NOT_ENOUGH_DATA) { while (((sts = fcap->pSplitter->GetNextData(fcap->in, fcap->videoTrack)) == UMC::UMC_ERR_NOT_ENOUGH_DATA)) { vm_time_sleep(5); timeOut = timeOut - 5; if (timeOut < 0) { fcap->pVideoRender->UnLockInputBuffer(fcap->out); return AYNX_FILECAP_ERR_BASE_VIDEOFILE + UMC::UMC_ERR_TIMEOUT; } } } if (sts == UMC::UMC_ERR_END_OF_STREAM) break; if (!(fcap->in->GetTime() < 0)) fcap->position = fcap->in->GetTime(); sts = fcap->pVideoDecoder->GetFrame(fcap->in, fcap->out); } while (sts == UMC::UMC_ERR_NOT_ENOUGH_DATA || sts == UMC::UMC_ERR_SYNC); //! error if (sts != UMC::UMC_OK && sts != UMC::UMC_ERR_END_OF_STREAM) { fcap->pVideoRender->UnLockInputBuffer(fcap->out); return sts; } //! end of stream if (sts == UMC::UMC_ERR_END_OF_STREAM) { fcap->pVideoRender->UnLockInputBuffer(fcap->out); return END_OF_STREAM; } if (!(fcap->out->GetTime() < 0)) fcap->position = fcap->out->GetTime();