SDC C-Project CF Review 프로그램
LYW
2021-09-27 b9b6752e83c701cc67241923d2b74dc3a963d243
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#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;
};