WebKit Bugzilla
Attachment 371262 Details for
Bug 198523
: [WinCairo][MediaFoundation] Remove the unused video window
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
WIP patch
mf.3.diff (text/plain), 22.20 KB, created by
Fujii Hironori
on 2019-06-04 03:08:59 PDT
(
hide
)
Description:
WIP patch
Filename:
MIME Type:
Creator:
Fujii Hironori
Created:
2019-06-04 03:08:59 PDT
Size:
22.20 KB
patch
obsolete
>diff --git a/Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp b/Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp >index 00b0d0884fc..4cec0f96d2a 100644 >--- a/Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp >+++ b/Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp >@@ -92,18 +92,15 @@ MediaPlayerPrivateMediaFoundation::MediaPlayerPrivateMediaFoundation(MediaPlayer > , m_hasVideo(false) > , m_preparingToPlay(false) > , m_volume(1.0) >- , m_hwndVideo(nullptr) > , m_networkState(MediaPlayer::Empty) > , m_readyState(MediaPlayer::HaveNothing) > { > createSession(); >- createVideoWindow(); > } > > MediaPlayerPrivateMediaFoundation::~MediaPlayerPrivateMediaFoundation() > { > notifyDeleted(); >- destroyVideoWindow(); > endSession(); > } > >@@ -355,37 +352,17 @@ void MediaPlayerPrivateMediaFoundation::setSize(const IntSize& size) > { > m_size = size; > >- auto videoDisplay = this->videoDisplay(); >- if (!videoDisplay) >+ if (!m_presenter) > return; > >- IntPoint positionInWindow(m_lastPaintRect.location()); >- >- FrameView* view = nullptr; > float deviceScaleFactor = 1.0f; >- if (m_player && m_player->cachedResourceLoader() && m_player->cachedResourceLoader()->document()) { >- view = m_player->cachedResourceLoader()->document()->view(); >+ if (m_player && m_player->cachedResourceLoader() && m_player->cachedResourceLoader()->document()) > deviceScaleFactor = m_player->cachedResourceLoader()->document()->deviceScaleFactor(); >- } >- >- LayoutPoint scrollPosition; >- if (view) { >- scrollPosition = view->scrollPositionForFixedPosition(); >- positionInWindow = view->convertToContainingWindow(IntPoint(m_lastPaintRect.location())); >- } >- >- positionInWindow.move(-scrollPosition.x().toInt(), -scrollPosition.y().toInt()); > >- int x = positionInWindow.x() * deviceScaleFactor; >- int y = positionInWindow.y() * deviceScaleFactor; > int w = m_size.width() * deviceScaleFactor; > int h = m_size.height() * deviceScaleFactor; > >- if (m_hwndVideo) >- ::MoveWindow(m_hwndVideo, x, y, w, h, FALSE); >- >- RECT rc = { 0, 0, w, h }; >- videoDisplay->SetVideoPosition(nullptr, &rc); >+ m_presenter->setVideoSize({ w, h }); > } > > void MediaPlayerPrivateMediaFoundation::paint(GraphicsContext& context, const FloatRect& rect) >@@ -393,8 +370,6 @@ void MediaPlayerPrivateMediaFoundation::paint(GraphicsContext& context, const Fl > if (context.paintingDisabled() || !m_player->visible()) > return; > >- m_lastPaintRect = rect; >- > if (m_presenter) > m_presenter->paintCurrentFrame(context, rect); > } >@@ -645,64 +620,15 @@ bool MediaPlayerPrivateMediaFoundation::addBranchToPartialTopology(int stream) > return true; > } > >-LRESULT CALLBACK MediaPlayerPrivateMediaFoundation::VideoViewWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) >+HWND MediaPlayerPrivateMediaFoundation::hostWindow() > { >- return DefWindowProc(hWnd, message, wParam, lParam); >-} >- >-LPCWSTR MediaPlayerPrivateMediaFoundation::registerVideoWindowClass() >-{ >- const LPCWSTR kVideoWindowClassName = L"WebVideoWindowClass"; >- >- static bool haveRegisteredWindowClass = false; >- if (haveRegisteredWindowClass) >- return kVideoWindowClassName; >- >- haveRegisteredWindowClass = true; >- >- WNDCLASSEX wcex; >- >- wcex.cbSize = sizeof(WNDCLASSEX); >- >- wcex.style = CS_DBLCLKS; >- wcex.lpfnWndProc = VideoViewWndProc; >- wcex.cbClsExtra = 0; >- wcex.cbWndExtra = 0; >- wcex.hInstance = nullptr; >- wcex.hIcon = nullptr; >- wcex.hCursor = ::LoadCursor(0, IDC_ARROW); >- wcex.hbrBackground = nullptr; >- wcex.lpszMenuName = nullptr; >- wcex.lpszClassName = kVideoWindowClassName; >- wcex.hIconSm = nullptr; >- >- if (RegisterClassEx(&wcex)) >- return kVideoWindowClassName; >- >- return nullptr; >-} >- >-void MediaPlayerPrivateMediaFoundation::createVideoWindow() >-{ >- HWND hWndParent = nullptr; > FrameView* view = nullptr; >- if (!m_player || !m_player->cachedResourceLoader() || !m_player->cachedResourceLoader()->document()) >- return; >- view = m_player->cachedResourceLoader()->document()->view(); >- if (!view || !view->hostWindow()) >- return; >- hWndParent = view->hostWindow()->platformPageClient(); >- >- m_hwndVideo = CreateWindowEx(WS_EX_NOACTIVATE | WS_EX_TRANSPARENT, registerVideoWindowClass(), 0, WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN, >- 0, 0, 0, 0, hWndParent, 0, 0, 0); >-} >- >-void MediaPlayerPrivateMediaFoundation::destroyVideoWindow() >-{ >- if (m_hwndVideo) { >- DestroyWindow(m_hwndVideo); >- m_hwndVideo = nullptr; >+ if (m_player && m_player->cachedResourceLoader() && !m_player->cachedResourceLoader()->document()) { >+ view = m_player->cachedResourceLoader()->document()->view(); >+ if (view && view->hostWindow() && view->hostWindow()->platformPageClient()) >+ return view->hostWindow()->platformPageClient(); > } >+ return GetDesktopWindow(); > } > > void MediaPlayerPrivateMediaFoundation::invalidateFrameView() >@@ -784,7 +710,7 @@ bool MediaPlayerPrivateMediaFoundation::createOutputNode(COMPtr<IMFStreamDescrip > return false; > > m_presenter = new CustomVideoPresenter(this); >- m_presenter->SetVideoWindow(m_hwndVideo); >+ m_presenter->setVideoWindow(hostWindow()); > if (FAILED(rendererActivate->SetUnknown(MF_ACTIVATE_CUSTOM_VIDEO_PRESENTER_ACTIVATE, static_cast<IMFActivate*>(m_presenter.get())))) > return false; > m_hasVideo = true; >@@ -872,19 +798,6 @@ void MediaPlayerPrivateMediaFoundation::updateReadyState() > m_player->readyStateChanged(); > } > >-COMPtr<IMFVideoDisplayControl> MediaPlayerPrivateMediaFoundation::videoDisplay() >-{ >- if (m_videoDisplay) >- return m_videoDisplay; >- >- if (!MFGetServicePtr()) >- return nullptr; >- >- MFGetServicePtr()(m_mediaSession.get(), MR_VIDEO_RENDER_SERVICE, IID_PPV_ARGS(&m_videoDisplay)); >- >- return m_videoDisplay; >-} >- > void MediaPlayerPrivateMediaFoundation::onCreatedMediaSource() > { > if (!createTopologyFromSource()) >@@ -899,10 +812,8 @@ void MediaPlayerPrivateMediaFoundation::onTopologySet() > { > // This method is called on the main thread as a result of load() being called. > >- if (auto videoDisplay = this->videoDisplay()) { >- RECT rc = { 0, 0, m_size.width(), m_size.height() }; >- videoDisplay->SetVideoPosition(nullptr, &rc); >- } >+ if (m_presenter) >+ m_presenter->setVideoSize(m_size); > > // It is expected that we start buffering data from the network now. > // We call startSession() to start buffering video data. >@@ -1038,8 +949,6 @@ HRESULT MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::QueryInterface( > *ppvObject = static_cast<IMFGetService*>(this); > else if (IsEqualGUID(riid, IID_IMFActivate)) > *ppvObject = static_cast<IMFActivate*>(this); >- else if (IsEqualGUID(riid, IID_IMFVideoDisplayControl)) >- *ppvObject = static_cast<IMFVideoDisplayControl*>(this); > else if (IsEqualGUID(riid, IID_IMFVideoPresenter)) > *ppvObject = static_cast<IMFVideoPresenter*>(this); > else if (IsEqualGUID(riid, IID_IMFClockStateSink)) >@@ -1326,7 +1235,7 @@ HRESULT MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::ShutdownObject( > return S_OK; > } > >-HRESULT MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::SetVideoWindow(HWND hwndVideo) >+HRESULT MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::setVideoWindow(HWND hwndVideo) > { > LockHolder locker(m_lock); > >@@ -1346,18 +1255,6 @@ HRESULT MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::SetVideoWindow( > return hr; > } > >-HRESULT MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::GetVideoWindow(HWND* phwndVideo) >-{ >- LockHolder locker(m_lock); >- >- if (!phwndVideo) >- return E_POINTER; >- >- *phwndVideo = m_presenterEngine->getVideoWindow(); >- >- return S_OK; >-} >- > static HRESULT setMixerSourceRect(IMFTransform* mixer, const MFVideoNormalizedRect& sourceRect) > { > if (!mixer) >@@ -1372,102 +1269,33 @@ static HRESULT setMixerSourceRect(IMFTransform* mixer, const MFVideoNormalizedRe > return attributes->SetBlob(VIDEO_ZOOM_RECT, (const UINT8*)&sourceRect, sizeof(sourceRect)); > } > >-HRESULT MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::SetVideoPosition(const MFVideoNormalizedRect* pnrcSource, const LPRECT prcDest) >+HRESULT MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::setVideoSize(const SIZE& size) > { > LockHolder locker(m_lock); > >- // First, check that the parameters are valid. >- >- if (!pnrcSource && !prcDest) >- return E_POINTER; >- >- if (pnrcSource) { >- if ((pnrcSource->left > pnrcSource->right) || (pnrcSource->top > pnrcSource->bottom)) >- return E_INVALIDARG; >- >- // The source rectangle must be normalized. >- if ((pnrcSource->left < 0) || (pnrcSource->right > 1) || (pnrcSource->top < 0) || (pnrcSource->bottom > 1)) >- return E_INVALIDARG; >- } >+ auto oldSize = m_presenterEngine->destinationSize(); > >- if (prcDest) { >- if ((prcDest->left > prcDest->right) || (prcDest->top > prcDest->bottom)) >- return E_INVALIDARG; >- } >- >- HRESULT hr = S_OK; >- >- // Set the source rectangle. >- if (pnrcSource) { >- m_sourceRect = *pnrcSource; >+ if (size.cx != oldSize.cx || size.cy != oldSize.cy) { >+ m_presenterEngine->setDestinationSize(size); > >+ // We need to change the media type when the destination rectangle has changed. > if (m_mixer) { >- hr = setMixerSourceRect(m_mixer.get(), m_sourceRect); >- if (FAILED(hr)) >- return hr; >- } >- } >- >- // Set the destination rectangle. >- if (prcDest) { >- RECT rcOldDest = m_presenterEngine->getDestinationRect(); >- >- // If the destination rectangle hasn't changed, we are done. >- if (!EqualRect(&rcOldDest, prcDest)) { >- hr = m_presenterEngine->setDestinationRect(*prcDest); >- if (FAILED(hr)) >- return hr; >- >- // We need to change the media type when the destination rectangle has changed. >- if (m_mixer) { >- hr = renegotiateMediaType(); >- if (hr == MF_E_TRANSFORM_TYPE_NOT_SET) { >- // This is not a critical failure; the EVR will let us know when >- // we have to set the mixer media type. >- hr = S_OK; >- } else { >- if (FAILED(hr)) >- return hr; >- >- // We have successfully changed the media type, >- // ask for a repaint of the current frame. >- m_repaint = true; >- processOutput(); >- } >+ HRESULT hr = renegotiateMediaType(); >+ if (hr == MF_E_TRANSFORM_TYPE_NOT_SET) { >+ // This is not a critical failure; the EVR will let us know when >+ // we have to set the mixer media type. >+ hr = S_OK; >+ } else { >+ if (FAILED(hr)) >+ return hr; >+ >+ // We have successfully changed the media type, >+ // ask for a repaint of the current frame. >+ m_repaint = true; >+ processOutput(); > } > } > } >- >- return S_OK; >-} >- >-HRESULT MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::GetVideoPosition(MFVideoNormalizedRect* pnrcSource, LPRECT prcDest) >-{ >- LockHolder locker(m_lock); >- >- if (!pnrcSource || !prcDest) >- return E_POINTER; >- >- *pnrcSource = m_sourceRect; >- *prcDest = m_presenterEngine->getDestinationRect(); >- >- return S_OK; >-} >- >-HRESULT MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::RepaintVideo() >-{ >- LockHolder locker(m_lock); >- >- HRESULT hr = checkShutdown(); >- if (FAILED(hr)) >- return hr; >- >- // Check that at least one sample has been presented. >- if (m_prerolled) { >- m_repaint = true; >- processOutput(); >- } >- > return S_OK; > } > >@@ -1868,11 +1696,14 @@ HRESULT MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::createOptimalVi > return hr; > > // Get the output rectangle. >- RECT rcOutput = m_presenterEngine->getDestinationRect(); >- if (IsRectEmpty(&rcOutput)) { >+ auto outSize = m_presenterEngine->destinationSize(); >+ if (!outSize.cx || !outSize.cy) { >+ RECT rcOutput; > hr = calculateOutputRectangle(proposedType, rcOutput); > if (FAILED(hr)) > return hr; >+ outSize.cx = rcOutput.right - rcOutput.left; >+ outSize.cy = rcOutput.bottom - rcOutput.top; > } > > hr = optimalVideoType->SetUINT32(MF_MT_YUV_MATRIX, MFVideoTransferMatrix_BT709); >@@ -1895,11 +1726,11 @@ HRESULT MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::createOptimalVi > if (FAILED(hr)) > return hr; > >- hr = MFSetAttributeSize(optimalVideoType.get(), MF_MT_FRAME_SIZE, rcOutput.right, rcOutput.bottom); >+ hr = MFSetAttributeSize(optimalVideoType.get(), MF_MT_FRAME_SIZE, outSize.cx, outSize.cy); > if (FAILED(hr)) > return hr; > >- MFVideoArea displayArea = MakeArea(0, 0, rcOutput.right, rcOutput.bottom); >+ MFVideoArea displayArea = MakeArea(0, 0, outSize.cx, outSize.cy); > > hr = optimalVideoType->SetUINT32(MF_MT_PAN_SCAN_ENABLED, FALSE); > if (FAILED(hr)) >@@ -2682,7 +2513,7 @@ static HRESULT findAdapter(IDirect3D9* direct3D9, HMONITOR monitor, UINT& adapte > > MediaPlayerPrivateMediaFoundation::Direct3DPresenter::Direct3DPresenter() > { >- SetRectEmpty(&m_destRect); >+ m_destSize = { }; > > ZeroMemory(&m_displayMode, sizeof(m_displayMode)); > >@@ -2748,23 +2579,16 @@ HRESULT MediaPlayerPrivateMediaFoundation::Direct3DPresenter::setVideoWindow(HWN > { > LockHolder locker(m_lock); > m_hwnd = hwnd; >- updateDestRect(); > } > > return createD3DDevice(); > } > >-HRESULT MediaPlayerPrivateMediaFoundation::Direct3DPresenter::setDestinationRect(const RECT& rcDest) >+void MediaPlayerPrivateMediaFoundation::Direct3DPresenter::setDestinationSize(const SIZE& size) > { >- if (EqualRect(&rcDest, &m_destRect)) >- return S_OK; >- > LockHolder locker(m_lock); > >- m_destRect = rcDest; >- updateDestRect(); >- >- return S_OK; >+ m_destSize = size; > } > > HRESULT MediaPlayerPrivateMediaFoundation::Direct3DPresenter::createVideoSamples(IMFMediaType* format, VideoSampleList& videoSampleQueue) >@@ -2793,8 +2617,6 @@ HRESULT MediaPlayerPrivateMediaFoundation::Direct3DPresenter::createVideoSamples > return hr; > } > >- updateDestRect(); >- > static const int presenterBufferCount = 3; > > for (int i = 0; i < presenterBufferCount; i++) { >@@ -2880,8 +2702,8 @@ HRESULT MediaPlayerPrivateMediaFoundation::Direct3DPresenter::presentSample(IMFS > } > > if (surface) { >- UINT width = m_destRect.right - m_destRect.left; >- UINT height = m_destRect.bottom - m_destRect.top; >+ UINT width = m_destSize.cx; >+ UINT height = m_destSize.cy; > > if (width > 0 && height > 0) { > if (!m_memSurface || m_width != width || m_height != height) { >@@ -2902,13 +2724,6 @@ HRESULT MediaPlayerPrivateMediaFoundation::Direct3DPresenter::presentSample(IMFS > } > } > >- // Since we want to draw to the GraphicsContext provided in the paint method, >- // and not draw directly to the window, we skip presenting the swap chain: >- >- // COMPtr<IDirect3DSwapChain9> swapChain; >- // hr = surface->GetContainer(__uuidof(IDirect3DSwapChain9), (LPVOID*)&swapChain)); >- // hr = presentSwapChain(swapChain, surface)); >- > // Keep the last surface for repaints. > m_surfaceRepaint = surface; > } >@@ -2925,8 +2740,8 @@ HRESULT MediaPlayerPrivateMediaFoundation::Direct3DPresenter::presentSample(IMFS > > void MediaPlayerPrivateMediaFoundation::Direct3DPresenter::paintCurrentFrame(WebCore::GraphicsContext& context, const WebCore::FloatRect& destRect) > { >- UINT width = m_destRect.right - m_destRect.left; >- UINT height = m_destRect.bottom - m_destRect.top; >+ UINT width = m_destSize.cx; >+ UINT height = m_destSize.cy; > > if (!width || !height) > return; >@@ -3074,14 +2889,6 @@ HRESULT MediaPlayerPrivateMediaFoundation::Direct3DPresenter::createD3DSample(ID > return MFCreateVideoSampleFromSurfacePtr()(surface.get(), &videoSample); > } > >-HRESULT MediaPlayerPrivateMediaFoundation::Direct3DPresenter::presentSwapChain(IDirect3DSwapChain9* swapChain, IDirect3DSurface9* surface) >-{ >- if (!m_hwnd) >- return MF_E_INVALIDREQUEST; >- >- return swapChain->Present(nullptr, &m_destRect, m_hwnd, nullptr, 0); >-} >- > HRESULT MediaPlayerPrivateMediaFoundation::Direct3DPresenter::getSwapChainPresentParameters(IMFMediaType* type, D3DPRESENT_PARAMETERS* presentParams) > { > if (!m_hwnd) >@@ -3122,25 +2929,6 @@ HRESULT MediaPlayerPrivateMediaFoundation::Direct3DPresenter::getSwapChainPresen > return S_OK; > } > >-HRESULT MediaPlayerPrivateMediaFoundation::Direct3DPresenter::updateDestRect() >-{ >- if (!m_hwnd) >- return S_FALSE; >- >- RECT rcView; >- if (!GetClientRect(m_hwnd, &rcView)) >- return E_FAIL; >- >- // Clip to the client area of the window. >- if (m_destRect.right > rcView.right) >- m_destRect.right = rcView.right; >- >- if (m_destRect.bottom > rcView.bottom) >- m_destRect.bottom = rcView.bottom; >- >- return S_OK; >-} >- > } // namespace WebCore > > #endif >diff --git a/Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.h b/Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.h >index d85f1759020..8dff1673815 100644 >--- a/Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.h >+++ b/Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.h >@@ -110,10 +110,8 @@ private: > bool m_hasVideo; > bool m_preparingToPlay; > float m_volume; >- HWND m_hwndVideo; > MediaPlayer::NetworkState m_networkState; > MediaPlayer::ReadyState m_readyState; >- FloatRect m_lastPaintRect; > > class MediaPlayerListener; > HashSet<MediaPlayerListener*> m_listeners; >@@ -127,7 +125,6 @@ private: > COMPtr<IMFMediaSource> m_mediaSource; > COMPtr<IMFTopology> m_topology; > COMPtr<IMFPresentationDescriptor> m_sourcePD; >- COMPtr<IMFVideoDisplayControl> m_videoDisplay; > > bool createSession(); > bool startSession(); >@@ -142,8 +139,6 @@ private: > > void updateReadyState(); > >- COMPtr<IMFVideoDisplayControl> videoDisplay(); >- > void onCreatedMediaSource(); > void onTopologySet(); > void onBufferingStarted(); >@@ -151,9 +146,7 @@ private: > void onSessionStarted(); > void onSessionEnded(); > >- LPCWSTR registerVideoWindowClass(); >- void createVideoWindow(); >- void destroyVideoWindow(); >+ HWND hostWindow(); > > void invalidateFrameView(); > >@@ -281,8 +274,8 @@ private: > > HRESULT setVideoWindow(HWND); > HWND getVideoWindow() const { return m_hwnd; } >- HRESULT setDestinationRect(const RECT& destRect); >- RECT getDestinationRect() const { return m_destRect; }; >+ void setDestinationSize(const SIZE&); >+ SIZE destinationSize() const { return m_destSize; }; > > HRESULT createVideoSamples(IMFMediaType* format, VideoSampleList& videoSampleQueue); > void releaseResources(); >@@ -299,13 +292,10 @@ private: > HRESULT getSwapChainPresentParameters(IMFMediaType*, D3DPRESENT_PARAMETERS* presentParams); > HRESULT createD3DDevice(); > HRESULT createD3DSample(IDirect3DSwapChain9*, COMPtr<IMFSample>& videoSample); >- HRESULT updateDestRect(); >- >- HRESULT presentSwapChain(IDirect3DSwapChain9*, IDirect3DSurface9*); > > UINT m_deviceResetToken { 0 }; > HWND m_hwnd { nullptr }; >- RECT m_destRect; >+ SIZE m_destSize; > D3DDISPLAYMODE m_displayMode; > > Lock m_lock; >@@ -326,7 +316,6 @@ private: > , public IMFTopologyServiceLookupClient > , public IMFGetService > , public IMFActivate >- , public IMFVideoDisplayControl > , public IMFAsyncCallback > , public MediaPlayerListener { > public: >@@ -395,23 +384,8 @@ private: > HRESULT STDMETHODCALLTYPE GetItemByIndex(UINT32 unIndex, __RPC__out GUID *pguidKey, __RPC__inout_opt PROPVARIANT *pValue) override { return E_NOTIMPL; } > HRESULT STDMETHODCALLTYPE CopyAllItems(__RPC__in_opt IMFAttributes *pDest) override { return E_NOTIMPL; } > >- // IMFVideoDisplayControl >- HRESULT STDMETHODCALLTYPE GetNativeVideoSize(SIZE* pszVideo, SIZE* pszARVideo) override { return E_NOTIMPL; } >- HRESULT STDMETHODCALLTYPE GetIdealVideoSize(SIZE* pszMin, SIZE* pszMax) override { return E_NOTIMPL; } >- HRESULT STDMETHODCALLTYPE SetVideoPosition(const MFVideoNormalizedRect* pnrcSource, const LPRECT prcDest) override; >- HRESULT STDMETHODCALLTYPE GetVideoPosition(MFVideoNormalizedRect* pnrcSource, LPRECT prcDest) override; >- HRESULT STDMETHODCALLTYPE SetAspectRatioMode(DWORD dwAspectRatioMode) override { return E_NOTIMPL; } >- HRESULT STDMETHODCALLTYPE GetAspectRatioMode(DWORD* pdwAspectRatioMode) override { return E_NOTIMPL; } >- HRESULT STDMETHODCALLTYPE SetVideoWindow(HWND hwndVideo) override; >- HRESULT STDMETHODCALLTYPE GetVideoWindow(HWND* phwndVideo) override; >- HRESULT STDMETHODCALLTYPE RepaintVideo() override; >- HRESULT STDMETHODCALLTYPE GetCurrentImage(BITMAPINFOHEADER* pBih, BYTE** pDib, DWORD* pcbDib, LONGLONG* pTimeStamp) override { return E_NOTIMPL; } >- HRESULT STDMETHODCALLTYPE SetBorderColor(COLORREF Clr) override { return E_NOTIMPL; } >- HRESULT STDMETHODCALLTYPE GetBorderColor(COLORREF* pClr) override { return E_NOTIMPL; } >- HRESULT STDMETHODCALLTYPE SetRenderingPrefs(DWORD dwRenderFlags) override { return E_NOTIMPL; } >- HRESULT STDMETHODCALLTYPE GetRenderingPrefs(DWORD* pdwRenderFlags) override { return E_NOTIMPL; } >- HRESULT STDMETHODCALLTYPE SetFullscreen(BOOL bFullscreen) override { return E_NOTIMPL; } >- HRESULT STDMETHODCALLTYPE GetFullscreen(BOOL* pbFullscreen) override { return E_NOTIMPL; } >+ HRESULT setVideoSize(const SIZE&); >+ HRESULT setVideoWindow(HWND hwndVideo); > > // IMFAsyncCallback methods > HRESULT STDMETHODCALLTYPE GetParameters(DWORD*, DWORD*) override { return E_NOTIMPL; }
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 198523
:
371262
|
371571
|
371573