LiveStreamFrame * LiveStreamFrameFormatter::formatFrame(AVFrame* avFrame)
{
    if (shouldTryDeinterlaceFrame(avFrame))
        deinterlaceFrame(avFrame);

    return new LiveStreamFrame(scaleFrame(avFrame));
}
示例#2
0
// ----------------------------------------------------------------------------
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);
}