繁体   English   中英

FFMPEG缩放错误 - 无效维度

[英]FFMPEG scaling error-invalid dimension

我正在研究FFMPEG中的一个项目,现在我遇到了一个问题。

我想要做的是,将png图片转换为mpeg视频文件。 我已经设法从图片中获取信息,但不知何故,我无法转换YUV格式的图片。 它返回“0x0-> 0x0是无效的缩放尺寸”。

这是我的代码:

 AVFrame *pFrame;
AVFrame *pFrameYUV;
pFrame = av_frame_alloc();
pFrameYUV = av_frame_alloc();
int numBytes;//Groesse des Bildes
uint8_t *buffer= NULL;
numBytes=avpicture_get_size(AV_PIX_FMT_RGB24, pCodecCtx->width,pCodecCtx->height); 
buffer=(uint8_t *)av_malloc(numBytes*sizeof(uint8_t)); 

/*avpicture_fill((AVPicture *)pFrameYUV, buffer, AV_PIX_FMT_YUV420P,
                pCodecCtx->width, pCodecCtx->height);*/
av_image_fill_arrays(pFrameYUV->data,pFrameYUV->linesize,buffer,AV_PIX_FMT_YUV420P,pCodecCtx->width,pCodecCtx->height,32);


struct SwsContext *sws_ctx = NULL;

AVPacket packet;
// initialize SWS context for software scaling
sws_ctx=sws_getCachedContext(NULL,pFrame->width,pFrame->height,AV_PIX_FMT_RGB24,pFrameYUV->width,pFrameYUV->height,AV_PIX_FMT_YUV420P,0,0,0,0);
pFrameYUV->height= pFrame->height;
pFrameYUV->width= pFrame->width;

while (av_read_frame(pFormatCtx,&packet)>=0)
{
    if(packet.stream_index == videoStream)
    {
        avcodec_decode_video2(pCodecCtx, pFrame, &frameFinished, &packet); 

        if(frameFinished)
        {

        sws_scale(sws_ctx, (uint8_t const * const *)pFrame->data,
          pFrame->linesize, 0, pCodecCtx->height,
          pFrameYUV->data, pFrameYUV->linesize);
        printf("%d",pFrameYUV->height);

    }
    }
    av_free_packet(&packet);
}

编辑:

转换后,我试图在oa数据包中编码帧,但他的数据包大小为0.代码

AVPacket pkt;
av_init_packet(&pkt);
pkt.stream_index= st->index;
pkt.data= buffer;
pkt.size=numBytes;
int got_pkt;
test=avcodec_encode_video2(st->codec,&pkt,pFrameYUV,&got_pkt);

printf("%d",got_pkt);

调用sws_getCachedContext时,未设置pFrameYUV->height, pFrame->height, pFrameYUV->width, pFrame->width这些值。

你的意思是尺寸不变吗? 如果是这样,请在sws_getCachedContext之前设置它们。

pFrameYUV->height = pFrame->height = pCodecCtx->height;
pFrameYUV->width = pFrame->width = pCodecCtx->width;
sws_ctx=sws_getCachedContext(NULL,pFrame->width,pFrame->height,AV_PIX_FMT_RGB24,pFrameYUV->width,pFrameYUV->height,AV_PIX_FMT_YUV420P,0,0,0,0);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM