uncachedbuffer.cpp

来自「C++封装的视频采集代码」· C++ 代码 · 共 59 行

CPP
59
字号
#include "UnCachedBuffer.h"namespace oxsemi{    UnCachedBuffer::UnCachedBuffer(        unsigned long bufferSizeBytes,        unsigned char alignmentPowerOf2) :        uncachedAlignedMemory_(0),        rawMemory_(0),        rawSize_(0),        requestedSize_(bufferSizeBytes)    {        // Calculate the alignment step size        int alignmentBoundary = 1 << alignmentPowerOf2;        // Create a mask for the l.s. bits of the address which correspond to        // the alignment boundary        unsigned long alignmentBoundaryMask = ~0UL << alignmentPowerOf2;        // Allocate sufficient memory to allow for adjustment to an alignment        // boundary        rawSize_ = bufferSizeBytes + alignmentBoundary - 1;        rawMemory_ = new unsigned char[rawSize_];        if (rawMemory_)        {            // Pointer to memory area which satisfies the alignment requirements            unsigned char* alignedMemory;            // Check the alignment of the allocated memory            if ((reinterpret_cast<unsigned long>(rawMemory_) & ~alignmentBoundaryMask) == 0)            {                // Base of allocated memory is already on an alignment boundary                alignedMemory = rawMemory_;            }            else            {                // Adjust memory base to an alignment boundary                alignedMemory =                    reinterpret_cast<unsigned char*>((reinterpret_cast<unsigned long>(rawMemory_) & alignmentBoundaryMask)) +                    alignmentBoundary;            }            // Convert pointer to aligned cached memory to an uncached pointer#ifdef NO_UNCACHED_BUFFERS            uncachedAlignedMemory_ = alignedMemory;#else            uncachedAlignedMemory_ = TranslateCachedToUncached(alignedMemory);#endif        }        SetIsComplete(rawMemory_);    }    UnCachedBuffer::~UnCachedBuffer()    {        delete[] rawMemory_;    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?