x265编码器:' plane'中的值的顺序数组

时间:2015-10-01 10:54:21

标签: c++ encoding h.265 libx265

在使用x265编码器(https://x265.readthedocs.org/en/default/api.html)进行编码过程中,我想在编码新图像后将图像像素值(特别是Y通道的值)写入.txt文件中(不重要的原因)。为此,我使用了飞机'类x265_picture的变量:

x265_picture* pic_out; # variable where encoded image is to be stored 
... # encoding process
uint8_t *plane = (uint8_t*)pic_out->planes[0]; 
uint32_t pixelCount = x265_picturePlaneSize(pic_out->colorSpace, m_param->sourceWidth, m_param->sourceHeight, 0);
ofstream out_file("out_file.txt");

for (uint32_t j = 0; j < pixelCount; j++) # loop for all pixels
{
    int pix_val = plane[j];
    out << pix_val;
}

ofstream.close()

但是当我将输出数据重建为图像时,我得到了

enter image description here

而不是

enter image description here

或其他例子:

enter image description here

而不是

enter image description here

(颜色并不重要,&#34;条纹&#34;是关注点)

在输出文件中,似乎有(显然)正确顺序的数据间隔(让我们说89,90,102,98,...),后面总是跟着相同数字的长序列(例如235,235,235,235)。 ..或65,65,65,65 ......),&#34;创建&#34;条纹。有人可以告诉我我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

谢谢大家,刚刚解决了这个问题......关键是使用'src + = srcStride':

ofstream out_file("out_file.txt");
int srcStride = pic_out->stride[0] / sizeof(pixel);
uint8_t* src = (uint8_t*) pic_out->planes[0];

for (int y = 0; y < m_param->sourceHeight; y++, src += srcStride)
{
    for (int x = 0; x < m_param->sourceWidth; x++)
        out_file << (int)(src[x]) << ",";
}
out_file.close();