add RageMovieTextureHelper
This commit is contained in:
@@ -0,0 +1,85 @@
|
|||||||
|
#include "stdafx.h"
|
||||||
|
#include "RageMovieTextureHelper.h"
|
||||||
|
#include "RageUtil.h"
|
||||||
|
#include "RageLog.h"
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// Define GUID for Texture Renderer
|
||||||
|
// {71771540-2017-11cf-AE26-0020AFD79767}
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
struct __declspec(uuid("{71771540-2017-11cf-ae26-0020afd79767}")) CLSID_TextureRenderer;
|
||||||
|
|
||||||
|
static HRESULT CBV_ret;
|
||||||
|
CTextureRenderer::CTextureRenderer()
|
||||||
|
: CBaseVideoRenderer(__uuidof(CLSID_TextureRenderer),
|
||||||
|
NAME("Texture Renderer"), NULL, &CBV_ret)
|
||||||
|
{
|
||||||
|
if( FAILED(CBV_ret) )
|
||||||
|
throw RageException( hr_ssprintf(CBV_ret, "Could not create texture renderer object!") );
|
||||||
|
|
||||||
|
// Store and ARageef the texture for our use.
|
||||||
|
m_pTexture = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
CTextureRenderer::~CTextureRenderer()
|
||||||
|
{
|
||||||
|
// Do nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
HRESULT CTextureRenderer::CheckMediaType(const CMediaType *pmt)
|
||||||
|
{
|
||||||
|
VIDEOINFO *pvi;
|
||||||
|
|
||||||
|
// Reject the connection if this is not a video type
|
||||||
|
if( *pmt->FormatType() != FORMAT_VideoInfo )
|
||||||
|
return E_INVALIDARG;
|
||||||
|
|
||||||
|
// Force the graph to R8G8B8.
|
||||||
|
pvi = (VIDEOINFO *)pmt->Format();
|
||||||
|
if(IsEqualGUID( *pmt->Type(), MEDIATYPE_Video) &&
|
||||||
|
IsEqualGUID( *pmt->Subtype(), MEDIASUBTYPE_RGB24))
|
||||||
|
return S_OK;
|
||||||
|
|
||||||
|
return E_FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// SetMediaType: Graph connection has been made.
|
||||||
|
HRESULT CTextureRenderer::SetMediaType(const CMediaType *pmt)
|
||||||
|
{
|
||||||
|
// Retrive the size of this media type
|
||||||
|
VIDEOINFO *pviBmp; // Bitmap info header
|
||||||
|
pviBmp = (VIDEOINFO *)pmt->Format();
|
||||||
|
m_lVidWidth = pviBmp->bmiHeader.biWidth;
|
||||||
|
m_lVidHeight = abs(pviBmp->bmiHeader.biHeight);
|
||||||
|
m_lVidPitch = (m_lVidWidth * 3 + 3); // We are forcing RGB24
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CTextureRenderer::SetRenderTarget( RageMovieTexture* pTexture )
|
||||||
|
{
|
||||||
|
m_pTexture = pTexture;
|
||||||
|
}
|
||||||
|
|
||||||
|
// DoRenderSample: A sample has been delivered. Copy it.
|
||||||
|
HRESULT CTextureRenderer::DoRenderSample( IMediaSample * pSample )
|
||||||
|
{
|
||||||
|
if( m_pTexture == NULL )
|
||||||
|
{
|
||||||
|
LOG->Warn( "DoRenderSample called while m_pTexture was NULL!" );
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
BYTE *pBmpBuffer; // Bitmap buffer
|
||||||
|
|
||||||
|
// Get the video bitmap buffer
|
||||||
|
pSample->GetPointer( &pBmpBuffer );
|
||||||
|
|
||||||
|
// Copy the bits
|
||||||
|
m_pTexture->NewData((char *) pBmpBuffer);
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
#ifndef RAGEMOVIETEXTURE_HELPER_H
|
||||||
|
#define RAGEMOVIETEXTURE_HELPER_H
|
||||||
|
|
||||||
|
|
||||||
|
// #include <windows.h>
|
||||||
|
// #include <atlbase.h>
|
||||||
|
|
||||||
|
//#include "baseclasses/streams.h"
|
||||||
|
#include "RageMovieTexture.h"
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// CTextureRenderer Class Declarations
|
||||||
|
//
|
||||||
|
// Usage: 1) CheckMediaType is called by the graph
|
||||||
|
// 2) SetMediaType is called by the graph
|
||||||
|
// 3) call GetVidWidth and GetVidHeight to get texture information
|
||||||
|
// 4) call SetRenderTarget
|
||||||
|
// 5) Do RenderSample is called by the graph
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
class CTextureRenderer : public CBaseVideoRenderer
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CTextureRenderer();
|
||||||
|
~CTextureRenderer();
|
||||||
|
|
||||||
|
// overridden methods
|
||||||
|
HRESULT CheckMediaType(const CMediaType *pmt ); // Format acceptable?
|
||||||
|
HRESULT SetMediaType(const CMediaType *pmt ); // Video format notification
|
||||||
|
HRESULT DoRenderSample(IMediaSample *pMediaSample); // New video sample
|
||||||
|
|
||||||
|
// new methods
|
||||||
|
long GetVidWidth() const { return m_lVidWidth; }
|
||||||
|
long GetVidHeight() const { return m_lVidHeight; }
|
||||||
|
void SetRenderTarget( RageMovieTexture* pTexture );
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// Video width, height, and pitch.
|
||||||
|
long m_lVidWidth, m_lVidHeight, m_lVidPitch;
|
||||||
|
|
||||||
|
char *output;
|
||||||
|
|
||||||
|
RageMovieTexture* m_pTexture; // the video surface we will copy new frames to
|
||||||
|
// D3DFORMAT m_TextureFormat; // Texture format
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
+28
-20
@@ -60,7 +60,7 @@ IntDir=.\../Release6
|
|||||||
TargetDir=\temp\stepmania
|
TargetDir=\temp\stepmania
|
||||||
TargetName=StepMania
|
TargetName=StepMania
|
||||||
SOURCE="$(InputPath)"
|
SOURCE="$(InputPath)"
|
||||||
PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\
|
PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\
|
||||||
PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania.vdi ia32.vdi
|
PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania.vdi ia32.vdi
|
||||||
# End Special Build Tool
|
# End Special Build Tool
|
||||||
|
|
||||||
@@ -95,7 +95,7 @@ IntDir=.\../Debug6
|
|||||||
TargetDir=\temp\stepmania
|
TargetDir=\temp\stepmania
|
||||||
TargetName=StepMania-debug
|
TargetName=StepMania-debug
|
||||||
SOURCE="$(InputPath)"
|
SOURCE="$(InputPath)"
|
||||||
PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\
|
PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\
|
||||||
PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania.vdi ia32.vdi
|
PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania.vdi ia32.vdi
|
||||||
# End Special Build Tool
|
# End Special Build Tool
|
||||||
|
|
||||||
@@ -113,27 +113,11 @@ PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania
|
|||||||
# PROP Default_Filter ""
|
# PROP Default_Filter ""
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\RageSound.cpp
|
SOURCE=.\RageMovieTextureHelper.cpp
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\RageSound.h
|
SOURCE=.\RageMovieTextureHelper.h
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=.\RageSoundManager.cpp
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=.\RageSoundManager.h
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=.\RageThreads.cpp
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=.\RageThreads.h
|
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
@@ -243,6 +227,14 @@ SOURCE=.\RageNetworkClient.h
|
|||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\RageSound.cpp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\RageSound.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\RageSoundBass.cpp
|
SOURCE=.\RageSoundBass.cpp
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
@@ -251,6 +243,14 @@ SOURCE=.\RageSoundBass.h
|
|||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\RageSoundManager.cpp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\RageSoundManager.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\RageSoundSample.cpp
|
SOURCE=.\RageSoundSample.cpp
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
@@ -283,6 +283,14 @@ SOURCE=.\RageTextureManager.h
|
|||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\RageThreads.cpp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\RageThreads.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\RageTimer.cpp
|
SOURCE=.\RageTimer.cpp
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|||||||
@@ -686,6 +686,9 @@ cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\
|
|||||||
<File
|
<File
|
||||||
RelativePath=".\StepMania.RC">
|
RelativePath=".\StepMania.RC">
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="archutils\Win32\arch_setup.h">
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\resource.h">
|
RelativePath=".\resource.h">
|
||||||
</File>
|
</File>
|
||||||
@@ -1124,7 +1127,13 @@ cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\
|
|||||||
RelativePath="RageMovieTexture.cpp">
|
RelativePath="RageMovieTexture.cpp">
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\RageMovieTexture.h">
|
RelativePath="RageMovieTexture.h">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="RageMovieTextureHelper.cpp">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="RageMovieTextureHelper.h">
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\RageMusic.cpp">
|
RelativePath=".\RageMusic.cpp">
|
||||||
|
|||||||
Reference in New Issue
Block a user