Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android图形缓冲区步幅不正确_Android_C++_Android Ndk - Fatal编程技术网

Android图形缓冲区步幅不正确

Android图形缓冲区步幅不正确,android,c++,android-ndk,Android,C++,Android Ndk,我使用android framework的GraphicBuffer直接获取纹理数据,而不是使用glReadPixels来提高速度 我使用libjpegturbo将GraphicBuffer数据压缩成JPEG。但是GraphicBuffer的步长在某些设备中是不正确的。 比如说 buf = new GraphicBuffer(buf_width, buf_height, PIXEL_FORMAT_RGBA_8888, GraphicBuffer::USAGE_SW_WRITE_OFTEN |

我使用android framework的GraphicBuffer直接获取纹理数据,而不是使用glReadPixels来提高速度

我使用libjpegturbo将GraphicBuffer数据压缩成JPEG。但是GraphicBuffer的步长在某些设备中是不正确的。 比如说

buf = new GraphicBuffer(buf_width, buf_height, PIXEL_FORMAT_RGBA_8888,  GraphicBuffer::USAGE_SW_WRITE_OFTEN | GraphicBuffer::USAGE_HW_TEXTURE);
tjhandle handle = tjInitCompress();
unsigned char* jpeg_buf = NULL;
unsigned long jpeg_size = 0;
int stride = buf->stride; // some devices got 480, some 640.
tjCompress2(handle, save_data, width, stride * tjPixelSize[TJPF_RGBA], height, TJPF_RGBA, &jpeg_buf, &jpeg_size, TJSAMP_420, 80, TJFLAG_BOTTOMUP);
在某些设备中,它生成错误的JPEG。
提前感谢。

报告的步幅是多少,值应该是多少?缓冲区的颜色格式是什么?另外,你测量了多少速度提升?在哪些设备和Android的哪些版本上?我编辑了这个问题,颜色格式是PIXEL_format_RGBA_8888。例如,如果我想要一个480X640缓冲区,那么我将分别通过480和640。在不同的设备和系统中,步幅是不同的。在某些系统中,步幅与
buf_width
相同,而有些系统则不同。最奇怪的部分是在一些设备中,当我得到
buf->stride
是640时。因此,我使用步幅as 640将数据压缩为jpeg。我得到了错误的图片!!但是如果我使用480作为步幅,这是
buf\u宽度
,而不是
buf->stride
,结果是正确的图片!!报告的步幅是多少,值应该是多少?缓冲区的颜色格式是什么?另外,你测量了多少速度提升?在哪些设备和Android的哪些版本上?我编辑了这个问题,颜色格式是PIXEL_format_RGBA_8888。例如,如果我想要一个480X640缓冲区,那么我将分别通过480和640。在不同的设备和系统中,步幅是不同的。在某些系统中,步幅与
buf_width
相同,而有些系统则不同。最奇怪的部分是在一些设备中,当我得到
buf->stride
是640时。因此,我使用步幅as 640将数据压缩为jpeg。我得到了错误的图片!!但是如果我使用480作为步幅,这是
buf\u宽度
,而不是
buf->stride
,结果是正确的图片!!