提问人:flansel 提问时间:11/16/2023 更新时间:11/16/2023 访问量:59
Libav FFv1 read_quant_table解码错误
Libav FFv1 read_quant_table decoding errors
问:
我在使用“ffv1”编解码器编码和解码视频时遇到问题。有趣的是,当宽度和高度为 ~640 或更小时,这可以正常工作,但对于任何“大”帧尺寸(例如 1280x720),我会出现以下错误......
[ffv1 @ 0x5612f4ab2240] read_quant_table error
[ffv1 @ 0x5612f4ab2240] Cannot decode non-keyframe without valid keyframe
是否有任何需要设置的选项,或者我是否做错了其他事情,我把这个例子做得非常小,我知道我没有将图像写入框架,只是在缓冲区中分配垃圾等。 提前致谢。
// minimal example
// ...
#define FRAMES (500)
int main(int argc, char **argv)
{
AVCodecContext *enc, *dec;
AVFrame *frame = av_frame_alloc();
AVFrame *decoded_frame = av_frame_alloc();
AVPacket *packet = av_packet_alloc();
AVPacket *padded_packet = av_packet_alloc();
const AVCodec *enc_codec = avcodec_find_encoder_by_name("ffv1");
const AVCodec *dec_codec = avcodec_find_decoder_by_name("ffv1");
enc = avcodec_alloc_context3(enc_codec);
dec = avcodec_alloc_context3(dec_codec);
enc->width = 1280;
enc->height = 720;
enc->pix_fmt = AV_PIX_FMT_YUV420P;
enc->time_base.num = 1001;
enc->time_base.den = 60000;
dec->width = enc->width;
dec->height = enc->height;
avcodec_open2(enc, enc_codec, NULL);
avcodec_open2(dec, dec_codec, NULL);
frame->height = enc->height;
frame->width = enc->width;
frame->format = enc->pix_fmt;
av_frame_get_buffer(frame, 32);
printf("frame linesz %i,%i,%i\n", frame->linesize[0], frame->linesize[1], frame->linesize[2]);
for (int i = 0; i < FRAMES; ++i)
{
avcodec_send_frame(enc, frame);
while (!avcodec_receive_packet(enc, packet))
{
av_new_packet(padded_packet, packet->size + AV_INPUT_BUFFER_PADDING_SIZE);
padded_packet->size -= AV_INPUT_BUFFER_PADDING_SIZE;
memset(padded_packet->data, 0, padded_packet->size);
memcpy(padded_packet->data, packet->data, packet->size);
printf("frame %i encoded %i bytes\n", i, padded_packet->size);
if (!avcodec_send_packet(dec, padded_packet))
{
printf("sent bytes to decoder\n");
}
}
while (!avcodec_receive_frame(dec, decoded_frame))
{
printf("decoded frame height %i, width %i\n", decoded_frame->height, decoded_frame->width);
}
usleep(16000);
}
return 0;
}
答: 暂无答案
评论