0

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);

^^それはうまくいっています。私が遭遇した問題は、Y、U、V の値を JNI 経由で 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++;
                }
            }

私は本当に立ち往生しています、ありがとう!

4

1 に答える 1

1

バッファー サイズは、行サイズに高さを掛けたものです (行サイズは行あたりのバイト数で、行数を掛けて合計を求めます)。だから_avPicture.linesize[x] * ctx->height。C++ 側で計算し、値を Java に戻します。

于 2013-08-13T18:08:47.577 に答える