Здравствуйте, Аноним, Вы писали:
А>Помогите пожалуйста...
А>Никогда до этого не работал с DShow...
А>нужно всего лишь получать данные (не открывать цельный файл, а из указателя на блок памяти или файла), представляющие собой файлы AVI сжатые DIVX или другим кодеком.... выбирать заданный по номеру кадр и воспроизводить его на Surface....
А>итак: указатель на данные AVI + номер кадра -> изображение на поверхности....
А>как это реализовать ?...
А>пробовал смотреть Samples (DDrawXCL, PlayWnd), но они слишком сложные для моей простой задачи.....
А>в сети есть похожие примеры на Delphi но мне не удается перевести их на мой BCB....
А>помогите пожалуйста с кодом — получение заданного по номеру кадра из блока AVI данных на поверхность.....
А>Заранее — большое спасибо !
...
Всё достаточно просто: (в случае работы с файлом) тебе надо, во первых: найти в описании DS SDK пример — самого простого плейера — там всего лишь несколько строк — этот плейер — просто подниамет файл и рендерит его(строит граф), после чего запускает Run и ждёт пока не закончится воспроизведение (посмотри внимательно как там сделано). После этого тебе надо руками поднять твой файл т.е. IGraphBuilder::AddSourceFilter, потом поднять руками AVI Splitter, и DIVX или XVID декодер, добавить фильтры в граф, соединить, для того что бы сграбить кадр, надо либо смотреть в примерах(фильтр SampleGrabber точно не скажу), либо взять за пример фильтр ezrgb24, убрать у него выходной пин а входной унаследовать от CRenderedInputPin что бы фильтр как бы рендерером стал и соединяться только на RGB24 или RGB32 — из полученного сампла выковыривай свою картинку и пользуй. Ага чуть не забыл у IGraphBuilder::QueryInterface на IMediaSeeking — и позиционируйся как тебе надо — на выходе будешь получать(в своём фильтре кадр который тебе нужен) — это собственно напрвление раскопок! дальше только сам ...