LINUX.ORG.RU

История изменений

Исправление wolverin, (текущая версия) :

спасибо за помощь, действительно на пределе железа задача выполняется, однако как написал ранее - убрал, разницы нет ни во времени выполнения, ни в тормозах видео если использовать мой код, а не ффмпег

pOutFrm->pts = pInpFrm->pts

это же просто мое тупое предположение, что время смашстабированного фрейма должно быть такое же (что естественно не верно), но я пока еще и не использую этот участок кода, т.к. свс_скале ЖУТКО медленная и просто декодированный фрейм отправляю кодеру.

безусловно я понимаю, что где то косяк со временем, т.к. вижу через ffprobe другие временные метки у ффмпега, нежели получаемые из моего кода, но что конкретно вот не хватает в коде не улавливаю.

Полагаю там не хватает такой штуки как av_packet_rescale_ts перед записью av_interleaved_write_frame, в transcoding.c 3 раза, а в muxing.c 1 раз она встречается и я добавил такую строку

av_packet_rescale_ts(pOutPkt, pOutCdcCtx->time_base, pOutFmtCtx->streams[0]->time_base);

перед av_interleaved_write_frame, но количество декодированных фреймов в влц вообще теперь не увеличивается, завтра утром конечно гляну как картинка дневная выглядит, но похоже опять путаюсь где то... ведь например тут написано, что рескале эту нужно делать дважды при перекодировании

https://htrd.su/blog/2012/11/23/ffmpeg_nemnogo_pro_time-base/

Исходная версия wolverin, :

спасибо за помощь, действительно на пределе железа задача выполняется, однако как написал ранее - убрал, разницы нет ни во времени выполнения, ни в тормозах видео если использовать мой код, а не ффмпег

pOutFrm->pts = pInpFrm->pts

это же просто мое тупое предположение, что время смашстабированного фрейма должно быть такое же (что естественно не верно), но я пока еще и не использую этот участок кода, т.к. свс_скале ЖУТКО медленная и просто декодированный фрейм отправляю кодеру.

безусловно я понимаю, что где то косяк со временем, т.к. вижу через ffprobe другие временные метки у ффмпега, нежели получаемые из моего кода, но что конкретно вот не хватает в коде не улавливаю.

Полагаю там не хватает такой штуки как av_packet_rescale_ts перед записью av_interleaved_write_frame, в transcoding.c 3 раза, а в muxing.c 1 раз она встречается и я добавил такую строку

av_packet_rescale_ts(pOutPkt, pOutCdcCtx->time_base, pOutFmtCtx->streams[0]->time_base);

перед av_interleaved_write_frame, но количество декодированных фреймов в влц вообще теперь не увеличивается, завтра утром конечно гляну как картинка дневная выглядит, но похоже опять путаюсь где то... ведь например тут написано, что рескале эту нужно делать дважды

https://htrd.su/blog/2012/11/23/ffmpeg_nemnogo_pro_time-base/