Определение поддерживаемых ставок
Перед изменением скорости воспроизведения приложение должно проверить, поддерживается ли скорость воспроизведения объектами в конвейере. Интерфейс МВФRateSupport предоставляет методы для получения максимальной ставки вперед и обратной передачи, поддерживаемой ставки, ближайшей к запрошенной ставке, и самой медленной. Каждый из этих запросов скорости может указать направление воспроизведения и использовать тоньше. Точный показатель воспроизведения запрашивается с помощью интерфейса МВФRateControl.
Сведения об изменении скорости воспроизведения см. в разделе "Настройка скорости воспроизведения" в сеансе мультимедиа.
Общие сведения о скоростях воспроизведения см. в разделе "О контроле скорости".
Определение текущей частоты воспроизведения
Получите службу управления скоростью из сеанса мультимедиа.
IMFRateControl *pRateControl = NULL; hr = MFGetService( pMediaSession, MF_RATE_CONTROL_SERVICE, IID_IMFRateControl, (void**) &pRateControl );
Передайте инициализированный указатель интерфейса IMFMediaSession в параметре punkObject MFGetService.
Приложение должно запрашивать службу управления скоростью через сеанс мультимедиа. Во внутреннем режиме сеанс мультимедиа запрашивает объекты в топологии.
Вызовите метод IMFRateControl::GetRate, чтобы получить текущую скорость воспроизведения.
hr = pRateControl->GetRate(&bThin, &rate);
Параметр pfThin GetRate получает значение BOOL, указывающее, является ли поток тонким. Приложение должно передать значение NULL , если он не хочет запрашивать поддержку тонкая для потока. Параметр pflRate получает текущую частоту воспроизведения.
Определение ближайшей поддерживаемой частоты
Получите службу поддержки частоты из сеанса мультимедиа.
IMFRateSupport *pRateSupport = NULL; hr = MFGetService( pMediaSession, MF_RATE_CONTROL_SERVICE, IID_IMFRateSupport, (void**) &pRateSupport );
Передайте инициализированный указатель интерфейса IMFMediaSession в параметре punkObject MFGetService.
Вызовите метод МВФRateSupport::IsRateSupported, чтобы получить поддерживаемую скорость, ближайшую к запрошенной скорости воспроизведения.
float rateRequested = 4.0; float actualRate = 0; hr = pRateSupport->IsRateSupported( TRUE, rateRequested, &actualRate );
В примере запрашивается, поддерживается ли скорость воспроизведения 4.0 с утончением. Это указывается путем передачи TRUE в параметре fThin IsRateSupported. Если эта частота поддерживается, фактическийrate содержит частоту воспроизведения 4,0, и вызов завершается успешно с возвращаемым значением S_OK. Если точное значение частоты воспроизведения не поддерживается, то в фактической скорости будет получена ближайшая поддерживаемая скорость. Если скорость не поддерживается и не существует ближайшей скорости воспроизведения, вызов возвращает соответствующий код ошибки.
Эти значения могут изменяться в зависимости от того, какие компоненты конвейера загружаются. Поэтому при загрузке новой топологии следует повторно запрашивать значения.
Если требуемая скорость воспроизведения не поддерживается, один из вариантов — запрашивать каждый объект в топологии по отдельности, чтобы узнать, не поддерживает ли конкретный компонент частоту. Возможно, вы сможете перестроить топологию без этого компонента, а затем играть с требуемой скоростью. Например, если каждый компонент, кроме отрисовщика звука, поддерживает заданную частоту, можно перестроить топологию без звуковой ветви и воспроизвести по требуемой скорости без звука.
Определение самой медленно поддерживаемой скорости
Получите службу поддержки частоты из сеанса мультимедиа.
IMFRateSupport *pRateSupport = NULL; hr = MFGetService( pMediaSession, MF_RATE_CONTROL_SERVICE, IID_IMFRateSupport, (void**) &pRateSupport );
Передайте инициализированный указатель интерфейса IMFMediaSession в параметре punkObject MFGetService.
Вызовите метод МВФRateSupport::GetSlowestRate, чтобы получить самую низкую поддерживаемую скорость.
float slowestRate = 0; hr = pRateSupport->GetSlowestRate( MFRATE_REVERSE, TRUE, &slowestRate);
Примеры запросов к самой медленной скорости обратного воспроизведения с утончением. Нижняя ограничивающая скорость получается в параметре getSlowestRate.
Если обратное воспроизведение или утончение не поддерживается, вызов возвращает соответствующий код ошибки.
См. также