如何使用ndk查找Android视频解码器UV平面像素步长

如何使用ndk查找Android视频解码器UV平面像素步长,android,video,android-ndk,yuv,Android,Video,Android Ndk,Yuv,在Android上使用NDK解码视频时,在一些设备上我得到了带有UV平面像素步长2(UVU…)的YUV图像,在其他设备上我得到了4(UUVVUVV…)。在bot情况下,解码器报告的图像格式为“21”。如何找到UV平面的像素步长? 我的实验结论是,安卓8+给出了像素步长4,安卓7给出了像素步长2,但有办法确定吗?如果你用键调用AMediaFormat\u getInt32“color format”,它在所有操作系统版本上都返回相同的值吗(如果它返回任何东西的话)?这就是我用“AMediaForm

在Android上使用NDK解码视频时,在一些设备上我得到了带有UV平面像素步长2(UVU…)的YUV图像,在其他设备上我得到了4(UUVVUVV…)。在bot情况下,解码器报告的图像格式为“21”。如何找到UV平面的像素步长?
我的实验结论是,安卓8+给出了像素步长4,安卓7给出了像素步长2,但有办法确定吗?

如果你用键
调用
AMediaFormat\u getInt32
“color format”
,它在所有操作系统版本上都返回相同的值吗(如果它返回任何东西的话)?这就是我用“AMediaFormat\u toString”得到的结果:“mime:string(video/raw)、stride:int32(1920)、slice height:int32(1088)、color format:int32(21)、image data:data、crop:unknown(9)、hdr static info:data、width:int32(1920)、height:int32(1088)}。”当我将UVUV与uuvvvvuuv分开时,我错了。它实际上是UVUV。。。VSU(0)U(s/2)V(0)V(s/2)U(1)U(s/2+1)V(1)V(s/2+1),其中“s”是UV平面的大小。。。主要的问题是,在这两种情况下,我得到的图像格式都是21。
U(0)U(s/2).
-你能发布图像吗?这听起来很奇怪。请注意,通常情况下,解码器的输出格式由输入决定。@AlexCohn视频是使用camera2 API和用于解码的相同AMediaCodec创建的。相机产生很好的紫外线。。。格式和编码器除外,这没有问题(嗯…还是他?)。当我使用AMediaCodec解码它时,我必须这样做:for(int I=0;ii如果你用键调用
AMediaFormat\u getInt32
“color format”,它在所有操作系统版本上都返回相同的值吗(如果它返回任何东西的话)?这就是我用“AMediaFormat\u toString”得到的结果:“mime:string(video/raw),stride:int32(1920),切片高度:int32(1088),颜色格式:int32(21),图像数据:数据,裁剪:未知(9),hdr静态信息:数据,宽度:int32(1920),高度:int32(1088)}。“当我将UVUV与UUVVUUVV进行对比时,我错了。实际上是UVUV…与U(0)U(s/2)V(0)V(s/2)U(1)U(s/2+1)V(s/2+1)V(s/2+1)V(s/2+1),其中“s”是UV平面的大小…主要问题是,在这两种情况下,我得到的图像格式都是21。
U(0)U(s/2)…
-你能发布图像吗?这听起来很奇怪。请注意,通常情况下,解码器的输出格式是由输入决定的。@AlexCohn视频是使用camera2 API和用于解码的相同AMediaCodec创建的。Camera生成很好的UVUV…格式和编码器没有问题(嗯…或者他是这样做的?).当我用AMediaCodec解码它时,我必须这样做:for(int I=0;I