Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вылет кодеков, Как обработать? 
:(
    Опции темы
Temnozor
Дата 9.6.2006, 08:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 27.6.2002
Где: Тюмень

Репутация: нет
Всего: нет



Программа работает с кодеками через Video For Windows.
Некоторые кодеки не способны обработать картинки определенного формата и вместо того чтобы просто вернуть ошибку, вылетают, увлекая за собой всю программу.
Как можно блокировать падение всей программы при падении кодека? 
--------------------
Take a ride on, ride on, on your rotting horse on that deadly ground Take a ride, ride on, on your rotting horse with a pounding sound.
PM   Вверх
AntonChik
Дата 9.6.2006, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 4.10.2005
Где: Красноярск

Репутация: нет
Всего: 1



не понял.
так ты с видео или с картинками работаешь? если упомянул кодеки, то попробую предположить, что все-таки с видео. тогда причем тут "картинки определенного формата"? ты хотел сказать "ролики"?
как/чем ты открываешь/проигрываешь их? отлавливать ошибки пробовал?
... заранее, как выход, можно попробовать проверять ролики на "правильность" формата (хотя бы по заголовку) 
--------------------
"Человек притаился за деревом. За широким огромным деревом. Он выглядывал тихонько и прятался. Но его никто не преследовал." (с) Хорги 
PM MAIL   Вверх
p0s0l
Дата 9.6.2006, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 2
Всего: 112



А что возвращают ICDecompressQuery, когда передаешь им формат входных данных ?...
И при выделении памяти на выходной буфер ты как определяешь его размер ? 

Это сообщение отредактировал(а) p0s0l - 9.6.2006, 10:21


--------------------
С уважением, г-н Посол.
PM   Вверх
Temnozor
Дата 9.6.2006, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 27.6.2002
Где: Тюмень

Репутация: нет
Всего: нет



Все ясно. Придется уточнять.

Кодирую я, естественно, видео. С ним все в порядке (функции AVIFile... и AVIStream...).

Но задумал я сделать preview. То есть, у меня есть последовательность картинок (DIB), из которых я буду делать AVI. Все, естественно, одного размера и формата. И я хочу сжать кодеком любую из этих картинок (по выбору пользователя) и нарисовать ее сжатую (искаженную кодеком) в окне, чтобы пользователь смог оценить подходит ли ему этот кодек и установленные у кодека параметры.
Пробовал два способа.
1-й, который сам напрашивается.
Вызвать для картинки ICImageCompress, потом ICImageDecompress и нарисовать полученный из второй функции DIB.
2-й способ.
Та же цель через функции ICCompressBegin, ICCompress, ICCompressEnd, ICDecompressBegin, ICDecompress, ICDecompressEnd

Оба способа работают, но... не всегда.
При обоих способах нет-нет, да какой-нибудь кодек валит все удовольствие. Естественно, ведь хочется перебрать все кодеки в списке и посмотреть как каждый сжимает/искажает картинку. И тут бац - программа упала (чаще при деомпрессии). Хорошо еще, что часто просто функции возвращают ошибку и можно написать, что мол кодек нельзя использовать по такой-то причине, но это срабатывает далеко не всегда. 
Часто бывает, что на одном компе кодек работает отлично, а на другом программа падает. Ладно свою программу я еще смогу отладить. Но мне не хочется, чтобы она вываливалась при выборе пользователем глючного кодека. Бог весть знает, что за кодеки у него установлены. Пользователю трудно доказать, что это не моя программа глючная, а кодек он не тот выбрал. Второй раз он может программу и не запустить, а сделать Uninstall.
В общем, основываясь на вышесказанном, хочу изучить возможность отлова, к примеру, того, что какой-то поток упал, и не дать ему свалить все программу. Возможно, стоило создать эту тему в разделе "Системное программирование".
P.S. Сейчас идея пришла: кодировать, вызывая другой процесс.  smile  
--------------------
Take a ride on, ride on, on your rotting horse on that deadly ground Take a ride, ride on, on your rotting horse with a pounding sound.
PM   Вверх
p0s0l
Дата 9.6.2006, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 2
Всего: 112



Ну, во-первых, нужно выяснить какой именно кодек валит (хотя бы в твоем случае).
И к сведению: не все кодеки умеют работать в обоих направлениях (сжимать и расжимать)...
То что ты хочешь сделать - можно реализовать через отлов исключений, тогда эти падения будут незаметны, но возможны утечки памяти и пр.
Также советую попробовать функцию ICCompressorChoose, передав ей AVI-поток и указав флаг ICMF_CHOOSE_PREVIEW (в таком случае появится окошечко предпросмотра сжатия авишного потока). Поперебирай все установленные кодеки и посмотри, будет ли прога вываливаться с исключением. Если не будет - значит дело в твоей программе, если будет - значит скорее всего на самом деле кодек глючит. smile 
И еще: некоторые кодеки не любят наличия отладчика, и могут валить программу, некоторые делают это молча, другие пишут об обнаружении отладчика и завершают процесс... Поэтому попробуй запустить вне среды разработки (если не пробовал smile ).
 


--------------------
С уважением, г-н Посол.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.0790 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.