Поделиться через


Метод IAsyncReader::Request (strmif.h)

[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует, чтобы новый код использовал MediaPlayer, IMFMediaEngine и аудио- и видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, использующий устаревшие API, чтобы по возможности использовать новые API.]

Метод Request помещает в очередь асинхронный запрос данных.

Синтаксис

HRESULT Request(
       IMediaSample *pSample,
  [in] DWORD_PTR    dwUser
);

Параметры

pSample

Указатель на интерфейс IMediaSample примера мультимедиа, предоставленного вызывающим.

[in] dwUser

Задает произвольное значение, которое возвращается по завершении запроса.

Возвращаемое значение

Возвращает значение HRESULT . Ниже приведены возможные значения.

Код возврата Описание
S_OK
Успешно.
VFW_E_BADALIGN
Буфер не выровнен правильно.
VFW_E_SAMPLE_TIME_NOT_SET
Выборка не была маркирована по времени.
VFW_E_WRONG_STATE
Закрепление очищается.
HRESULT_FROM_WIN32(ERROR_HANDLE_EOF)
Запрошенная начальная позиция находится после конца файла.
E_OUTOFMEMORY
Недостаточно памяти.

Комментарии

Перед вызовом этого метода извлеките образец носителя из распределителя пин-кода. Метка времени выборки со смещением байтов, которые вы запрашиваете, первый и последний включительно, умножены на 10 000 000. Смещения байтов относятся к началу потока.

Начальная и стоп-позиции должны соответствовать выравниванию, которое было решено при соединении контактов. В противном случае метод может вернуть VFW_E_BADALIGN. Если согласованное выравнивание является более грубым, чем фактическое выравнивание потока, позиция остановки может превысить реальную длительность. Если это так, метод округляет позицию остановки до фактического выравнивания.

Хотя это технически является нарушением правил COM, вызывающий объект должен оставить невыполненные ссылки на выборку. Метод Request не вызывает AddRef или Release, поэтому для сохранения активного примера требуется счетчик ссылок.

Метод возвращается до завершения запроса. Вызовите метод IAsyncReader::WaitForNext , чтобы дождаться запроса. Не используйте исходный образец носителя, пока запрос находится в состоянии ожидания. Метод WaitForNext возвращает указатель на исходный пример. Если запрос выполнен успешно, пример содержит запрошенные данные. Метод WaitForNext также возвращает любое значение, указанное в параметре dwUser . Вызывающий объект может использовать это значение для идентификации примера.

Примеры

В следующем примере показана возможная вспомогательная функция для ввода пин-кода для постановки запросов в очередь:

C++
CMyPin::QueueSample(long cbFirst, long cbLast, DWORD_PTR dwuser)
{
    IMediaSample* pSample = NULL;
    HRESULT hr = m_pAlloc->GetBuffer(&pSample, NULL, NULL, 0);
    if (FAILED(hr)) 
    { 
        return hr; 
    }

    LONGLONG tStart = cbFirst * 10000000, tStop = cbLast * 10000000;
    hr = pSample->SetTime(&tStart, &tStop);
    if (SUCCEEDED(hr))
    {
        hr = m_pReader->Request(pSample, dwuser);
    }

    if (FAILED(hr))
    {
        pSample->Release();
    }
    return hr;
}

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Целевая платформа Windows
Header strmif.h (включая Dshow.h)
Библиотека Strmiids.lib

См. также раздел

Коды ошибок и успешного выполнения

Интерфейс IAsyncReader