выравнивание слов на ARM? - PullRequest
       34

выравнивание слов на ARM?

1 голос
/ 16 февраля 2012

Как мне избежать предупреждения компилятора (предупреждение: приведение увеличивает требуемое выравнивание типа цели) в следующем коде?

static int fill_color24 (VisVideo *video, VisColor *color)
{
    int x, y;
    uint32_t *buf;
    uint8_t *rbuf = visual_video_get_pixels (video);
    uint8_t *buf8;

    int32_t cola =
        (color->b << 24) |
        (color->g << 16) |
        (color->r << 8) |
        (color->b);
    int32_t colb =
        (color->g << 24) |
        (color->r << 16) |
        (color->b << 8) |
        (color->g);
    int32_t colc =
        (color->r << 24) |
        (color->b << 16) |
        (color->g << 8) |
        (color->r);

    for (y = 0; y < video->height; y++) {
        buf = (uint32_t *) rbuf; // warning is for this line

        for (x = video->width; x >= video->bpp; x -= video->bpp) {
            *(buf++) = cola;
            *(buf++) = colb;
            *(buf++) = colc;
        }

        buf8 = (uint8_t *) buf;
        *(buf8++) = color->b;
        *(buf8++) = color->g;
        *(buf8++) = color->r;


        rbuf += video->pitch;
    }

    return VISUAL_OK;
}

1 Ответ

1 голос
/ 16 февраля 2012

Я не уверен, что ты можешь.Эта функция может вернуть массив цветов без выравнивания.Вы не можете ничего сделать, чтобы иметь возможность читать слова оттуда.Вам придется считывать цвет по компонентам (uint8_t), а затем создавать из них uint32_t, добавляя и сдвигая.

...