Вам нужен YUV422. Это значит, YUYV. inbuf
должно делиться на 4 для каждых входных данных. Вы можете использовать
for(i = 0; i < l/2; i++) {
inbuf.push_back(yuvData[0][2*i]);
inbuf.push_back((yuvData[1][2*i] + yuvData[1][2*i + 1])/2);
inbuf.push_back(yuvData[0][2*i + 1]);
inbuf.push_back((yuvData[2][2*i] + yuvData[2][2*i + 1])/2);
}
В этом фрагменте кода используются все значения Y, но только среднее значение двух Cr соответственно. Значения Cb используются. Конечно, количество элементов в каждом канале yuvData должно быть четным. В противном случае вы должны найти решение для последнего элемента.
Я только сейчас увидел, что вы используете YUV420. Тогда вы можете использовать этот фрагмент
for(i = 0; i < l/2; i++) {
inbuf.push_back(yuvData[0][2*i]);
inbuf.push_back(yuvData[1][i/2]);
inbuf.push_back(yuvData[0][2*i + 1]);
inbuf.push_back(yuvData[2][i/2]);
}
В этом коде все значения Y используются один раз и все Cr соотв. Значения Cb используются дважды.