long video_get_width(int id) { get_videor(videoStruct, id, -1); IBasicVideo *pBasicVideo; videoStruct->pGraph->QueryInterface(IID_IBasicVideo, (LPVOID *)&pBasicVideo); // obtain width long width; pBasicVideo->get_VideoWidth(&width); // release pBasicVideo->Release(); return width; }
/* * Class: sage_DShowMediaPlayer * Method: getVideoDimensions0 * Signature: (J)Ljava/awt/Dimension; */ JNIEXPORT jobject JNICALL Java_sage_DShowMediaPlayer_getVideoDimensions0 (JNIEnv *env, jobject jo, jlong dataPtr) { if (!dataPtr) return NULL; CPlayerData* playData = (CPlayerData*) dataPtr; IGraphBuilder* pGraph = playData->GetGraph(); if (!pGraph) return JNI_FALSE; IBasicVideo* pBV = NULL; HRESULT hr = pGraph->QueryInterface(IID_IBasicVideo, (void**)&pBV); if (SUCCEEDED(hr)) { long nativeWidth, nativeHeight; hr = pBV->get_VideoWidth(&nativeWidth); if (FAILED(hr)) { SAFE_RELEASE(pBV); return NULL; } hr = pBV->get_VideoHeight(&nativeHeight); if (FAILED(hr)) { SAFE_RELEASE(pBV); return NULL; } static jclass dimClass = (jclass) env->NewGlobalRef(env->FindClass("java/awt/Dimension")); static jmethodID constMeth = env->GetMethodID(dimClass, "<init>", "(II)V"); jobject dimObj = env->NewObject(dimClass, constMeth, nativeWidth, nativeHeight); SAFE_RELEASE(pBV); return dimObj; } return NULL; }
HRESULT fsPartMediaPlayer::Open(HANDLE hFile, UINT64 uMaxAvail) { HRESULT hr; Close (); m_stream.Attach (hFile, uMaxAvail); if (m_stream.Get_MediaType () == NULL) return E_FAIL; m_reader.Set_MediaType (m_stream.Get_MediaType ()); RIF (CoCreateInstance (CLSID_FilterGraph, NULL, CLSCTX_INPROC, IID_IGraphBuilder, (void**) &m_pGB)); IFilterGraph* pFG = NULL; RIF (m_pGB->QueryInterface (IID_IFilterGraph, (void**)&pFG)); RIF (pFG->AddFilter (&m_reader, NULL)); pFG->Release (); RIF (m_pGB->Render (m_reader.GetPin (0))); RIF (m_pGB->QueryInterface (IID_IMediaControl, (void**)&m_pMC)); RIF (m_pGB->QueryInterface (IID_IMediaEventEx, (void**)&m_pME)); RIF (m_pGB->QueryInterface (IID_IMediaSeeking, (void**)&m_pMS)); m_pGB->QueryInterface (IID_IVideoWindow, (void**)&m_pVW); m_pGB->QueryInterface (IID_IBasicAudio, (void**)&m_pBA); IBasicVideo* pBV = NULL; m_pGB->QueryInterface (IID_IBasicVideo, (void**) &pBV); if (pBV != NULL) { long nW, nH; pBV->get_VideoWidth (&nW); pBV->get_VideoHeight (&nH); m_fVideoRatio = (double)nW / nH; pBV->Release (); } else { m_fVideoRatio = 1; } if (m_pVW) { if (FAILED (m_pVW->put_MessageDrain ((OAHWND)m_hOutWnd))) { SAFE_RELEASE (m_pVW); } } RIF (m_pME->SetNotifyWindow ((OAHWND)m_hOutWnd, WM_VIDEONOTIFY, LONG(this))); if (m_pVW) { m_pVW->put_Visible (OAFALSE); m_pVW->put_WindowStyle (WS_CHILD); m_pVW->put_Owner ((OAHWND)m_hOutWnd); AutoSize (); m_pVW->put_Visible (OATRUE); m_pVW->SetWindowForeground (-1); } m_state = VFPS_STOPPED; return S_OK; }
HRESULT fsPartMediaPlayer::Open2(LPCSTR pszFile) { HRESULT hr; Close (); RIF (CoCreateInstance (CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void**) &m_pGB)); WCHAR wszFile [MAX_PATH]; MultiByteToWideChar (CP_ACP, 0, pszFile, -1, wszFile, MAX_PATH); RIF (m_pGB->RenderFile (wszFile, NULL)); RIF (m_pGB->QueryInterface (IID_IMediaControl, (void**) &m_pMC)); RIF (m_pGB->QueryInterface (IID_IMediaEventEx, (void**) &m_pME)); RIF (m_pGB->QueryInterface (IID_IMediaSeeking, (void**) &m_pMS)); m_pGB->QueryInterface (IID_IVideoWindow, (void**) &m_pVW); IBasicVideo* pBV = NULL; m_pGB->QueryInterface (IID_IBasicVideo, (void**) &pBV); if (pBV != NULL) { long nW, nH; pBV->get_VideoWidth (&nW); pBV->get_VideoHeight (&nH); m_fVideoRatio = (double)nW / nH; } else { m_fVideoRatio = 1; } RIF (m_pGB->QueryInterface (IID_IBasicAudio, (void**) &m_pBA)); BOOL bAudioOnly = m_pVW == NULL || pBV == NULL; if (pBV) pBV->Release (); if (bAudioOnly == FALSE) { long l; if (FAILED (m_pVW->get_Visible (&l))) bAudioOnly = TRUE; } if (m_pVW) { if (FAILED (m_pVW->put_MessageDrain ((OAHWND)m_hOutWnd))) { SAFE_RELEASE (m_pVW); } } RIF (m_pME->SetNotifyWindow ((OAHWND)m_hOutWnd, WM_VIDEONOTIFY, LONG(this))); if (m_pVW) { m_pVW->put_Visible (OAFALSE); m_pVW->put_WindowStyle (WS_CHILD); m_pVW->put_Owner ((OAHWND)m_hOutWnd); AutoSize (); m_pVW->put_Visible (OATRUE); m_pVW->SetWindowForeground (-1); } m_state = VFPS_STOPPED; return S_OK; }