![]() |
Модераторы: Rickert, Alexeis, BorisVorontsov |
![]() ![]() ![]() |
|
Temnozor |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 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. |
|||
|
||||
AntonChik |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 207 Регистрация: 4.10.2005 Где: Красноярск Репутация: нет Всего: 1 |
не понял.
так ты с видео или с картинками работаешь? если упомянул кодеки, то попробую предположить, что все-таки с видео. тогда причем тут "картинки определенного формата"? ты хотел сказать "ролики"? как/чем ты открываешь/проигрываешь их? отлавливать ошибки пробовал? ... заранее, как выход, можно попробовать проверять ролики на "правильность" формата (хотя бы по заголовку) --------------------
"Человек притаился за деревом. За широким огромным деревом. Он выглядывал тихонько и прятался. Но его никто не преследовал." (с) Хорги |
|||
|
||||
p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 2 Всего: 112 |
А что возвращают ICDecompressQuery, когда передаешь им формат входных данных ?...
И при выделении памяти на выходной буфер ты как определяешь его размер ? Это сообщение отредактировал(а) p0s0l - 9.6.2006, 10:21 -------------------- С уважением, г-н Посол. |
|||
|
||||
Temnozor |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 134 Регистрация: 27.6.2002 Где: Тюмень Репутация: нет Всего: нет |
Все ясно. Придется уточнять.
Кодирую я, естественно, видео. С ним все в порядке (функции AVIFile... и AVIStream...). Но задумал я сделать preview. То есть, у меня есть последовательность картинок (DIB), из которых я буду делать AVI. Все, естественно, одного размера и формата. И я хочу сжать кодеком любую из этих картинок (по выбору пользователя) и нарисовать ее сжатую (искаженную кодеком) в окне, чтобы пользователь смог оценить подходит ли ему этот кодек и установленные у кодека параметры. Пробовал два способа. 1-й, который сам напрашивается. Вызвать для картинки ICImageCompress, потом ICImageDecompress и нарисовать полученный из второй функции DIB. 2-й способ. Та же цель через функции ICCompressBegin, ICCompress, ICCompressEnd, ICDecompressBegin, ICDecompress, ICDecompressEnd Оба способа работают, но... не всегда. При обоих способах нет-нет, да какой-нибудь кодек валит все удовольствие. Естественно, ведь хочется перебрать все кодеки в списке и посмотреть как каждый сжимает/искажает картинку. И тут бац - программа упала (чаще при деомпрессии). Хорошо еще, что часто просто функции возвращают ошибку и можно написать, что мол кодек нельзя использовать по такой-то причине, но это срабатывает далеко не всегда. Часто бывает, что на одном компе кодек работает отлично, а на другом программа падает. Ладно свою программу я еще смогу отладить. Но мне не хочется, чтобы она вываливалась при выборе пользователем глючного кодека. Бог весть знает, что за кодеки у него установлены. Пользователю трудно доказать, что это не моя программа глючная, а кодек он не тот выбрал. Второй раз он может программу и не запустить, а сделать Uninstall. В общем, основываясь на вышесказанном, хочу изучить возможность отлова, к примеру, того, что какой-то поток упал, и не дать ему свалить все программу. Возможно, стоило создать эту тему в разделе "Системное программирование". P.S. Сейчас идея пришла: кодировать, вызывая другой процесс. ![]() --------------------
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. |
|||
|
||||
p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 2 Всего: 112 |
Ну, во-первых, нужно выяснить какой именно кодек валит (хотя бы в твоем случае).
И к сведению: не все кодеки умеют работать в обоих направлениях (сжимать и расжимать)... То что ты хочешь сделать - можно реализовать через отлов исключений, тогда эти падения будут незаметны, но возможны утечки памяти и пр. Также советую попробовать функцию ICCompressorChoose, передав ей AVI-поток и указав флаг ICMF_CHOOSE_PREVIEW (в таком случае появится окошечко предпросмотра сжатия авишного потока). Поперебирай все установленные кодеки и посмотри, будет ли прога вываливаться с исключением. Если не будет - значит дело в твоей программе, если будет - значит скорее всего на самом деле кодек глючит. ![]() И еще: некоторые кодеки не любят наличия отладчика, и могут валить программу, некоторые делают это молча, другие пишут об обнаружении отладчика и завершают процесс... Поэтому попробуй запустить вне среды разработки (если не пробовал ![]() -------------------- С уважением, г-н Посол. |
|||
|
||||
![]() ![]() ![]() |
Вы можете найти полезным что... | |
|
|
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |