Beispiel #1
0
/***************************************************************************
 *                              MCIQTZ_mciPut                   [internal]
 */
static DWORD MCIQTZ_mciPut(UINT wDevID, DWORD dwFlags, MCI_GENERIC_PARMS *lpParms)
{
    WINE_MCIQTZ *wma = MCIQTZ_mciGetOpenDev(wDevID);
    MCI_DGV_RECT_PARMS *rectparms;
    HRESULT hr;

    TRACE("(%04x, %08X, %p)\n", wDevID, dwFlags, lpParms);

    if(!lpParms)
        return MCIERR_NULL_PARAMETER_BLOCK;

    if (!wma)
        return MCIERR_INVALID_DEVICE_ID;

    if (!(dwFlags & MCI_DGV_RECT)) {
        FIXME("No support for non-RECT MCI_PUT\n");
        return 1;
    }

    if (dwFlags & MCI_TEST)
        return 0;

    dwFlags &= ~MCI_DGV_RECT;
    rectparms = (MCI_DGV_RECT_PARMS*)lpParms;

    if (dwFlags & MCI_DGV_PUT_DESTINATION) {
        hr = IVideoWindow_SetWindowPosition(wma->vidwin,
                rectparms->rc.left, rectparms->rc.top,
                rectparms->rc.right - rectparms->rc.left,
                rectparms->rc.bottom - rectparms->rc.top);
        if(FAILED(hr))
            WARN("IVideoWindow_SetWindowPosition failed: 0x%x\n", hr);

        dwFlags &= ~MCI_DGV_PUT_DESTINATION;
    }

    if (dwFlags & MCI_NOTIFY) {
        MCIQTZ_mciNotify(lpParms->dwCallback, wma, MCI_NOTIFY_SUCCESSFUL);
        dwFlags &= ~MCI_NOTIFY;
    }

    if (dwFlags)
        FIXME("No support for some flags: 0x%x\n", dwFlags);

    return 0;
}
Beispiel #2
0
/***************************************************************************
 *                              MCIQTZ_mciSeek                  [internal]
 */
static DWORD MCIQTZ_mciSeek(UINT wDevID, DWORD dwFlags, LPMCI_SEEK_PARMS lpParms)
{
    WINE_MCIQTZ* wma;
    HRESULT hr;
    LONGLONG newpos;

    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;

    MCIQTZ_mciStop(wDevID, MCI_WAIT, NULL);

    if (dwFlags & MCI_SEEK_TO_START) {
        newpos = 0;
    } else if (dwFlags & MCI_SEEK_TO_END) {
        FIXME("MCI_SEEK_TO_END not implemented yet\n");
        return MCIERR_INTERNAL;
    } else if (dwFlags & MCI_TO) {
        FIXME("MCI_TO not implemented yet\n");
        return MCIERR_INTERNAL;
    } else {
        WARN("dwFlag doesn't tell where to seek to...\n");
        return MCIERR_MISSING_PARAMETER;
    }

    hr = IMediaSeeking_SetPositions(wma->seek, &newpos, AM_SEEKING_AbsolutePositioning, NULL, AM_SEEKING_NoPositioning);
    if (FAILED(hr)) {
        FIXME("Cannot set position (hr = %x)\n", hr);
        return MCIERR_INTERNAL;
    }

    if (dwFlags & MCI_NOTIFY)
        MCIQTZ_mciNotify(lpParms->dwCallback, wma, MCI_NOTIFY_SUCCESSFUL);

    return 0;
}
Beispiel #3
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;
}