LiveStreamFrame * LiveStreamFrameFormatter::formatFrame(AVFrame* avFrame) { if (shouldTryDeinterlaceFrame(avFrame)) deinterlaceFrame(avFrame); return new LiveStreamFrame(scaleFrame(avFrame)); }
// ---------------------------------------------------------------------------- HRESULT CVFxDeinterlace::EffectProc(CVFxMediaSample sample) { if(sample.pSample == NULL || sample.pType == NULL) return(E_INVALIDARG); if(parameter->state == VFX_AUTO && !IsInterlaced(sample.pType)) return(S_OK); BYTE* pixelBuffer = NULL; sample.pSample->GetPointer(&pixelBuffer); VIDEOINFOHEADER *pvi = (VIDEOINFOHEADER*) sample.pType->pbFormat; // VIDEOINFOHEADER2 is backwards compatible with VIDEOINFOHEADER, so it's safe to typecast DWORD width = pvi->bmiHeader.biWidth; DWORD height = pvi->bmiHeader.biHeight; HRESULT hr = deinterlaceFrame(pixelBuffer,pixelBuffer,width,height,parameter->method, MEDIASUBTYPEtoPX(sample.pType->subtype)); return(hr); }