繁体   English   中英

使用libffmpeg时如何计算AVPicture.data [x]指针(YUV420p)的大小

[英]How to calculate sizes for AVPicture.data[x] pointers (YUV420p) when using libffmpeg

我试图分别获取Y,U,V值,以将它们传递给openGL并映射到纹理。 我知道可以在AVPicture.data [0](Y)和AVPicture.data [1](U)和AVPicture.data [2](V)中找到这些值

avcodec_decode_video2(ctx, frame, &frameFinished, packet_data->packet);
AVPicture _avPicture;
picSize = avpicture_get_size(ctx->pix_fmt, ctx->width, ctx->height);
avpicture_alloc(&_avPicture, ctx->pix_fmt,ctx->width, ctx->height );
avpicture_fill(&_avPicture, packet_data->packet, ctx->pix_fmt,ctx->width,ctx->height);

^^很好。 我遇到的问题是通过JNI将Y,U,V值传递回Java。 我必须知道AVPicture.data [x]指针指向的数据大小。 我试过AVPicture.linesize都没有用,以及:

           for (y = 0; y < ctx->height; y++){
                for (x = 0; x < ctx->width; x++){
                    yDataSize++;
                }
            }
            /* Cb and Cr */
            for (y = 0; y < ctx->height / 2; y++) {
                for (x = 0; x < ctx->width / 2; x++) {
                    uDataSize++;
                    vDataSize++;
                }
            }

我真的被卡住了,谢谢!

缓冲区大小是行大小乘以高度(行大小是每行字节数,乘以行数即可得出总数)。 因此, _avPicture.linesize[x] * ctx->height 在C ++方面进行计算,将值传递回Java。

暂无
暂无

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

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