программный интерфейс приложения демультиплексора
Классы МПК: | G06F9/04 с применением носителей информации, содержащих только программные команды G06F13/10 программное управление для периферийных устройств |
Автор(ы): | ДЕБИК Кёрт (US), СПИД Робин К.Б. (GB), ЛЮДВИГ К. Элан (US), ДАНБАР Джеффри Т. (US) |
Патентообладатель(и): | МАЙКРОСОФТ КОРПОРЕЙШН (US) |
Приоритеты: |
подача заявки:
2003-08-21 публикация патента:
27.03.2009 |
Изобретение относится к обработке мультимедийных данных в вычислительной среде. Техническим результатом является обеспечение возможности потребителю единообразно использовать данные мультиплексированного потока, например DV, для формирования данных элементарных потоков, в том числе аудио и видео (сжатого или несжатого), и обеспечение использования демультиплексоров как независимых компонентов. На носитель информации записаны выполняемые компьютером команды для предоставления интерфейса для обеспечения связи с компонентом демультиплексора, выполняющего разделение мультиплексированного мультимедийного потока на элементарные потоки, при этом интерфейс содержит команды инициализации компонента демультиплексора и его конфигурирования, динамической установки дескриптора активного представления в отношении компонента демультиплексора, подачи нового входного мультиплексированного потока в виде входных выборок в компонент демультиплексора, извлечения из упомянутого активного представления, согласно дескриптору активного представления, по меньшей мере, одного элементарного потока и выдачу его в виде выходных выборок и сброса выборок, находящихся в текущий момент времени во входной и выходной очередях. 20 з.п. ф-лы, 7 ил.
Формула изобретения
1. Носитель информации, считываемый компьютером, на котором записаны выполняемые компьютером команды для выполнения этапа предоставления интерфейса для обеспечения связи с компонентом демультиплексора, выполняющего разделение мультиплексированного мультимедийного потока на элементарные потоки, при этом интерфейс содержит команды для:
инициализации компонента демультиплексора и его конфигурирования,
динамической установки дескриптора активного представления в отношении компонента демультиплексора,
подачи нового входного мультиплексированного потока в виде входных выборок в компонент демультиплексора,
извлечения из упомянутого активного представления, согласно дескриптору активного представления, по меньшей мере одного элементарного потока и выдачу его в виде выходных выборок, и
сброса выборок, находящихся в текущий момент времени во входной и выходной очередях.
2. Носитель информации, считываемый компьютером, по п. 1, в котором интерфейс дополнительно содержит команды для извлечения клона активного в текущий момент времени дескриптора представления в отношении компонента демультиплексора.
3. Носитель информации, считываемый компьютером, по п. 2, в котором упомянутые команды, извлекающие клон, содержат дескриптор представления.
4. Носитель информации, считываемый компьютером, по п. 1, в котором интерфейс дополнительно содержит команды для извлечения следующего представления, ждущего обработки.
5. Носитель информации, считываемый компьютером, по п. 4, в котором команды для извлечения следующего представления, ждущего обработки, содержат дескриптор представления, ждущего обработки.
6. Носитель информации, считываемый компьютером, по п. 1, в котором команды для инициализации компонента мультиплексора содержат параметры, включающие в себя:
дескриптор мультиплексированного потока,
выбранный тип мультимедиа для дескриптора мультиплексированного потока,
массив основных типов элементарных потоков, и
количество основных типов в массиве основных типов.
7. Носитель информации, считываемый компьютером, по п. 1, в котором команды для динамической установки дескриптора активного представления содержат указатель на объект дескриптора представления.
8. Носитель информации, считываемый компьютером, по п. 1, в котором команды для подачи нового входного мультиплексированного потока содержат указатель на объект выборки.
9. Носитель информации, считываемый компьютером, по п. 8, в котором команды для подачи нового входного мультиплексированного потока дополнительно содержат возвращаемое значение, в котором имеется флажок нового представления.
10. Носитель информации, считываемый компьютером, по п. 9, на котором записаны дополнительные выполняемые компьютером команды для выполнения этапов, включающих в себя:
если флажок нового представления имеет значение TRUE (истина), то:
извлекают следующее представление, ждущего обработки,
выбирают требуемые потоки, и
вызывают компонент динамической установки дескриптора активного представления в отношении компонента демультиплексора для обеспечения возможности обработки выборок из входной очереди демультиплексора.
11. Носитель информации, считываемый компьютером, по п. 1, в котором команды для извлечения из упомянутого активного представления, согласно дескриптору активного представления, по меньшей мере одного элементарного потока и выдачу его в виде выходных выборок содержат идентификатор потока и указатель на указатель на объект выборки.
12. Носитель информации, считываемый компьютером, по п. 11, в котором команды для извлечения из упомянутого активного представления, согласно дескриптору активного представления, по меньшей мере одного элементарного потока и выдачу его в виде выходных выборок дополнительно имеют возвращаемое на выходе значение.
13. Носитель информации, считываемый компьютером, по п. 12, в котором возвращаемое на выходе значение включает в себя код ошибки конца потока или код ошибки отсутствия следующих данных.
14. Носитель информации, считываемый компьютером, по п. 1, в котором интерфейс принимает мультиплексированные данные в качестве буфера данных в памяти.
15. Носитель информации, считываемый компьютером, по п. 14, в котором мультиплексированные данные имеют формат, включающий по меньшей мере один из форматов Digital Video, MPEG2, и ASF.
16. Носитель информации, считываемый компьютером, по п.1, в котором команды для инициализации компонента демультиплексора обращаются к структуре данных для использования в мультиплексоре, при этом упомянутая структура данных содержит:
первое поле, содержащее заголовок,
второе поле, содержащее дескриптор мультиплексированного потока,
третье поле, содержащее выбранный тип мультимедиа дескриптора мультиплексированного потока,
четвертое поле, содержащее массив основных типов элементарных потоков, и
пятое поле, содержащее количество основных типов в массиве основных типов.
17. Носитель информации, считываемый компьютером, по п.1, в котором команды динамической установки дескриптора активного представления для компонента обращаются к структуре данных для использования в демультиплексоре, при этом упомянутая структура данных содержит:
первое поле, содержащее заголовок, и
второе поле, содержащее дескриптор представления.
18. Носитель информации, считываемый компьютером, по п.2, в котором команды для извлечения клона активного в текущий момент времени дескриптора представления в отношении компонента демультиплексора обращаются к структуре данных для использования в демультиплексоре, причем упомянутая структура данных содержит:
первое поле, содержащее заголовок, и второе поле, содержащее дескриптор представления.
19. Носитель информации, считываемый компьютером, по п.4, в котором команды для излечения следующего представления, ждущего обработки обращаются к структуре данных для использования в демультиплексоре, при этом упомянутая структура данных содержит:
первое поле, содержащее заголовок, и
второе поле, содержащее дескриптор представления, ждущего обработки.
20. Носитель информации, считываемый компьютером, по п.1, в котором команды для подачи нового входного мультиплексированного потока в качестве входных выборок в компонент демультиплексора обращаются к структуре данных для использования в демультиплексоре, причем упомянутая структура данных содержит:
первое поле, содержащее заголовок, и
второе поле, содержащее указатель на объект выборки.
21. Носитель информации, считываемый компьютером, по п.1, в котором команды для извлечения, согласно дескриптору активного представления, по меньшей мере одного элементарного потока из упомянутого активного представления и выдачу его в виде выходных выборок обращаются к структуре данных для использования в демультиплексоре, при этом упомянутая структура данных содержит:
первое поле, содержащее заголовок,
второе поле, содержащее идентификатор потока, и
третье поле, содержащее указатель на указатель на объект выборки.
Описание изобретения к патенту
Область изобретения
Изобретение относится, в общем, к электронной обработке данных, а более конкретно к обработке мультимедийных данных в вычислительной среде.
ПРЕДШЕСТВУЮЩИЙ УРОВЕНЬ ТЕХНИКИ
Широко распространяется и быстро развивается представление мультимедийной информации, основанное на цифровой обработке данных, комбинация видео и аудио в цифровом формате для просмотра на цифровом устройстве. Почти каждый новый персональный компьютер, изготовленный в настоящее время, содержит в некотором виде мультимедийные средства. Постоянно растет объем продаж цифровых продуктов, таких как камеры, видеомагнитофоны, телефоны и телевизоры. Мультимедиа становится все более и более распространенным в области Интернет так же, как продолжается постоянное и быстрое развитие Интернет. Наряду с развитием возросли требования пользователя к эффективности такого компьютерного оборудования. Повышенные требования пользователя распространяются не только на аппаратные возможности, но также на возможности обработки самих данных.
Для удовлетворения растущих требований для мультимедийных приложений был разработан способ, известный как потоковая передача данных. Потоковая передача данных обеспечивает такую передачу данных, при которой они могут обрабатываться, как постоянный и непрерывный поток. Это предоставляет то преимущество, особенно для больших мультимедийных файлов, состоящее в том, что данные могут отображаться или прослушиваться до окончания передачи целого файла.
Первоначально структура потоковой передачи данных состояла из последовательности модулей обработки данных (например, фильтров захвата, преобразующих фильтров и фильтров информационного представления (визуализации)) с очень небольшими интеллектуальными возможностями программы управления последовательностью. Модули обработки данных, также называемые фильтрами, принимают решения по тому, как получить соединение, какие форматы данных использовать и как управлять друг другом. При соединении фильтров в последовательность протоколы определяют предварительно определенную фиксированную последовательность потока данных и управляют согласованиями соединения. Обычная последовательность согласований предназначена для согласования следующих элементов: интерфейса, носителя информации, формата данных, программ распределения и задающего генератора. Последовательность обработки данных обеспечивает комплексное решение внутри компьютерной системы.
С усложнением потоковой обработки данных индустрия признала необходимость оптимизации последовательностей обработки, которые представляли собой обработку данных с ограничениями, накладываемыми интерактивностью, например последовательностей обработки видео и аудио. Одним решением является средство DirectShow® фирмы Microsoft®Corporation, обеспечивающее воспроизведение мультимедийных потоков из локальных файлов или с серверов Интернета, захват мультимедийных потоков с устройств и преобразование формата мультимедийных потоков. DirectShow® обеспечивает возможность воспроизведения видео- и аудиосодержимого таких типов файлов, как: Windows Media Audio, Windows Media Video, MPEG, Apple®QuickTime®, Audio-Video Interleaved (AVI) и WAV (Windows Wave). DirectShow® включает в себя систему сменных подключаемых компонентов фильтров. Фильтры являются объектами, поддерживающими интерфейсы DirectShow®, которые могут оперировать потоками данных посредством считывания, копирования, изменения и записи данных в файл. Основные типы фильтров включают в себя входной фильтр, который берет данные из некоторого источника, например из файла на диске, спутниковой антенны, с сервера Интернет или кассетного видеомагнитофона VCR, и передает их на вход фильтрующей схемы, которая является соединением фильтров. Фильтры в фильтрующей схеме содержат преобразующий фильтр, который осуществляет преобразование формата данных, синхронизирующий и входной фильтр, который принимает данные и передает их; и фильтр визуализации, который формирует изображение данных, например формирует изображение данных на устройстве отображения. Данные могут быть также визуализированы в любом местоположении, которое принимает мультимедиа. Другие типы фильтров, включенных в DirectShow®, включают в себя целевые фильтры, которые добавляют эффекты, не изменяя тип данных, и фильтры синтаксического анализатора, которые "понимают" формат исходных данных и умеют считывать правильные байты, создают временные ярлыки и выполняют поиск.
Во время работы все данные проходят от фильтра к фильтру совместно с большим количеством информации управления. Каждый фильтр содержит объекты, называемые "выводами (пинами)" , которые используются для соединения с другими фильтрами. Когда фильтры соединены, с использованием выводов, образуется фильтрующая схема. Следует отметить, что имеется различие между "фильтрующей схемой", которая является понятием, обозначающим группу соединенных фильтров, и "Фильтрующей Схемой", являющейся объектом, который пользователь создает в DirectShow®, управляющим группой соединенных фильтров, "фильтрующей схемой". "Фильтрующую Схему" более правильно называть администратором фильтрующей схемы. Для управления потоком данных и соединениями в фильтрующей схеме DirectShow® содержит управляющую программу (администратор) фильтрующей схемы. Администратор фильтрующей схемы способствует обеспечению соединения фильтров в соответствующем порядке. Однако данные и большая часть управления не проходят через администратор фильтрующей схемы. Фильтры должны быть связаны соответствующим образом. Например, администратор фильтрующей схемы должен отыскать конфигурацию (структуру) визуализации, определить типы доступных фильтров, связать фильтры в соответствующем для данного типа данных порядке и обеспечить соответствующий фильтр визуализации.
Хотя фильтры обеспечивали возможность многократного использования программ, использование фильтров также создавало некоторые непредвиденные проблемы. Одной из проблем, создаваемой фильтрами, является большое количество программных интерфейсов приложений (API) для созданных фильтров. Каждый фильтр, по существу, имеет отдельный API. В результате данный фильтр должен допускать возможность сопряжения с API для каждого фильтра, к которому он может быть присоединен. Также использование фильтров создает проблему при отключении заданного фильтра. При отключении заданного фильтра в графе любой фильтр, осуществлявший сопряжение с отключенным фильтром, требует другой соответствующий интерфейс. В основном, затруднительно запрограммировать фильтр для корректной обработки потери сопряжения, так как состояние фильтра при потере сопряжения может быть неизвестно. Следовательно, потеря сопряжения имеет тенденцию приводить к непредсказуемому режиму в фильтрах и, в конечном счете, к некорректному выполнению программ. Дополнительно, общее управление в DirectShow® распределено между двумя блоками. Интерфейс между фильтрами управляет потоком данных, в то время как администратор фильтра управляет реализацией и удалением фильтров. Такое распределение управления делает громоздким проектирование программного обеспечения, так как неизбежно имеются некоторые функции управления, которые "пересекают" границу между блоками. Другая проблема с DirectShow® состоит в том, что фильтры берут на себя ответственность за согласование формата мультимедиа и за функциональные возможности организации буферизации данных. Для выполнения этой задачи фильтры взаимодействуют с другими фильтрами. Зависимость от фильтров приводит к восприимчивости приложений, построенных на DirectShow®, к ошибкам и недостаткам, которые могли быть запрограммированы в фильтре. Следовательно, плохо написанный фильтр может легко снизить эффективность фильтрующей схемы и приложения, связанного с фильтрующей схемой.
Имеется потребность в усовершенствовании архитектуры DirectShow®. Более конкретно, имеется потребность в усовершенствовании управления обработкой мультимедийных данных.
СУЩНОСТЬ ИЗОБРЕТЕНИЯ
Изобретение включает в себя набор интерфейсов, структур данных и событий для представления демультиплексора (устройства распределения) мультимедийных данных. Структура данных использует ряд полей, каждое из которых содержит элемент команды. В одном варианте осуществления для правильного функционирования демультиплексора формируется по меньшей мере семь команд, включающих команды Initialize (инициализировать), SetPresentationDescriptor (установить дескриптор представления), GetPresentationDescriptor (извлечь дескриптор представления), GetPendingPresentationDescriptor (извлечь дескриптор представления, ждущего обработки), ProcessInput (обработать ввод), ProcessOutput (обработать вывод) и Flush (сбросить). Интерфейсы в совокупности известны как Интерфейс Программирования Приложения Демультиплексора (Demux API). Demux API обеспечивает возможность потребителю единообразно использовать данные мультиплексированного потока, такие как цифровые (DV) видеоданные, для формирования данных элементарного потока, например аудио и видео (сжатого или несжатого).
Способ Initialize используется для инициализации и конфигурирования объекта демультиплексора и имеет параметры, которые используются для конфигурирования демультиплексора. Параметры включают объект дескриптора мультиплексированного потока, который описывает мультиплексированный поток, выбранный тип среды для дескриптора мультиплексированного потока, массив основных типов элементарных потоков, в которых заинтересован пользователь при извлечении их в качестве выходных данных из демультиплексора, и количество основных типов в массиве основных типов.
Метод SetPresentationDescriptor используется для динамической установки дескриптора активного представления об объекте демультиплексора. Метод SetPresentationDescriptor содержит указатель на объект дескриптора представления. Метод ProcessInput используется для обеспечения нового входного мультиплексированного потока для объекта демультиплексора и содержит указатель на объект выборки. Метод ProcessInput имеет возвращаемое значение, которое имеет флажок нового представления. Если флажок нового представления имеет значение TRUE (истина), то в мультиплексированной выборке представление изменилось на основе дескриптора представления. Пользователь должен вызвать метод GetPendingPresentationDescriptor для извлечения следующего представления, ждущего обработки, выбора требуемых потоков и вызвать метод SetPresentationDescriptor, чтобы обеспечить возможность обработки выборок из входной очереди демультиплексора.
Метод ProcessOutput используется для извлечения по меньшей мере одного элементарного потока из активного представления. Метод ProcessOutput содержит идентификатор потока и указатель на указатель на объект выборки. Метод ProcessOutput дополнительно содержит выходное возвращаемое значение. Выходное возвращаемое значение содержит код ошибки конца потока и код ошибки отсутствия следующих данных.
Метод Flush используется для сброса входных и выходных выборок, находящихся в очереди в текущий момент времени. Для метода Flush параметры не требуются.
Метод GetPresentationDescriptor используется для извлечения клона (абсолютной копии) дескриптора текущего активного представления об объекте демультиплексора. Метод GetPresentationDescriptor содержит дескриптор представления.
Метод GetPendingPresentationDescriptor используется для извлечения следующего представления, ждущего обработки. Метод GetPendingPresentationDescriptor содержит ждущий обработки дескриптор представления.
Дополнительные возможности и преимущества изобретения будут ясны из последующего подробного описания поясняющих вариантов осуществления, рассматриваемого совместно с приложенными чертежами.
КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙ
Хотя в приложенной формуле изобретения обстоятельно изложены признаки настоящего изобретения, изобретение, его задачи и преимущества могут стать более понятны из последующего подробного описания, рассматриваемого совместно с приложенными чертежами.
Фиг. 1 - структурная схема, в общем иллюстрирующая возможную компьютерную систему, в которой реализуется настоящее изобретение.
Фиг. 2 - структурная схема, по существу, иллюстрирующая возможную компьютерную среду, в которой функционирует настоящее изобретение.
Фиг. 3 - структурная схема, иллюстрирующая демультиплексор, согласно раскрытию настоящего изобретения.
Фиг. 4 - диаграмма переходов демультиплексора, предусмотренного настоящим изобретением.
Фиг. 5 - диаграмма структуры данных, иллюстрирующая модель структуры данных, обеспечивающей конструирование вызовов, согласно настоящему изобретению.
Фиг. 6 - упрощенная диаграмма структуры данных, иллюстрирующая структуру возможного сообщения, согласно настоящему изобретению.
Фиг. 7 - блок-схема, иллюстрирующая этапы, выполняемые для загрузки и функционирования демультиплексора, согласно способам настоящего изобретения, когда приложение не согласует приемник мультимедиа.
ПОДРОБНОЕ ОПИСАНИЕ ПРЕДПОЧТИТЕЛЬНОГО ВАРИАНТА ОСУЩЕСТВЛЕНИЯ ИЗОБРЕТЕНИЯ
Изобретение обеспечивает набор интерфейсов, структур данных и событий для представления демультиплексора мультимедийных данных, которые в совокупности называются API демультиплексора. API обеспечивает потребителю возможность единообразно использовать данные мультиплексированного потока, например DV, MPEG2, ASF и т.д., для формирования данных элементарного потока, например аудио и видео (сжатого или несжатого). API демультиплексора поддерживает динамическое формирование дескрипторов нового потока на основе данных инициализации мультиплексированного потока и поддерживает динамическое формирование дескрипторов нового потока на основе выборок мультиплексированного потока. Дополнительно API демультиплексора поддерживает внешнюю инициализацию посредством метаданных о мультиплексированном потоке и внутреннюю инициализацию посредством выборок мультиплексированного потока и поддерживает формирование демультиплексированных выборок, которые могут занимать несколько буферов. В контексте архитектуры Базовых концепций Мультимедиа Media Foundation Microsoft®Corporation API демультиплексора прежде всего управляется процессором мультимедиа, на который выводит данные, как описано ниже. API демультиплексора разработан так, чтобы хорошо определить использование демультиплексора для любой мультимедийной архитектуры.
Согласно чертежам, в которых подобное ссылочные позиции относятся к подобным элементам, иллюстрируется изобретение, реализованное в соответствующей вычислительной среде. Хотя в этом нет необходимости, изобретение будет описано в основном контексте компьютерно-выполнимых команд, например программных модулей, выполняемых персональным компьютером. По существу, программные модули содержат подпрограммы, программы, объекты, компоненты, структуры данных и т.д., которые выполняют конкретные задачи или реализуют определенные типы абстрактных данных. Кроме того, для специалистов в данной области техники очевидно, что изобретение может быть практически осуществлено с другими конфигурациями вычислительной системы, включая переносные устройства, многопроцессорные системы, программируемую, или основанную на микропроцессорах, бытовую электронику, сетевые персональные компьютеры PC, миникомпьютеры, универсальные вычислительные машины и т.д. Изобретение может быть практически осуществлено также в распределенных вычислительных средах, где задачи выполняются удаленными устройствами обработки данных, связанными посредством системы связи. В распределенной вычислительной среде программные модули могут быть размещены в локальных и в удаленных запоминающих устройствах.
Фиг. 1 иллюстрирует возможный вариант соответствующей среды 100 вычислительной системы, в которой может быть реализовано изобретение. Среда 100 вычислительной системы является только одним возможным вариантом соответствующей вычислительной среды и не предназначена для наложения какого-либо ограничения на область использования или функциональные возможности изобретения. Также вычислительная среда 100 не должна интерпретироваться требующей или зависимой от какого-либо компонента, иллюстрируемого возможной средой 100, или их комбинации.
Изобретение может функционировать совместно со многими другими универсальными или специализированными средами или конфигурациями вычислительной системы. Возможные варианты известных вычислительных систем, сред и/или конфигураций, которые могут соответствовать для использования с изобретением, включают в себя: персональные компьютеры, серверные компьютеры, переносные или портативные устройства, планшетные устройства, многопроцессорные системы, системы, основанные на микропроцессорах, компьютерные приставки к телевизору, программируемую бытовую электронику, сетевые PC, миникомпьютеры, универсальные вычислительные машины, распределенные вычислительные среды, содержащие любые из вышеупомянутых систем или устройств, и т.д.
Изобретение может быть описано в основном контексте компьютерно-выполнимых команд, например программных модулей, выполняемых персональным компьютером. По существу, программные модули содержат подпрограммы, программы, объекты, компоненты, структуры данных и т.д., которые выполняют конкретные задачи или реализуют определенные типы абстрактных данных. Изобретение может быть осуществлено практически также в распределенных вычислительных средах, где задачи выполняются удаленными устройствами обработки данных, связанными посредством системы связи. В распределенной вычислительной среде программные модули могут быть размещены в запоминающей среде локального и/или удаленного компьютера, включая запоминающие устройства.
Согласно фиг. 1 возможная система для реализации изобретения содержит универсальное вычислительное устройство в виде компьютера 110. Компоненты компьютера 110 могут содержать процессор 120, системную память 130 и системную шину 121, соединяющую различные компоненты системы, в том числе системную память с процессором 120, при этом компоненты не ограничиваются ими. Системная шина 121 может быть любого из нескольких типов шинных структур, включая шину памяти или контроллер памяти, периферийную шину и локальную шину, использующую любую из многих архитектур шины. В качестве возможного варианта такие архитектуры включают шину архитектуры, соответствующей промышленному стандарту (ISA), шину микроканальной архитектуры (MCA), шину расширенной стандартной архитектуры для промышленного применения (EISA), локальную шину Ассоциации по стандартам в области видеоэлектроники (VESA) и 32-разрядную системную шину с возможностью расширения до 64 разрядов, взаимодействие через которую происходит без участия центрального процессора (PCI), также известную как шину Mezzanine, и т.д.
Компьютер 110 обычно содержит несколько носителей информации, считываемых компьютером. Носитель информации, считываемый компьютером, может быть любым доступным носителем информации, к которому может осуществить доступ компьютер 110, и включает в себя энергозависимый и энергонезависимый, съемный и несъемный носитель информации. В качестве возможного варианта носитель информации, считываемый компьютером, может включать в себя запоминающую среду компьютера, средство связи и т.д. Запоминающая среда компьютера включает в себя энергозависимую и энергонезависимую, съемную и несъемную среду, реализованную любым способом или технологией для хранения информации, такими как команды, считываемые компьютером, структуры данных, программные модули или другие данные. Запоминающая среда компьютера включает в себя оперативное запоминающее устройство RAM (ОЗУ), постоянное запоминающее устройство ROM (ПЗУ), EEPROM (СППЗУ), флэш-память или другую технологию памяти, компакт-диск CD-ROM, универсальные цифровые диски DVD (УЦД) или другой оптический накопитель на дисках, магнитные кассеты, магнитную ленту, магнитный накопитель на дисках или другие магнитные запоминающие устройства и т.д. или любую другую среду, которая может использоваться для хранения необходимой информации и к которой может осуществить доступ компьютер 110. Средство связи обычно воплощает команды, считываемые компьютером, структуры данных, программные модули или другие данные в модулированном сигнале данных, например несущей или другом механизме переноса информации, и включает любое средство передачи информации. Термин "модулированный сигнал данных" означает сигнал, который имеет одну или большее количество из набора его характеристик, измененных таким образом, чтобы кодировать информацию в сигнале. В качестве возможного варианта средство связи включает проводное средство, такое как проводная сеть или прямое кабельное соединение, и беспроводное средство, такое как акустическое, радио, инфракрасное и другое беспроводное средство и т.д. Комбинации любых упомянутых выше средств также должны быть включены в контекст носителей информации, считываемых компьютером.
Системная память 130 включает в себя запоминающую среду компьютера в виде энергозависимой и/или энергонезависимой памяти, например ПЗУ 131 и ОЗУ 132. Базовая система 133 ввода/вывода BIOS (БИОС), содержащая базовые процедуры, способствующие передаче информации между элементами внутри компьютера 110, такие как используются при запуске, обычно хранится в ПЗУ 131. ОЗУ 132 обычно содержит данные и/или программные модули, к которым можно осуществить доступ немедленно, и/или с которыми в текущее время оперирует процессор 120. В качестве возможного варианта фиг. 1 изображает операционную систему 134, прикладные программы 135, другие программные модули 136 и данные 137 программы.
Компьютер 110 также может содержать другие съемные/несъемные, энергозависимые/энергонезависимые варианты запоминающей среды компьютера. Исключительно в качестве возможного варианта фиг. 1 изображает накопитель 141 на жестких дисках, осуществляющий считывание с несъемного, энергонезависимого магнитного носителя информации и запись на него, накопитель 151 на магнитных дисках, который осуществляет считывание с съемного энергонезависимого магнитного диска 152 и запись на него, и накопитель 155 на оптических дисках, который осуществляет считывание с съемного энергонезависимого оптического диска 156, например, компакт-диска CD-ROM или другого оптического носителя информации, и запись на него. Другие съемные/несъемные, энергозависимые/энергонезависимые варианты запоминающей среды компьютера, которые могут быть использованы в возможной операционной среде, включают в себя кассеты на магнитной ленте, карточки флэш-памяти, универсальные цифровые диски, ленту для цифрового видеомагнитофона, твердотельное ОЗУ, твердотельное ПЗУ и т.д. Накопитель 141 на жестких дисках обычно подсоединен к системной шине 121 посредством интерфейса несъемной памяти, например интерфейса 140, а накопитель 151 на магнитных дисках и накопитель 155 на оптических дисках обычно подсоединен к системной шине 121 посредством интерфейса съемной памяти, например интерфейса 150.
Накопители на дисках и соответствующие им варианты запоминающей среды компьютера, описанные выше и изображенные на фиг. 1, обеспечивают хранение команд, считываемых компьютером, структур данных, программных модулей и других данных для компьютера 110. Например, на фиг. 1 изображен накопитель 141 на жестких дисках, в котором хранится операционная система 144, прикладные программы 145, другие программные модули 146 и данные 147 программы. Следует отметить, что указанные компоненты могут быть такими же, как операционная система 134, прикладные программы 135, другие программные модули 136 и данные 137 программы, или могут быть отличны от них. Здесь операционной системе 144, прикладным программам 145, другим программным модулям 146 и данным 147 программы присвоены другие ссылочные позиции для иллюстрации того, что, как минимум, они являются другими копиями. Пользователь может осуществлять ввод команд и информации в компьютер 110 посредством устройств ввода, таких как клавиатура 162 и указательное устройство 161, обычно определенное как мышь, шаровой указатель или сенсорная панель, микрофон 163, планшет или электронный цифратор 164. Другие устройства ввода (не изображены) могут включать в себя джойстик, игровую панель, спутниковую антенну и т.д. Часто эти и другие устройства ввода соединены с процессором 120 посредством пользовательского интерфейса 160, подсоединенного к системной шине, но они могут быть соединены с процессором посредством другого интерфейса и другими шинными структурами, такими как параллельный порт, игровой порт или универсальная последовательная шина USB. К системной шине 121 также посредством интерфейса, такого как видеоинтерфейс 190, подсоединен монитор 191 или другой тип устройства отображения. Следует отметить, что монитор и/или панель сенсорного экрана могут быть физически соединены с корпусом, в который встроено вычислительное устройство 110, например персональный компьютер планшетного типа. Дополнительно компьютеры, такие как вычислительное устройство 110, могут также содержать другие периферийные устройства вывода, например динамики 197 и принтер 196, которые могут быть подсоединены посредством интерфейса 194 периферийных устройств вывода, и т.д.
Компьютер 110 может функционировать в среде с сетевой структурой с использованием логических соединений с одним или большим количеством удаленных компьютеров, например удаленным компьютером 180. Удаленный компьютер 180 может быть персональным компьютером, сервером, маршрутизатором, сетевым PC, одноранговым устройством или другим узлом общей сети и обычно содержит многие или все элементы, описанные выше в отношении компьютера 110, хотя фиг. 1 изображает только запоминающее устройство 181. Указанные логические соединения, изображенные фиг.1, включают в себя локальную сеть связи (ЛС) 171 и глобальную сеть связи (ГС) 173, но могут также включать в себя другие сети связи. Такие варианты сетевой среды часто используются в офисах, корпоративных вычислительных сетях, сетях интранет (корпоративных локальных сетях повышенной надежности с ограниченным доступом) и в Интернет. Например, вычислительная система 110 может содержать машину-источник информации, из которой переносятся данные, а удаленный компьютер 180 может содержать машину-адресат. Следует, однако, отметить, что соединение машины-источника и машины-адресата посредством сети или любого другого средства не требуется, вместо этого данные могут переноситься через носитель информации, который может быть записан платформой источника и считан платформой или платформами адресата.
При использовании в сетевой среде ЛС компьютер 110 подсоединяется к ЛС 171 посредством сетевого интерфейса или адаптера 170. При использовании в сетевой среде ГС компьютер 110 обычно содержит модем 172 или другое средство для установления связи через ГС 173, например Интернет. Модем 172, который может быть внутренним или внешним, может быть подсоединен к системной шине 121 посредством пользовательского интерфейса 160 ввода или другого соответствующего механизма. В среде с сетевой структурой программные модули, описанные в отношении компьютера 110, или их части могут храниться в удаленном запоминающем устройстве. В качестве возможного варианта фиг. 1 изображает удаленные прикладные программы 185 как хранящиеся на запоминающем устройстве 181. Ясно, что показанные сетевые соединения являются возможными вариантами, и могут быть использованы другие средства установления линии связи между компьютерами.
В последующем описании изобретение будет описано в отношении действий и символических представлений операций, которые выполняются одним или большим количеством компьютеров, если не указано иначе. Также будет понятно, что такие операции и действия, которые иногда упоминаются как компьютерно-выполнимые, включают в себя осуществляемое процессором компьютера манипулирование электрическими сигналами, представляющими данные в структурном виде. Такое манипулирование преобразует данные или сохраняет их в местоположениях в системе памяти компьютера, что переконфигурирует или изменяет иным образом функционирование компьютера способом, известным специалистам в данной области техники. Структуры данных, где хранятся данные, являются физическими местоположениями памяти, имеющими определенные свойства, определяемые форматом данных. Однако, хотя изобретение описано в определенном выше контексте, не предполагается ограничение изобретения этим контекстом, поскольку для знающих технику очевидно, что разные операции и действия, описанные далее, могут быть реализованы также аппаратно.
Согласно фиг. 2 демультиплексор, предусмотренный настоящим изобретением, может функционировать в архитектуре Базовых концепций Мультимедиа Media Foundation, которая является реализацией одной из архитектур мультимедиа Microsoft. Хотя фиг. 2 изображает демультиплексор в архитектуре Media Foundation, очевидно, что API демультиплексора, предусмотренного изобретением, может использоваться в других архитектурах мультимедиа. До непосредственного описания демультиплексора необходимо описать Media Foundation. Media Foundation является архитектурой, представленной компонентами. Как изображено, Media Foundation содержит компоненты уровня 211 ядра, ответственные за некоторый базовый модуль функциональных возможностей в Media Foundation, и компоненты уровня 201 Управления, ответственные за выполнение более общих задач с использованием базовых компонентов Ядра.
Компоненты уровня 211 ядра включают в себя источники 210 мультимедиа и источники 214 потока, которые обеспечивают передачу мультимедийных данных через унифицированный хорошо определенный интерфейс. Источники 210 мультимедиа описывают представление, включая потоки, которые должны быть доступны. Существует много реализаций источников мультимедиа для обеспечения мультимедийных данных из различных типов мультимедийных файлов или устройств. Уровень 211 ядра дополнительно содержит модули преобразования, изображенные блоком 208, которые выполняют некоторого вида операции преобразования мультимедийных данных через унифицированный хорошо определенный интерфейс. Возможными вариантами преобразований являются кодеки, компоненты изменения размера видео, модули повторной выборки звука, статистические процессоры, модули повторной выборки цвета и т.д. Демультиплексор, предусмотренный настоящим изобретением, который в качестве входных данных берет перемеженные (чередующиеся) мультимедийные данные и разделяет данные в потоки мультимедийных данных, используемые индивидуально, является преобразованием в архитектуре фиг. 2. Блок 208 дополнительно включает в себя мультиплексоры, которые принимают индивидуальные потоки мультимедийных данных и объединяют их в перемеженные мультимедийные данные. Мультиплексоры совместно используют унифицированный хорошо определенный интерфейс, и существуют многие реализации для мультиплексирования в разные типы мультимедийных данных. Уровень 211 ядра дополнительно включает в себя приемники 212 (выходных данных) потока и приемники 230 (выходных данных) мультимедиа. Приемники 230 мультимедиа принимают на входе мультимедийные данные через унифицированный, хорошо определенный интерфейс. Существуют многие реализации приемников мультимедиа для выполнения различных функций с мультимедийными данными. Например, запись мультимедийных данных в заданный тип файла или отображение мультимедийных данных на мониторе с использованием видеоплаты.
Компоненты уровня 201 управления используют компоненты уровня 211 ядра для выполнения более простым способом задач более высокого уровня. Обычно для заданной задачи компонент уровня управления использует много различных компонентов уровня ядра. Например, воспроизведение мультимедийного файла использует источник мультимедиа для считывания файла с диска и анализа данных, один или большее количество преобразователей для восстановления сжатых мультимедийных данных и один или большее количество приемников мультимедиа для отображения мультимедийных данных. Уровень 201 управления содержит спецпроцессор 260 мультимедиа, который взаимодействует с приложением 202 для приема и передачи потоков мультимедийных данных, сеанс 240 мультимедиа, процессор 220 мультимедиа и загрузчик 250 топологии, изображенный внутри сеанса 240 мультимедиа. Загрузчик 250 топологии является компонентом уровня управления, ответственным за описание потока данных между компонентами уровня ядра. Компоненты уровня управления могут быть сконфигурированы так, чтобы избежать доступа к большему количеству элементарных компонентов уровня ядра, используемых уровнем управления. Данные проходят через систему, начиная с источника 210 мультимедиа, через сеанс 240 мультимедиа на процессор 220 мультимедиа и выводятся в приемнике 230 мультимедиа. Процессор 220 мультимедиа запускает конвейер источников мультимедиа и других компонентов в топологии. Сеанс 240 мультимедиа осуществляет руководство, когда возникает событие в топологии, и загрузчик 250 топологии подтверждает, что предписанные события в топологии происходят. Сеанс 240 мультимедиа также конфигурирует процессор 220 мультимедиа и использует выборки, возвращенные процессором 210 мультимедиа. Он осуществляет это в контексте спецпроцессора 260 мультимедиа и передает выборки от процессора 220 мультимедиа к приемникам мультимедиа, которые он согласовал с вызывающей программой спецпроцессора 260 мультимедиа (например, приложения 202). Компоненты в топологии включают в себя компоненты источника 210 мультимедиа и компоненты приемника 230 мультимедиа, а также другие элементы. Система 200 базовых концепций мультимедиа обеспечивает интерфейсы и схему распределения для соединения объектов мультимедиа потоковой обработки данных. Система обеспечивает пользователю возможность конкретизировать соединения между унифицированными или специализированными источниками, преобразованиями и объектами приемника посредством символической абстракции, используя понятие топологии.
Согласно фиг. 3 ниже приведено краткое описание демультиплексора 300. В последующем описании будут использованы ссылки на команды. Эти команды описаны ниже. API демультиплексора разделяет формат данных из источника данных. API демультиплексора принимает мультиплексированные данные как буфер данных в оперативной памяти, и выполняет операцию демультиплексирования. Это дает требуемый результат, состоящий в том, что много разных источников данных могут использовать одну реализацию демультиплексора для выполнения указанной операции. Например, DV данные могут поступать непосредственно из DV камеры, но также могут храниться в виде файла на жестком диске. В этом случае существует два фрагмента кода для формирования мультиплексированных DV данных (например, один, который осуществляет согласование с камерой, другой, который осуществляет согласование с файловой системой), но может быть использована одна и та же реализация демультиплексора. Демультиплексор 300 поддерживает интерфейс IMFDemultiplexer и ответственен за разбиение мультиплексированного потока на части элементарных потоков. Демультиплексор 300 функционирует в синхронном режиме (подобном DMO) и может обрабатывать динамические изменения в доступных элементарных потоках, вызванные изменениями в мультиплексированном потоке. Он согласует и формирует выборки, которые передаются через интерфейс IMFsample, и размещает сформированные выборки, охватывающие несколько буферов.
Мультиплексированный поток 302 является единым потоком, содержащим более одного элементарного потока. Элементарный поток 304, 306 является потоком подобных элементов (например, аудио, видео и т.д.). Нет необходимости во взаимно однозначном соответствии между мультиплексированными выборками (М) 308 и элементарными выборками (Э) 310, 312. Например, может существовать, а может и не существовать полная элементарная выборка для каждого элементарного потока в каждой мультиплексированной выборке. Дополнительно, также не существует конкретного требования на то, чтобы элементарные выборки были расположены в правильном порядке в мультиплексированном потоке. Элементарные выборки, выходящие из потока, могут не использовать совместно одинаковые временные метки. Один элементарный поток может быть смещен относительно другого. Некоторые мультиплексированные потоки могут содержать только один набор элементарных потоков на протяжении потока. Некоторые мультиплексированные потоки могут иметь разные наборы элементарных потоков в разное время.
Каждый набор координированных элементарных потоков называется представлением 320. Каждый набор имеет соответствующий дескриптор 322 представления (П). Этот дескриптор 322 представления имеет две основные задачи. Во-первых, он описывает типы мультимедиа каждого элементарного потока. Во-вторых, он обеспечивает механизм для выбора, какие из доступных потоков должны быть извлечены демультиплексором 300. Текущее Представление 324 всегда описывает выбранные потоки и типы данных текущих выходных потоков.
Прежде чем выборка может быть обработана демультиплексором 300, используется алгоритм разбиения для преобразования мультиплексированных выборок в элементарные выборки для того, чтобы стало известно, какие потоки необходимо извлечь. Эта информация содержится в дескрипторе 322 представления. До выбора потоков дескриптор представления «ждет обработки». После выбора потоков дескриптор представления становится "активным". Чтобы сделать представление активным, его извлекают из очереди 326 представлений, ждущих обработки, посредством вызова GetPendingPresentationDescriptor. Выбираются соответствующие потоки и затем вызывающая программа вызывает метод SetPresentationDescriptor. В этот момент (если выполнены определенные условия) представление становится активным представлением 324 и удаляется из очереди 326 представлений, ждущих обработки. Представление, ждущее обработки, может стать активным, только если обслужены все выходные данные из предшествующего активного представления.
Демультиплексор 300 содержит по меньшей мере два набора очередей. Очереди бывают входными очередями 330 и выходными очередями 340, 342. При вызове ProcessInput() на демультиплексоре 300 входные данные могут обрабатываться сразу или помещаются во входную очередь 330. Как только данные обработаны, то они помещаются в выходную очередь 340, 342. Типы данных и потоки, доступные в выходных очередях, всегда соответствуют текущему активному представлению 324.
Теперь, после общего описания демультиплексора 300, будут описаны состояния и переходы демультиплексора 300. В последующем описании будут сделаны ссылки на команды. Эти команды описаны ниже. Согласно фиг. 4, когда демультиплексор 300 создан, до вызова команды Initialize он находится в неинициализированном состоянии 400. В этом состоянии Initialize является единственной разрешенной операцией на объекте 300 демультиплексора. Вызов Initialize() переводит демультиплексор 300 в состояние 402 ожидания.
Состояние 402 ожидания указывает, что разрешенные активные представления отсутствуют. Вызов ProcessOutput будет неуспешным. Для установки активного представления процессор 220 мультимедиа вызывает GetPendingPresentationDescriptor(), выбирает соответствующие потоки и вызывает SetPresentationDescriptor(). Если вызов GetPendingPresentationDescriptor() неуспешен, то вызывается ProcessInput(). Затем снова вызывается GetPendingPresentationDescriptor(), пока не станет возможным получить дескриптор 322 представления. При установке PresentationDescriptor на демультиплексоре 300 он перейдет в нейтральное состояние 404. Вызов Flush() сбросит все поставленные в очередь входные и выходные данные, и демультиплексор 300 перейдет в состояние 402 ожидания.
В нейтральном состоянии 404 разрешены вызовы всех функций (за исключением инициализации). Когда при вызове ProcessInput обнаруживается новое представление и обслужена последняя выборка из текущего представления из выходной очереди, демультиплексор 300 перейдет в состояние 402 ожидания.
Некоторые потоки имеют фиксированные и конечные длительности, что может быть обнаружено на основе содержимого потока. Когда обнаружена такая ситуация и все выходные данные обслужены, демультиплексор перейдет в состояние 406 end_of_stream конца потока. Все последующие вызовы будут возвращать соответствующий код ошибки.
При возникновении в демультиплексоре 300 неустранимой ошибки он перейдет в состояние 408 ошибки. Состояние 408 ошибки достижимо из любого другого состояния. Когда требуется удалить демультиплексор 300, вызывается Release(), и демультиплексор 300 переходит в конечное состояние 410 до своего удаления из системы. При освобождении последней ссылки на демультиплексор 300 затем демультиплексор 300 удаляется из памяти, независимо от того, в каком из состояний он находится. Releas() может быть вызвана из любого состояния, включая неинициализированное состояние.
Теперь, после описания состояний и переходов демультиплексора 300, будут описаны команды, на которые делались ссылки выше. Эти команды включают в себя Initialize(), SetPresentationDescriptor(), GetPresentationDescriptor(), GetPendingPresentationDescriptor(), ProcessInput(), ProcessOutput() и Flush().
Фиг. 5 является примерной диаграммой структуры данных, иллюстрирующей базовую структуру 460 данных сообщения, используемую для создания семи сообщений API демультиплексора, предусмотренного настоящим изобретением. Как можно увидеть, структура 460 данных сообщения содержит несколько полей 4621-N. В предпочтительном варианте осуществления первое поле 4621 зарезервировано для Заголовка. Остальные поля являются параметрами.
Команда Initialize создается в соответствии с структурой данных, предусмотренной настоящим изобретением. Как можно увидеть из диаграммы структуры данных фиг. 6, команда 480 Initialize создается из нескольких полей 482-490. Этими полями являются поле 482 заголовка, поле 484 объекта дескриптора потока, поле 486 типа мультимедиа, поле 488 количества основных типов и поле 490 массива основных типов. Каждая из различных команд создается аналогично, как проиллюстрировано фиг. 5, и описание каждой команды приведено ниже.
Метод Initialize() конфигурирует и инициализирует объект 300 демультиплексора. Дескриптор мультиплексированного потока может содержать соответствующие метаданные для инициализации состояния демультиплексора (включая любые данные заголовка и т.д.). Синтаксис команды следующий:
HRESULT Initialize(
IMFStreamDescriptor* pMuxedStreamDescriptor,
IMFMediaType* pSelectedMediaType,
DWORD cMajorTypes,
GUID* aMajorTypes,
);
Параметр pMuxedStreamDescriptor является входным параметром и является указателем на объект дескриптора потока, описывающего мультиплексированный поток. Первичная задача этого параметра состоит в том, чтобы обеспечить возможность использования демультиплексором 300 любых метаданных, которые могут быть в дескрипторе потока. Параметр pSelectedMediatype является входным параметром, определяющим выбранный тип мультимедиа для параметра pMuxedStreamDescriptor. Он определяет тип мультимедиа, соответствующий выборкам, которые передаются на Демультиплексор 300 в вызовах ProcessInput(). Параметр cMajorTypes является входным параметром, определяющим количество основных типов в массиве aMajorType. Этот параметр может быть нулевым. Параметр aMajorTypes является входным параметром, и он является массивом основных типов элементарных потоков, в извлечении которых в качестве выходных данных из демультиплексора 300 заинтересована вызывающая программа. Этот параметр может быть нулевым NULL, если cMajorTypes равен нулю. Заданный по умолчанию поток каждого из основных типов, обнаруженных в массиве, будет выбран в дескриптор представления, возвращаемый командой GetPendingPresentationDescriptor(). Если метод выполнен успешно, то он возвращает значение S_OK. Если метод выполнен неуспешно, то он возвращает код ошибки. Если представление доступно, то оно может быть извлечено посредством метода GetPendingPresentationDescriptor. Если представление недоступно после инициализации, то представление может стать доступным после подачи данных на демультиплексор посредством ProcessInput.
Метод SetPresentationDescriptor устанавливает дескриптор активного представления на демультиплексоре 300, указывающий новый выбор потоков, в котором заинтересована вызывающая программа. Дескриптор представления должен быть дескриптором, сформированным посредством метода GetPresentationDescriptor или метода GetPendingPresentationDescriptor. Синтаксис команды следующий:
HRESULT SetPresentationDescriptor(
IMFPresentationDescriptor* pPresentationDescriptor
);
Параметр pPresentationDescriptor является указателем на объект дескриптора представления. Если метод выполнен успешно, то он возвращает S_OK. Метод может быть выполнен неуспешно с MF_E_INVALID_PRESENTATION, если дескриптор представления недопустим. Метод может быть выполнен неуспешно с MF_E_OUTPUT_PENDING, если дескриптор представления является представлением, ожидающим обработки, и остаются выходные данные из текущего активного представления, ждущие обработки. Если существуют выходные данные из текущего активного представления, ждущие обработки, то представлением, ожидающим обработки, не может быть вызван метод SetPresentationDescriptor. Активное представление может вызывать SetPresentationDescriptor() для выбора или отмены выбора потоков. Если отменен выбор потока, то все выборки из этого потока, находящиеся в выходной очереди, теряются. Если выбран новый поток, то выборки из этого потока станут доступны в некоторый последующий момент времени. Так как разные потоки имеют разные требования буферизации на входе и на выходе, то момент времени, когда станут доступны выборки нового потока, будет зависеть от конкретного демультиплексора.
Метод GetPresentationDescriptor извлекает клон дескриптора текущего активного представления на демультиплексоре 300. Синтаксис команды следующий:
HRESULT GetPresentationDescriptor(
IMFPresentationDescriptor* ppPresentationDescriptor
);
Параметр ppPresentationDescriptor является указателем на указатель на объект дескриптора представления. Если метод выполнен успешно, то он возвращает S_OK. Если он выполнен неуспешно, то возвращает код ошибки. Если существуют выходные данные, ждущие обработки, то GetPresentationDescriptor возвращает дескриптор представления, соответствующий этим выходным данным.
Метод GetPendingPresentationDescriptor извлекает следующее представление, ждущее обработки. Синтаксис команды следующий:
HRESULT GetPendingPresentationDescriptor(
IMFPresentationDescriptor* ppPendingPresentationDescriptor
);
Параметр ppPendingPresentationDescriptor является указателем на указатель на объект дескриптора представления. Если метод выполнен успешно, то он возвращает S_OK. Если представления, ждущие обработки, отсутствуют, то метод возвращает MF_E_PRESENTATION_NOT_AVAILABLE. Если несколько раз вызван ProcessInput, то в очередь может быть поставлено несколько представлений, ждущих обработки. Этот способ возвратит только следующее представление, ждущее обработки. Если были обработаны все выходные данные для текущего активного представления, то представление, ждущее обработки, может быть сделано активным посредством вызова SetPresentation.
Способ ProcessInput обеспечивает возможность вызывающей программе подать на демультиплексор выборку нового входного мультиплексированного потока. Если демультиплексор обнаруживает наличие новых потоков в представлении, то *pfNewPresentationAvailable будет установлен в значение TRUE (истина), и вызывающая программа посредством::GetPendingPresentationDescriptor может извлечь дескриптор представления, ждущего обработки. Синтаксис этой команды следующий:
HRESULT ProcessInput(
IMFSample* pSample
BOOL* pfNewPresentationAvailable
);
Параметр pSample является указателем на объект выборки. Если метод выполнен успешно, то он возвращает S_OK. Параметр pfNewPresentationAvailable возвращает TRUE, когда результатом вызова ProcessInput является дескриптор нового представления, который добавляется в очередь представлений, ждущих обработки. При вызове ProcessInput или ProcessOutput демультиплексором может быть выполнена операция Demultiplexing. В любом случае при вызове ProcessInput данные будут поставлены в очередь, пока пользователь не вызовет ProcessOutput или данные не сбросятся вызовом Flush(). Одномоментно может быть активным только одно представление. Когда новое представление становится доступным, вызывающая программа должна очистить все выходные данные, ждущие обработки, посредством вызова ProcessOutput, извлечь новое представление посредством вызова GetPendingPresentationDescriptor и затем установить активное представление посредством вызова SetPresentation.
Способ ProcessOutput обеспечивает возможность вызывающей программе извлечь элементарный поток или элементарные потоки из активного представления. Синтаксис команды следующий:
HRESULT ProcessOutput (
DWORD dwStreamIdentifier,
IMFSample* ppSample
);
Параметр DwStreamIdentifier является 32-битным значением, содержащим идентификатор потока из активного представления для требуемой выборки. Параметр ppSample является указателем на указатель на объект выборки. Если метод выполнен успешно, то он возвращает S_OK. Если он выполнен неуспешно, то возвращает код ошибки. Если был достигнут конец потока, то будет возвращен код ошибки MF_E_ENDOFSTREAM. Если возвращен E_NO_MORE_DATA, то отсутствуют данные, доступные для обработки. Вызов ProcessInput() с другой выборкой мультиплексированных данных может уменьшить ошибку. Когда обработка доступных данных блокирована из-за того, что активное представление больше не является разрешенным, то способ возвратит MF_E_NEW_PRESENTATION. При изменении представления становится доступным новый набор потоков. Пользователь должен указать демультиплексору 300, какие потоки должны быть извлечены. Вызов GetPendingPresentationDescription, выбор требуемых потоков и вызов SetPresentationDescriptor() позволят обработать большее количество выборок из входной очереди. При необходимости объект 300 демультиплексора распределит пространство для выборок. Операция демультиплексирования Demultiplexing может быть выполнена демультиплексором посредством вызова ProcessInput или ProcessOutput. В любом случае, при вызове ProcessInput данные будут поставлены в очередь, пока пользователь не вызовет ProcessOutput или данные не будут сброшены вызовом Flush().
Метод Flush обеспечивает возможность вызывающей программе сбросить все выборки, находящиеся в текущий момент времени в входной и выходной очереди в демультиплексоре 300. Flush также очищает ActivePresentationDescriptor. Это может быть сделано, когда данные "верхнего" потока стремятся к новому местоположению, или вызывающая программа просто предпочитает сбросить все буферизированные данные. Синтаксис команды следующий:
HRESULT Flush();
Команда Flush не имеет параметров. Если метод выполнен успешно, то он возвращает S_OK. Если он выполнен неуспешно, то возвращает код ошибки. Вызов Flush очищает все данные из демультиплексора 300, находящиеся в очереди, и также очищает дескриптор активного представления. В зависимости от конкретного демультиплексора представление, ждущее обработки, может стать доступным сразу посредством вызова GetPendingPresentation, или вызывающей программе может потребоваться неоднократный вызов ProcessInput, пока представление, ждущее обработки, не станет доступным.
Теперь, когда были описаны команды демультиплексора 300, будет приведено описание стандартной работы, где источник (например, приложение 202) не согласует приемник, принимающий мультиплексированный поток. Согласно фиг. 7, источник предоставляет мультиплексированный поток для выбора приложением (например, источник оцифровки видеоизображений предоставляет DV или источник телевидения TV предоставляет поток кода MPEG2) (этап 500). Уровень 201 управления определяет, согласовало ли приложение приемник для мультиплексированного потока (этап 502). Если приложение 202 не согласовало приемник для мультиплексированного потока, то сеанс 240 мультимедиа загружает соответствующий демультиплексор и инициализирует его дескриптором мультиплексированного потока (этап 504).
Если представление доступно из демультиплексора (этап 506), то сеанс 240 мультимедиа осуществляет попытку повторного согласования, используя дескрипторы элементарного потока (этап 508). Формируется остальная часть топологии (этап 510). Предоставленные элементарные потоки обрабатываются процессором 220 мультимедиа с использованием DMO (например, декодеров).
Если представление недоступно, то сеанс мультимедиа использует приемник мультимедиа NULL (пустой) для завершения топологии для мультиплексированного потока, пока не станет доступным большее количество информации (этап 512). Каждый раз при открытии сеанса и образовании потока выборок на демультиплексор 300 подаются выборки, пока не станет доступным дескриптор представления (этап 514). Это выполняется посредством вызова IMFMediaStream::ProcessSample на узел процессора мультимедиа, который представляет мультиплексированный поток. Процессор 220 мультимедиа вызывает IMFMediaStream::ProcessSample для нижележащего мультиплексированного потока, например источник AVI, предоставляющий поток DV. Когда выборка мультиплексированного потока извлечена, процессор мультимедиа вызывает IMFDemultiplexer::ProcessInput на демультиплексоре 300. Вызовы ProcessSample и ProcessInput продолжаются, пока IMFDemultiplexer::ProcessInput не возращает флажок нового представления, равного значению TRUE. Затем процессор 220 мультимедиа сигнализирует сеансу 240 мультимедиа через событие, что из-за изменения демультиплексора необходимо обновить текущую топологию. Сеанс 240 мультимедиа вызывает IMFDemultiplexer::GetCurrentPresentation для получения доступа к дескрипторам элементарных потоков, которые недавно стали доступны. Когда становится доступным дескриптор представления, сеанс мультимедиа может осуществить повторное согласование, используя дескрипторы элементарного потока (этап 516).
Описано API демультиплексора для потоков мультимедийных данных. API демультиплексора содержит набор интерфейсов, структур данных и событий для представления демультиплексора мультимедийных данных. API обеспечивает возможность потребителю единообразно использовать данные мультиплексированного потока, например DV, для формирования данных элементарного потока, например аудио и видео (сжатого или несжатого). API обеспечивает возможность использования демультиплексоров как независимых компонентов. API сокращает потребность в большом количестве API для фильтров, и от заданного фильтра более не требуется обеспечение интерфейса с API для каждого фильтра, к которому он мог быть подсоединен в системах, где не поддерживаются используемые фильтры. Также демультиплексор может быть выключен корректно, так как процессор мультимедиа управляет демультиплексором, а не фильтрами в фильтрующем графе.
Все представленные материалы здесь, включая патенты, заявки на патенты и публикации, полностью включены в описание изобретения путем ссылки.
Принимая во внимание большое количество возможных вариантов осуществления, в которых могут быть применены принципы этого изобретения, должно быть ясно, что описанный здесь вариант осуществления, совместно с чертежами, предполагается только иллюстрирующим и не должен рассматриваться как ограничивающий область изобретения. Для специалистов очевидно, что, например, элементы иллюстрируемого варианта осуществления, показанные в виде программного обеспечения, могут быть выполнены аппаратно и наоборот, или что, не удаляясь от сути изобретения, структура и детали иллюстрируемого варианта осуществления могут быть изменены. Следовательно, описанное изобретение охватывает все варианты осуществления, которые могут быть осуществлены в контексте последующей формулы изобретения и ее эквивалентов.
Класс G06F9/04 с применением носителей информации, содержащих только программные команды
Класс G06F13/10 программное управление для периферийных устройств