次の条件がある場合の実装例は？
* リトルエンディアン
* Planerはint16_t
* 画像はパディングが発生しないサイズしか来ないのでストライドは考慮しなくてよい
さらに単純化した版（1フレーム連続バッファ前提）
もし「どうせ全部連続で 1フレーム丸ごとしか処理しない」という使い方なら，
1次元走査だけでも書けます．

void unpack_v210_to_planar_i16_flat(
    const uint8_t* src,
    int pixelCount,   // width * height
    int16_t* dstY,
    int16_t* dstU,
    int16_t* dstV)
{
    if ((pixelCount % 6) != 0) {
        throw std::invalid_argument("pixelCount must be multiple of 6");
    }

    const uint32_t* s = reinterpret_cast<const uint32_t*>(src);

    int yPos = 0;
    int uvPos = 0;

    for (int i = 0; i < pixelCount; i += 6) {
        uint32_t w0 = s[0];
        uint32_t w1 = s[1];
        uint32_t w2 = s[2];
        uint32_t w3 = s[3];
        s += 4;

        dstY[yPos++] = static_cast<int16_t>((w0 >> 10) & 0x3FF);
        dstY[yPos++] = static_cast<int16_t>((w1 >>  0) & 0x3FF);
        dstY[yPos++] = static_cast<int16_t>((w1 >> 20) & 0x3FF);
        dstY[yPos++] = static_cast<int16_t>((w2 >> 10) & 0x3FF);
        dstY[yPos++] = static_cast<int16_t>((w3 >>  0) & 0x3FF);
        dstY[yPos++] = static_cast<int16_t>((w3 >> 20) & 0x3FF);

        dstU[uvPos] = static_cast<int16_t>((w0 >>  0) & 0x3FF);
        dstV[uvPos] = static_cast<int16_t>((w0 >> 20) & 0x3FF);
        ++uvPos;

        dstU[uvPos] = static_cast<int16_t>((w1 >> 10) & 0x3FF);
        dstV[uvPos] = static_cast<int16_t>((w2 >>  0) & 0x3FF);
        ++uvPos;

        dstU[uvPos] = static_cast<int16_t>((w2 >> 20) & 0x3FF);
        dstV[uvPos] = static_cast<int16_t>((w3 >> 10) & 0x3FF);
        ++uvPos;
    }
}
