将YUV写入文件会导致重复的帧

时间:2013-03-17 16:50:48

标签: c++ opengl video-encoding yuv

我正在将YUV(YV12)帧写入YUV文件。我正在保存101帧。但是当我播放输出YUV文件时,我有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次。我仔细检查了它。另一帧来自哪里?

1 个答案:

答案 0 :(得分:2)

对opengl一无所知,但YV12格式的帧大小是

width * height * 1.5

即。 croma-part在水平和垂直方向上被因子2子采样。 我在上面看到3很多,请将该值更改为1.5

如果您对我在python中编写的YUV格式转换工具checkout this感兴趣。观看者基于SDL here。很多灵感来自那里: - )