// 현재 버퍼의 복사 버퍼를 생성해 리턴한다.
// 이미 생성된 상태라면, 정보를 복사해 리턴한다.
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;
	}
}
Пример #4
0
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;
}
Пример #6
0
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();
}