2012-02-16 4 views
1

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

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

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

Смежные вопросы