Способ скопировать структуру AVPacket: (который работает)
AVPacket newPacket(oldPacket);
newPacket->data = reinterpret_cast<uint8_t*>(new uint64_t[(oldPacket->size + FF_INPUT_BUFFER_PADDING_SIZE)/sizeof(uint64_t) + 1]);
memcpy(newPacket->data, oldPacket->data, oldPacket->size);
Причина заключается в том, что некоторые декодеры используют оптимизации, которые требуют определенного выравнивания байт и заполнения. Простое распределение oldPacket-> size не выделяет достаточно и не выделяет при правильном выравнивании байтов.
Обратите внимание, что это может не работать во всех случаях, например, если у вас установлено что-то интересное.
Было бы неплохо, если бы вы добавили некоторое описание того, почему это решает проблему. – Soren
Вау, прошло уже четыре года? Да, это может сработать, поскольку управление памятью обрабатывается libav. У вас нет времени на тестирование. – 0xbaadf00d