Прошу о помощи с реализацией VFW кодека
У меня стоит такая задача: написать Cuda Motion JPEG кодек, реализовать надо как инсталлируемый драйвер Windows. После курения мануалов по VFW и чтения сырцов какого-то скачанного из интернета avi-плеера я решил для начала написать stub-кодек, т. е. для начала он должен понимать собственный fourcc-код и просто возвращать rgb-фреймы в неизменном виде.
Конкретнее, на данный момент я реализовал dll, после установки её в систему я делаю следующее для проверки работоспособности:
Беру avi-файл размером поменьше, конвертирую видеопоток с помощью virtualdub в uncompressed RGB (YCbCr) и hex-редактором меняю fourcc в файле в двух местах: (video) AVIStreamHeader.fccHandler = "CUMJ"; (BITMAPINFOHEADER) AviStreamFormat.biCompression = "CUMJ"; По замыслу при открытии любым плеером система должна определить мою dll в качестве декодера для видеопотока (что она благополучно и делает), а функция обработки сообщения ICM_DECOMPRESS просто копирует source-фрейм в качестве target-фрейма, поскольку поток и так несжат.
При этом и Winamp и Windows Media Player отображают какую-то чепуху, трудно объяснить словами что отображается. Самое интересное, что тот плеер, сорцы которого я курил (см. выше), работает нормально, т. е. система находит мой кодек, и с его помощью воспроизведение видео работает нормально. Не понимаю, куда дальше копать - я хочу, чтобы все плееры нормально это воспроизводили. Если кто-то в силах помочь, я был бы очень признателен, тогда я выложу проект студии сюда и объясню, как воспроизвести проблему. Хотя я выше уже это объяснил.
Спасибо за внимание.
Пишу в 2005-й, думаю не суть важно - помогаю человеку с дипломом. Сегодня вечером буду дома - выложу сюда проект. Пока надо реализовывать JPEG компрессию, но с этим вопросом тоже очень хотелось бы разобраться, вроде всё правильно реализовал - не пойму, почему не работает.
Чтобы скомпилить avi-плеер нужно установить opengl и openal, прописать пути студии.
да в принципе для галочки
понял, пойдет.
Скачал, но пока детально посмотреть нет времени, может на выходных.
Кстати появилась идея что тот плеер использует VFW интерфейс, в то время как другие лишь современный DShow.
Кстати появилась идея что тот плеер использует VFW интерфейс, в то время как другие лишь современный DShow.
Все может быть, так как VFW не такой уже популярен :). Или например плееры просят в одном формате, а получают в другом данные. Для нормальной работы нужно что бы ICM_DECOMPRESS_QUERY/ICM_DECOMPRESS_GET_FORMAT/ICM_DECOMPRESS_BEGIN/ICM_DECOMPRESS_END/ICM_DECOMPRESS выдавали нормальную инфу для клиента(плеер). Код пока несмотрел, нету времени, поэтому только делаю догадки. А что там под отладкой показывает, может какие ошибки необрабатываются, или еще что то?