U和V缓冲区偏移的公式

时间:2010-03-12 07:31:10

标签: c++ c windows-mobile windows-ce yuv

应该是U&的缓冲区偏移值V在 YUV444 格式类型?

就像我使用YV12格式的例子一样,值如下:

  

ppData.inputIDMAChannel.UBufOffset =   iInputHeight * iInputWidth +   (iInputHeight * iInputWidth)/ 4;       ppData.inputIDMAChannel.VBufOffset = iInputHeight * iInputWidth;

iInputHeight = 160& iInputWidth = 112

ppdata是以下结构的对象:

    typedef struct ppConfigDataStruct
{
    //---------------------------------------------------------------
    // General controls
    //---------------------------------------------------------------
    UINT8         IntType;    
                  //    FIRSTMODULE_INTERRUPT: the interrupt will be 
                  //    rised once the first sub-module finished its job.
                  //    FRAME_INTERRUPT:   the interrput will be rised 
                  //    after all sub-modules finished their jobs.
    //---------------------------------------------------------------
    // Format controls
    //---------------------------------------------------------------

    // For input
    idmaChannel     inputIDMAChannel;

    BOOL            bCombineEnable;
    idmaChannel     inputcombIDMAChannel;
    UINT8           inputcombAlpha;
    UINT32          inputcombColorkey;

    icAlphaType     alphaType;

    // For output
    idmaChannel     outputIDMAChannel;
    CSCEQUATION  CSCEquation;    // Selects R2Y or Y2R CSC Equation
    icCSCCoeffs     CSCCoeffs;      // Selects R2Y or Y2R CSC Equation
    icFlipRot          FlipRot;        // Flip/Rotate controls for VF
    BOOL    allowNopPP;   // flag to indicate we need a NOP PP processing

}*pPpConfigData, ppConfigData;

和idmaChannel结构如下:

 typedef struct idmaChannelStruct
{
    icFormat       FrameFormat;  // YUV or RGB
    icFrameSize    FrameSize;  //  frame size
    UINT32         LineStride;//  stride in bytes
    icPixelFormat  PixelFormat;// Input frame RGB format, set NULL 
                                    // to use standard settings.
    icDataWidth    DataWidth;// Bits per pixel for RGB format
    UINT32    UBufOffset;// offset of U buffer from Y buffer start address
                            // ignored if non-planar image format
    UINT32    VBufOffset;// offset of U buffer from Y buffer start address
                            // ignored if non-planar image format    
} idmaChannel, *pIdmaChannel;

我想要 ppData.inputIDMAChannel.UBufOffset &的公式对于 YUV444

ppData.inputIDMAChannel.VBufOffset

提前致谢

2 个答案:

答案 0 :(得分:2)

鉴于YUV444每个组件使用8位,在我看来公式应该是直截了当的:

ppData.inputIDMAChannel.UBufOffset = 2 * iInputHeight * iInputWidth;
ppData.inputIDMAChannel.VBufOffset = iInputHeight * iInputWidth;

答案 1 :(得分:0)

由于YUV444由每像素24位组成

因此,U& V缓冲区偏移量为

ppData.inputIDMAChannel.UBufOffset = iInputHeight * iInputWidth;
ppData.inputIDMAChannel.VBufOffset = 2 * iInputHeight * iInputWidth;