1

YUV(YV12)フレームをYUVファイルに書き込んでいます。正確に101フレームを保存していますが、出力YUVファイルを再生すると、2倍のフレームがありますが、2番目のフレームは常に空です。

これが私のコードです:

            size_t lenght=_viewWidth * _viewHeight * 3;
    BYTE *bytes=(BYTE*)malloc(lenght);
    ///////////////  read pixels from tex  /////////////////////
    glBindTexture(GL_TEXTURE_2D,tex);
    glGetTexImage(GL_TEXTURE_2D,0,GL_RGB,GL_UNSIGNED_BYTE,bytes);
    glBindTexture(GL_TEXTURE_2D,0);

        BYTE *uvOut= new uint8_t[_viewWidth * _viewHeight *3];

            if(cfg.seqStart <= cfg.seqEnd)
    {
    hOutFile = fopen( outFileName.c_str(), cfg.appendMode ? "ab" : "wb" );
    assert(hOutFile!=0);



       RGBtoYUV420PSameSize(bytes,uvOut,3,0,_viewWidth,_viewHeight);

     fwrite(uvOut,_viewWidth* 3, _viewHeight, hOutFile); // Write V line

    fclose(hOutFile);
        cfg.seqStart++;
    }else{

        printf("done");

    }

    delete uvOut;
    free(bytes);

このブロックを101回実行しました。再確認しました。別のフレームはどこから来たのですか?

4

1 に答える 1

2

openglについては何も知りませんが、YV12形式のフレームのサイズは

width * height * 1.5

つまり、croma-partは、水平方向と垂直方向に係数2でサブサンプリングされます。上に3たくさんありますが、1.5代わりにその値を変更してください。

YUV形式の変換ツールに興味がある場合は、Pythonで書いたものをチェックアウトしてください。そして、ここでSDL に基づくビューア。そこにはたくさんのインスピレーションがあります:-)

于 2013-03-17T21:02:21.400 に答える