static HRESULT WINAPI IMediaSeeking_fnSetTimeFormat(IMediaSeeking* iface,const GUID* pidFormat) { CFilterGraph_THIS(iface,mediaseeking); HRESULT hr = E_NOTIMPL; HRESULT hrFilter; DWORD n; TRACE("(%p)->()\n",This); EnterCriticalSection( &This->m_csFilters ); for ( n = 0; n < This->m_cActiveFilters; n++ ) { if ( This->m_pActiveFilters[n].pSeeking != NULL ) { hrFilter = IMediaSeeking_SetTimeFormat( This->m_pActiveFilters[n].pSeeking, pidFormat ); if ( hr == E_NOTIMPL ) { hr = hrFilter; } else if ( hrFilter != E_NOTIMPL ) { if ( SUCCEEDED(hr) ) hr = hrFilter; } } } LeaveCriticalSection( &This->m_csFilters ); return hr; }
static HRESULT WINAPI MediaSeekingPassThru_SetTimeFormat(IMediaSeeking * iface, const GUID * pFormat) { PassThruImpl *This = impl_from_IMediaSeeking(iface); IMediaSeeking *seek; HRESULT hr; TRACE("(%p/%p)->(%s)\n", iface, This, debugstr_guid(pFormat)); hr = get_connected(This, &IID_IMediaSeeking, (LPVOID*)&seek); if (SUCCEEDED(hr)) { hr = IMediaSeeking_SetTimeFormat(seek, pFormat); IMediaSeeking_Release(seek); } else return E_NOTIMPL; return hr; }
/*************************************************************************** * MCIQTZ_mciStatus [internal] */ static DWORD MCIQTZ_mciStatus(UINT wDevID, DWORD dwFlags, LPMCI_DGV_STATUS_PARMSW lpParms) { WINE_MCIQTZ* wma; HRESULT hr; TRACE("(%04x, %08X, %p)\n", wDevID, dwFlags, lpParms); if (!lpParms) return MCIERR_NULL_PARAMETER_BLOCK; wma = MCIQTZ_mciGetOpenDev(wDevID); if (!wma) return MCIERR_INVALID_DEVICE_ID; if (!(dwFlags & MCI_STATUS_ITEM)) { WARN("No status item specified\n"); return MCIERR_UNRECOGNIZED_COMMAND; } switch (lpParms->dwItem) { case MCI_STATUS_LENGTH: { LONGLONG duration = -1; GUID format; switch (wma->time_format) { case MCI_FORMAT_MILLISECONDS: format = TIME_FORMAT_MEDIA_TIME; break; case MCI_FORMAT_FRAMES: format = TIME_FORMAT_FRAME; break; default: ERR("Unhandled format %x\n", wma->time_format); break; } hr = IMediaSeeking_SetTimeFormat(wma->seek, &format); if (FAILED(hr)) { FIXME("Cannot set time format (hr = %x)\n", hr); lpParms->dwReturn = 0; break; } hr = IMediaSeeking_GetDuration(wma->seek, &duration); if (FAILED(hr) || duration < 0) { FIXME("Cannot read duration (hr = %x)\n", hr); lpParms->dwReturn = 0; } else if (wma->time_format != MCI_FORMAT_MILLISECONDS) lpParms->dwReturn = duration; else lpParms->dwReturn = duration / 10000; break; } case MCI_STATUS_POSITION: { REFERENCE_TIME curpos; hr = IMediaSeeking_GetCurrentPosition(wma->seek, &curpos); if (FAILED(hr)) { FIXME("Cannot get position (hr = %x)\n", hr); return MCIERR_INTERNAL; } lpParms->dwReturn = curpos / 10000; break; } case MCI_STATUS_NUMBER_OF_TRACKS: FIXME("MCI_STATUS_NUMBER_OF_TRACKS not implemented yet\n"); return MCIERR_UNRECOGNIZED_COMMAND; case MCI_STATUS_MODE: { LONG state = State_Stopped; IMediaControl_GetState(wma->pmctrl, -1, &state); if (state == State_Stopped) lpParms->dwReturn = MCI_MODE_STOP; else if (state == State_Running) { LONG code; LONG_PTR p1, p2; lpParms->dwReturn = MCI_MODE_PLAY; do { hr = IMediaEvent_GetEvent(wma->mevent, &code, &p1, &p2, 0); if (hr == S_OK && code == EC_COMPLETE){ lpParms->dwReturn = MCI_MODE_STOP; IMediaControl_Stop(wma->pmctrl); } } while (hr == S_OK); } else if (state == State_Paused) lpParms->dwReturn = MCI_MODE_PAUSE; break; } case MCI_STATUS_MEDIA_PRESENT: FIXME("MCI_STATUS_MEDIA_PRESENT not implemented yet\n"); return MCIERR_UNRECOGNIZED_COMMAND; case MCI_STATUS_TIME_FORMAT: lpParms->dwReturn = wma->time_format; break; case MCI_STATUS_READY: FIXME("MCI_STATUS_READY not implemented yet\n"); return MCIERR_UNRECOGNIZED_COMMAND; case MCI_STATUS_CURRENT_TRACK: FIXME("MCI_STATUS_CURRENT_TRACK not implemented yet\n"); return MCIERR_UNRECOGNIZED_COMMAND; default: FIXME("Unknown command %08X\n", lpParms->dwItem); return MCIERR_UNRECOGNIZED_COMMAND; } if (dwFlags & MCI_NOTIFY) mciDriverNotify(HWND_32(LOWORD(lpParms->dwCallback)), wDevID, MCI_NOTIFY_SUCCESSFUL); return 0; }
/*************************************************************************** * MCIQTZ_mciStatus [internal] */ static DWORD MCIQTZ_mciStatus(UINT wDevID, DWORD dwFlags, LPMCI_DGV_STATUS_PARMSW lpParms) { WINE_MCIQTZ* wma; HRESULT hr; DWORD ret = MCI_INTEGER_RETURNED; TRACE("(%04x, %08X, %p)\n", wDevID, dwFlags, lpParms); wma = MCIQTZ_mciGetOpenDev(wDevID); if (!wma) return MCIERR_INVALID_DEVICE_ID; if (!(dwFlags & MCI_STATUS_ITEM)) { WARN("No status item specified\n"); return MCIERR_UNRECOGNIZED_COMMAND; } switch (lpParms->dwItem) { case MCI_STATUS_LENGTH: { LONGLONG duration = -1; GUID format; switch (wma->time_format) { case MCI_FORMAT_MILLISECONDS: format = TIME_FORMAT_MEDIA_TIME; break; case MCI_FORMAT_FRAMES: format = TIME_FORMAT_FRAME; break; default: ERR("Unhandled format %x\n", wma->time_format); break; } hr = IMediaSeeking_SetTimeFormat(wma->seek, &format); if (FAILED(hr)) { FIXME("Cannot set time format (hr = %x)\n", hr); lpParms->dwReturn = 0; break; } hr = IMediaSeeking_GetDuration(wma->seek, &duration); if (FAILED(hr) || duration < 0) { FIXME("Cannot read duration (hr = %x)\n", hr); lpParms->dwReturn = 0; } else if (wma->time_format != MCI_FORMAT_MILLISECONDS) lpParms->dwReturn = duration; else lpParms->dwReturn = duration / 10000; break; } case MCI_STATUS_POSITION: { REFERENCE_TIME curpos; hr = IMediaSeeking_GetCurrentPosition(wma->seek, &curpos); if (FAILED(hr)) { FIXME("Cannot get position (hr = %x)\n", hr); return MCIERR_INTERNAL; } lpParms->dwReturn = curpos / 10000; break; } case MCI_STATUS_NUMBER_OF_TRACKS: FIXME("MCI_STATUS_NUMBER_OF_TRACKS not implemented yet\n"); return MCIERR_UNRECOGNIZED_COMMAND; case MCI_STATUS_MODE: { LONG state = State_Stopped; IMediaControl_GetState(wma->pmctrl, -1, &state); if (state == State_Stopped) lpParms->dwReturn = MAKEMCIRESOURCE(MCI_MODE_STOP, MCI_MODE_STOP); else if (state == State_Running) { lpParms->dwReturn = MAKEMCIRESOURCE(MCI_MODE_PLAY, MCI_MODE_PLAY); if (!wma->thread || WaitForSingleObject(wma->thread, 0) == WAIT_OBJECT_0) lpParms->dwReturn = MAKEMCIRESOURCE(MCI_MODE_STOP, MCI_MODE_STOP); } else if (state == State_Paused) lpParms->dwReturn = MAKEMCIRESOURCE(MCI_MODE_PAUSE, MCI_MODE_PAUSE); ret = MCI_RESOURCE_RETURNED; break; } case MCI_STATUS_MEDIA_PRESENT: FIXME("MCI_STATUS_MEDIA_PRESENT not implemented yet\n"); return MCIERR_UNRECOGNIZED_COMMAND; case MCI_STATUS_TIME_FORMAT: lpParms->dwReturn = MAKEMCIRESOURCE(wma->time_format, MCI_FORMAT_RETURN_BASE + wma->time_format); ret = MCI_RESOURCE_RETURNED; break; case MCI_STATUS_READY: FIXME("MCI_STATUS_READY not implemented yet\n"); return MCIERR_UNRECOGNIZED_COMMAND; case MCI_STATUS_CURRENT_TRACK: FIXME("MCI_STATUS_CURRENT_TRACK not implemented yet\n"); return MCIERR_UNRECOGNIZED_COMMAND; default: FIXME("Unknown command %08X\n", lpParms->dwItem); return MCIERR_UNRECOGNIZED_COMMAND; } if (dwFlags & MCI_NOTIFY) MCIQTZ_mciNotify(lpParms->dwCallback, wma, MCI_NOTIFY_SUCCESSFUL); return ret; }
/*************************************************************************** * MCIQTZ_mciStatus [internal] */ static DWORD MCIQTZ_mciStatus(UINT wDevID, DWORD dwFlags, LPMCI_DGV_STATUS_PARMSW lpParms) { WINE_MCIQTZ* wma; HRESULT hr; TRACE("(%04x, %08X, %p)\n", wDevID, dwFlags, lpParms); if (!lpParms) return MCIERR_NULL_PARAMETER_BLOCK; wma = MCIQTZ_mciGetOpenDev(wDevID); if (!wma) return MCIERR_INVALID_DEVICE_ID; if (!(dwFlags & MCI_STATUS_ITEM)) { WARN("No status item specified\n"); return MCIERR_UNRECOGNIZED_COMMAND; } switch (lpParms->dwItem) { case MCI_STATUS_LENGTH: { IMediaSeeking *seek; LONGLONG duration = -1; GUID format; switch (wma->time_format) { case MCI_FORMAT_MILLISECONDS: format = TIME_FORMAT_MEDIA_TIME; break; case MCI_FORMAT_FRAMES: format = TIME_FORMAT_FRAME; break; default: ERR("Unhandled format %x\n", wma->time_format); break; } hr = IGraphBuilder_QueryInterface(wma->pgraph, &IID_IMediaSeeking, (void**)&seek); if (FAILED(hr)) { FIXME("Cannot get IMediaPostion interface (hr = %x)\n", hr); return MCIERR_INTERNAL; } hr = IMediaSeeking_SetTimeFormat(seek, &format); if (FAILED(hr)) { IMediaSeeking_Release(seek); FIXME("Cannot set time format (hr = %x)\n", hr); lpParms->dwReturn = 0; break; } hr = IMediaSeeking_GetDuration(seek, &duration); IMediaSeeking_Release(seek); if (FAILED(hr) || duration < 0) { FIXME("Cannot read duration (hr = %x)\n", hr); lpParms->dwReturn = 0; } else if (wma->time_format != MCI_FORMAT_MILLISECONDS) lpParms->dwReturn = duration; else lpParms->dwReturn = duration / 10000; break; } case MCI_STATUS_POSITION: { IMediaPosition* pmpos; REFTIME curpos; hr = IGraphBuilder_QueryInterface(wma->pgraph, &IID_IMediaPosition, (LPVOID*)&pmpos); if (FAILED(hr)) { FIXME("Cannot get IMediaPostion interface (hr = %x)\n", hr); return MCIERR_INTERNAL; } hr = IMediaPosition_get_CurrentPosition(pmpos, &curpos); if (FAILED(hr)) { FIXME("Cannot get position (hr = %x)\n", hr); IMediaPosition_Release(pmpos); return MCIERR_INTERNAL; } IMediaPosition_Release(pmpos); lpParms->dwReturn = curpos / 10000; break; } case MCI_STATUS_NUMBER_OF_TRACKS: FIXME("MCI_STATUS_NUMBER_OF_TRACKS not implemented yet\n"); return MCIERR_UNRECOGNIZED_COMMAND; case MCI_STATUS_MODE: FIXME("MCI_STATUS_MODE not implemented yet\n"); return MCIERR_UNRECOGNIZED_COMMAND; case MCI_STATUS_MEDIA_PRESENT: FIXME("MCI_STATUS_MEDIA_PRESENT not implemented yet\n"); return MCIERR_UNRECOGNIZED_COMMAND; case MCI_STATUS_TIME_FORMAT: lpParms->dwReturn = wma->time_format; break; case MCI_STATUS_READY: FIXME("MCI_STATUS_READY not implemented yet\n"); return MCIERR_UNRECOGNIZED_COMMAND; case MCI_STATUS_CURRENT_TRACK: FIXME("MCI_STATUS_CURRENT_TRACK not implemented yet\n"); return MCIERR_UNRECOGNIZED_COMMAND; default: FIXME("Unknown command %08X\n", lpParms->dwItem); return MCIERR_UNRECOGNIZED_COMMAND; } if (dwFlags & MCI_NOTIFY) mciDriverNotify(HWND_32(LOWORD(lpParms->dwCallback)), wDevID, MCI_NOTIFY_SUCCESSFUL); return 0; }