#pragma once
|
|
#include "CHImageControls/CHImageData.h"
|
#include "CHThreadPools/WorkThreadPools.h"
|
|
class CFrameThreadData : public CWorkThreadData
|
{
|
public:
|
CFrameThreadData(PVOID pPtr) : CWorkThreadData(pPtr)
|
{
|
m_nIndex = -1;
|
}
|
|
virtual ~CFrameThreadData()
|
{
|
m_nIndex = -1;
|
}
|
|
int SetFrameData(int nFrameIndex, BYTE* pFrameBuffer, int nFrameWidth, int nFrameHeight, int nFrameChannels)
|
{
|
m_nIndex = nFrameIndex;
|
|
if (m_Image.CreateImageHeader(nFrameWidth, nFrameHeight, 8, nFrameChannels)==FALSE)
|
{
|
return 0;
|
}
|
|
m_Image.SetImageDataPtr((char*)pFrameBuffer);
|
|
return 1;
|
}
|
|
int GetIndex() { return m_nIndex; }
|
CCHImageData* GetFrameImage() { return &m_Image; }
|
|
protected:
|
int m_nIndex;
|
CCHImageData m_Image;
|
};
|
|
interface IImageReSampler2Parent
|
{
|
virtual void IIRS2P_ImageReSampleComplete(int nFrameCount) = 0;
|
};
|
|
class AFX_EXT_CLASS CImageReSampler : public CWorkThreadPools
|
{
|
public:
|
CImageReSampler(int nThreadCount=8, IImageReSampler2Parent* pIIRS2P=NULL);
|
virtual ~CImageReSampler(void);
|
void Reset();
|
void SetIIRS2P(IImageReSampler2Parent* pIIRS2P);
|
|
int GetReSampledFrameCount() const { return m_nReSampledFrameCount; }
|
void Start_ReSampling();
|
int SetBufferInfo(int nSrcWidth, int nSrcHeight, int nSrcChannels, int nFrameSize, int nTagWidth, int nTagHeight);
|
int SetFrameBuffer(int nFrameIndex, BYTE* pFrameBuffer, int nFrameWidth, int nFrameHeight, int nFrameChannels);
|
int SaveImage(const CString& strFilename, int nQual);
|
|
int GetWidth() const { return m_TargetImage.GetWidth(); }
|
int GetHeight() const { return m_TargetImage.GetHeight(); }
|
int GetFrameHeight() const { return m_nTargetFrameHeight; }
|
BYTE* GetImageBuffer() { return (BYTE*) m_TargetImage.GetImageBuffer(); }
|
|
protected:
|
virtual void WorkThreadProcess(PVOID pParameter);
|
|
protected:
|
int m_nSourceWidth;
|
int m_nSourceHeight;
|
int m_nSourceChannels;
|
int m_nSourceFrameHeight;
|
|
int m_nTargetFrameHeight;
|
int m_nTargetFrameSize;
|
int m_nTotalFrameCount;
|
int m_nReSampledFrameCount;
|
CCHImageData m_TargetImage;
|
|
IImageReSampler2Parent* m_pIIRS2P;
|
CCriticalSection m_csTargetImage;
|
};
|