// 현재 버퍼의 복사 버퍼를 생성해 리턴한다. // 이미 생성된 상태라면, 정보를 복사해 리턴한다. BYTE* cDxCapture::GetCloneBuffer(long &size) { AutoCS cs(&m_criticalSection); if (!m_pCloneFrameBuffer) { long cbSize; GetCurrentBuffer(cbSize); if (cbSize <= 0) return 0; m_pCloneFrameBuffer = (BYTE*)CoTaskMemAlloc(cbSize); if (!m_pCloneFrameBuffer) return NULL; } // 버퍼가 업데이트 되지 않았다면, 업데이트 한다. if (!m_isUpdateBuffer) { long cbSize; GetCurrentBuffer(cbSize); m_isUpdateBuffer = false; } size = m_frameBufferSize; memcpy(m_pCloneFrameBuffer, m_pFrameBuffer, m_frameBufferSize); return m_pCloneFrameBuffer; }
double CAAudioFileReader::GetCurrentPosition() const { return double(GetCurrentFrame()) / double(GetNumberFrames()); #if 0 double nFrames = double(GetNumberFrames()); // +1 to account for leftovers from decoder if (!mRunning) return double(GetCurrentFrame()) / nFrames; if (mEndOfStream) { //printf("EOF\n"); return 1.0; } const FileReadBuffer *b = static_cast<const FileReadBuffer *>(GetCurrentBuffer()); // the buffer from which we're reading UInt32 startFrame, endFrame; b->GetLocation(startFrame, endFrame); //printf("%qd + %ld / %.f\n", b->mBufferStartFileFrame, startFrame, nFrames); return double(b->mBufferStartFileFrame + startFrame) / nFrames; //if (endFrame > 0) { //double frac = (double(startFrame) / double(endFrame)) * double(endPacket - startPacket); //packetIndex += frac; //printf("frames %ld-%ld, packets %qd-%qd, frac %.3f\n", // startFrame, endFrame, startPacket, endPacket, frac); //} //double pos = packetIndex / nPacketsPlus1; //printf("%.3f / %.0f = %.3f\n", packetIndex, nPacketsPlus1, pos); //return pos; //return double(GetCurrentFrame()) / nFrames; #endif }
void cDxCapture::WriteBitmapFromCurrentBuffer(const char* fileName) { AutoCS cs(&m_criticalSection); long cbBuffer; BYTE* pBuffer = GetCurrentBuffer(cbBuffer); if (!pBuffer) return; HRESULT hr; if (!m_mt.pbFormat) { m_pGrabber->GetConnectedMediaType(&m_mt); } // Examine the format block. if ((m_mt.formattype == FORMAT_VideoInfo) && (m_mt.cbFormat >= sizeof(VIDEOINFOHEADER)) && (m_mt.pbFormat != NULL)) { WriteBitmapFromBuffer(fileName, pBuffer, cbBuffer); } else { // Invalid format. hr = VFW_E_INVALIDMEDIATYPE; } }
SInt64 ZKMORFileReader::GetCurrentFrame() const { // if (!mRunning) return mFile->Tell(); if (mEndOfStream) return GetNumberFrames(); const FileReadBuffer *b = static_cast<const FileReadBuffer *>(GetCurrentBuffer()); // the buffer from which we're reading UInt32 startFrame, endFrame; b->GetLocation(startFrame, endFrame); return b->mBufferStartFileFrame + startFrame; }
SInt64 CAAudioFileReader::GetCurrentFrame() const { if (!mRunning) return mFile->Tell(); if (mEndOfStream) return GetNumberFrames(); const FileReadBuffer *b = static_cast<const FileReadBuffer *>(GetCurrentBuffer()); // the buffer from which we're reading UInt32 startFrame, endFrame; b->GetLocation(startFrame, endFrame); //printf("%qd + %ld / %.f\n", b->mBufferStartFileFrame, startFrame, nFrames); return b->mBufferStartFileFrame + startFrame; }
static void SetAttributeFormat( const VertexAttribute* pAttr, unsigned int numAttr, unsigned int v_offset) { GLenum type = GL_FLOAT; unsigned int currentVBO = GetCurrentBuffer(GL_ARRAY_BUFFER_BINDING); unsigned int i; TransferAndDraw(); if(vtx.n_vertices != 0){ printf("ermergerd"); } BindVAO(); for(i=0;i<10;i++)glDisableVertexAttribArray(i); for(i=0; i<numAttr; i++) { if(pAttr[i].vbo != 0) BindBuffer(GL_ARRAY_BUFFER, pAttr[i].vbo); glEnableVertexAttribArray(pAttr[i].idx); glVertexAttribDivisor(pAttr[i].idx, pAttr[i].divisor); switch(pAttr[i].type) { default: case STREAM_FLOAT: case STREAM_UCHAR: glVertexAttribPointer(pAttr[i].idx, pAttr[i].size, enumToGLAttribType[ pAttr[i].type ], pAttr[i].normalized, pAttr[i].stride, BUFFER_OFFSET(v_offset + pAttr[i].offset)); break; case STREAM_CHAR: case STREAM_SHORT: case STREAM_INT: glVertexAttribIPointer(pAttr[i].idx, pAttr[i].size, enumToGLAttribType[ pAttr[i].type ], pAttr[i].stride, BUFFER_OFFSET(v_offset + pAttr[i].offset)); break; } if(pAttr[i].vbo != 0) BindBuffer(GL_ARRAY_BUFFER, currentVBO); } UnbindVAO(); }