Exemple #1
0
// IMediaControl
STDMETHODIMP CRealMediaGraph::Run()
{
	if(m_pRMP->m_pPlayer->IsDone())
		RenderFile(m_fn, NULL);

	m_pRMP->m_UserState = State_Running;
	return (PNR_OK == m_pRMP->m_pPlayer->Begin()) ? S_OK : E_FAIL;
}
Exemple #2
0
bool CDXGraph::QueryInterfaces(void)
{
	if (mGraph)
	{
		HRESULT hr = NOERROR;
		hr |= mGraph->QueryInterface(IID_IMediaControl, (void **)&mMediaControl);
		hr |= mGraph->QueryInterface(IID_IMediaEventEx, (void **)&mEvent);
		hr |= mGraph->QueryInterface(IID_IBasicVideo, (void **)&mBasicVideo);
		hr |= mGraph->QueryInterface(IID_IBasicAudio, (void **)&mBasicAudio);
		hr |= mGraph->QueryInterface(IID_IVideoWindow, (void **)&mVideoWindow);
		hr |= mGraph->QueryInterface(IID_IMediaSeeking, (void **)&mSeeking);
	
		//查询数据流位置接口
		hr |= mGraph->QueryInterface(IID_IMediaPosition, (void**) &pmp);
		hr |= CoCreateInstance(CLSID_SampleGrabber,NULL, 
			CLSCTX_INPROC_SERVER, IID_ISampleGrabber, (void **)&m_pGrabber);
		hr |= m_pGrabber->QueryInterface(IID_IBaseFilter,(void **)&m_pGrabberFilter);

		AM_MEDIA_TYPE mt;
				
		ZeroMemory(&mt, sizeof(AM_MEDIA_TYPE));
		mt.majortype = MEDIATYPE_Video;
		mt.subtype   = MEDIASUBTYPE_RGB32;

		hr = m_pGrabber->SetMediaType(&mt);
		
		hr = mGraph->AddFilter(m_pGrabberFilter, L"Sample Grabber");

		m_pGrabberCB = new CSampleGrabberCB_np();
	
		RenderFile(m_strSourceFile);

		hr = pmp->get_Duration(&tLength);			

		hr = m_pGrabber->GetConnectedMediaType( &mt );
		
		VIDEOINFOHEADER * vih = (VIDEOINFOHEADER*) mt.pbFormat;
		m_pGrabberCB->Width  = vih->bmiHeader.biWidth;
		m_pGrabberCB->Height = vih->bmiHeader.biHeight;			
		m_pGrabberCB->mFramePerSecond = (10000000.0)/vih->AvgTimePerFrame + 0.5;
		m_pGrabberCB->mdwBitRate = vih->dwBitRate;
		
		m_pGrabber->SetCallback(m_pGrabberCB,1);

		mSeeking->GetDuration(&g_rtTotalTime);
		
		m_pGrabberCB->SetBitmapHeader();
		
		if (mSeeking)
		{
			mSeeking->SetTimeFormat(&TIME_FORMAT_MEDIA_TIME);
		}
		
		return SUCCEEDED(hr);
	}
	return false;
}
Exemple #3
0
//==================================================================
void RibRendToy::MenuFunc( int id )
{
	switch ( id )
	{
	case MENUID_DBG_PICK_BUCKET:
		mHiderParams.mDbgShowBuckets = !mHiderParams.mDbgShowBuckets;
		RenderFile( true );
		RebuildMenu();
		glutPostRedisplay();
		return;

	case MENUID_DBG_COLOR_CODE_GRIDS:
		mHiderParams.mDbgColorCodedGrids = !mHiderParams.mDbgColorCodedGrids;
		RenderFile( true );
		RebuildMenu();
		glutPostRedisplay();
		return;

	case MENUID_DBG_RASTERIZE_VERTS:
		mHiderParams.mDbgRasterizeVerts = !mHiderParams.mDbgRasterizeVerts;
		RenderFile( true );
		RebuildMenu();
		glutPostRedisplay();
		return;
	}

	if ( id >= MENUID_FILES )
	{
		strcpy_s( mFileToRender, mExePath );
		strcat_s( mFileToRender, "/" );
		strcat_s( mFileToRender, mTestRibFilesPaths[id - MENUID_FILES].c_str() );
		strcat_s( mFileToRender, "/" );
		strcat_s( mFileToRender, mTestRibFiles[id - MENUID_FILES].c_str() );

		printf( "Render File: %s\n", mFileToRender );
	}
}
Exemple #4
0
//==================================================================
void RibRendToy::MouseFunc( int button, int butState, int mx, int my )
{
	if ( button == 0 )
	{
		if ( butState == GLUT_DOWN )
		{
			if ( mHiderParams.mDbgShowBuckets )
			{
				mHiderParams.mDbgOnlyBucketAtX = mx;
				mHiderParams.mDbgOnlyBucketAtY = my;
				RenderFile( true );
				glutPostRedisplay();
				mHiderParams.mDbgOnlyBucketAtX = -1;
				mHiderParams.mDbgOnlyBucketAtY = -1;
			}
		}
	}
}
Exemple #5
0
STDMETHODIMP CBaseGraph::AddSourceFilter(LPCWSTR lpcwstrFileName, LPCWSTR lpcwstrFilterName, IBaseFilter** ppFilter)
{
    *ppFilter = nullptr;
    return RenderFile(lpcwstrFileName, nullptr);
}//E_NOTIMPL;}
Exemple #6
0
BOOL CDXVideoGrabber::PlayFile(const char* inFile, HWND hWnd)
{
	RemoveAllFilters();

	HRESULT hr = m_pGrabber.CoCreateInstance( CLSID_SampleGrabber );
	if( !m_pGrabber )
		return FALSE;

	CComQIPtr< IBaseFilter, &IID_IBaseFilter > pGrabBase( m_pGrabber );
	// force it to connect to video, 24 bit
	//
	CMediaType VideoType;
	VideoType.SetType( &MEDIATYPE_Video );
	VideoType.SetSubtype( &MEDIASUBTYPE_RGB24 );
	hr = m_pGrabber->SetMediaType( &VideoType ); // shouldn't fail
	if( FAILED( hr ) )
		return FALSE;

	// add the grabber to the graph
	//
	hr = m_pIGraphBuilder->AddFilter( pGrabBase, L"Grabber" );
	if( FAILED( hr ) )
		return FALSE;

	RenderFile(inFile);

	AM_MEDIA_TYPE mt;
	hr = m_pGrabber->GetConnectedMediaType( &mt );
	if ( FAILED( hr) )
	{
		return FALSE;
	}

	VIDEOINFOHEADER * vih = (VIDEOINFOHEADER*) mt.pbFormat;
	if(m_pSGCB)
	{
		// 		m_pSGCB->SetOwner(GetParent(hWnd));
		m_pSGCB->SetWidth(vih->bmiHeader.biWidth);
		m_pSGCB->SetHeight(vih->bmiHeader.biHeight);
	}
	FreeMediaType( mt );

	// don't buffer the samples as they pass through
	//
	hr = m_pGrabber->SetBufferSamples( FALSE );

	// only grab one at a time, stop stream after
	// grabbing one sample
	//
	hr = m_pGrabber->SetOneShot( FALSE );

	// set the callback, so we can grab the one sample
	//
	hr = m_pGrabber->SetCallback( m_pSGCB, 1 );

	if(!SetDisplayWindow(hWnd))
	{
		return FALSE;
	}

	return Run();
}