kibsoft / QtMEL

Qt Media Encoding Library
GNU Lesser General Public License v2.1
67 stars 16 forks source link

EncoderExample. Ошибка при записи. #23

Closed nicktrandafil closed 10 years ago

nicktrandafil commented 10 years ago

Скачал готовую сборку примера EncoderExample. Если я выбираю разрешение видео 1024x768 или 640x480, то записывает нормально. Но если я выбираю какое-то другое разрешение, к примеру 701x700 или 725x916 то вылетает ошибка(пустая). Качал последнюю версию библиотеки и компилировал сам, то же самое. В чем проблема, и как мне ее решить?

kibsoft commented 10 years ago

701x700 или 725x916 Видео не может кодироваться в таких разрешениях, т.к. кодеки поддерживают только стороны кратные 2,4 или 16 (в разных по-разному)

nicktrandafil commented 10 years ago

Если мне нужно записать, например, точно вот такой размер 725x916, то как мне поступить? Я пробовал взять область вот такую 0, 0, 641, 292, но задать размер видео чуть по больше(748x292), который подходит. Заснятая область выравнивается по левому краю, а оставшееся пространство заполняется каким то цветом. А как сделать так, чтобы хотя бы выравнивание было по центу и цвет черным заполнял оставшееся пространство? abc

kibsoft commented 10 years ago

Только если самому преобразовывать QImage в нужный (т.е. менять размер на 748x292) и потом уже отправлять в Encoder.

nicktrandafil commented 10 years ago

А, т.е нужно в граббере ковырять...понял. Спасибо, и спасибо за такую полезную библиотеку=) И еще один вопросик, Я пытался использовать другой кодек вместо h264, в итоге необработанная ошибка. Вроде вот в этой функции

void EncoderPrivate::cleanup() { //close codecs if (m_videoCodecContext != NULL) { avcodec_close(m_videoCodecContext); av_free(m_videoCodecContext); } . . . Тут идет проверка на существование объекта, а потом что-то с ним тут делается. Видимо, где-то уничтожая объект не присваивается ноль указателю на объекту. Я пытаюсь такое не использовать, но если приходится то делаю так: объект->deleteLater(); объект = NULL;

kibsoft commented 10 years ago

deleteLater() только у QObject есть, а m_videoCodecContext пришел из Ffmpeg. Ошибка там не в проверке на NULL скорее всего, а в функция сишных Ffmpeg. Часто крашится эта либа.

nicktrandafil commented 10 years ago

Хорошо. Вопрос закрыт. А библиотека не развивается, да? Жаль...

kibsoft commented 10 years ago

Нет, пока забросил, к сожалению :( Есть тоже хочется)