that's my first post here so sorry if I do something wrong:). I will try to do my best.

I currently working on my HDR image processing program, and I wonna implement some basing TMO using Halide. Problem is all my images are represented as float array (with order like: b1,g1,r1,a1, b2,g2,r2,a2, ... ). Using Halide to process image require Halide::Image class. Problem is I don't know how to pass those data there. 

Anyone can help, or have same problem and know the answer?

Edit: 

Finally got it! I need to set stride on input and output buffer in generator. Thx all for help:-)

Edit:

I tried two different ways:

```
int halideOperations( float data[] , int size, int width,int heighy ) 
{ 
buffer_t input_buf = { 0 }; 
input_buf.host = &data[0]; 
} 

```

or: 

```
int halideOperations( float data[] , int size, int width,int heighy ) 
{ 
Halide::Image(Halide::Type::Float, x, y, 0, 0, data);
}

```

I was thinking about editing Halide.h file and changing uint8\_t \* host to float\_t \* host but i don't think it's good idea.

Edit:

I tried using code below with my float image (RGBA):

AOT function generation:

```
int main(int arg, char ** argv)
{
    Halide::ImageParam img(Halide::type_of<float>(), 3);
    Halide::Func f;
    Halide::Var x, y, c;
    f(x, y, c) = Halide::pow(img(x,y,c), 2.f);

    std::vector<Halide::Argument> arguments = { img };
    f.compile_to_file("function", arguments);
    return 0;
}

```

Proper code calling:

```
int halideOperations(float data[], int size, int width, int height)
{
    buffer_t  output_buf = { 0 };
    buffer_t buf = { 0 };
    buf.host = (uint8_t *)data; 
    float * output = new float[width * height * 4];
    output_buf.host = (uint8_t*)(output);
    output_buf.extent[0] = buf.extent[0] = width; 
    output_buf.extent[1] = buf.extent[1] = height; 
    output_buf.extent[2] = buf.extent[2] = 4;
    output_buf.stride[0] = buf.stride[0] = 4;
    output_buf.stride[1] = buf.stride[1] = width * 4;
    output_buf.elem_size = buf.elem_size = sizeof(float);

    function(&buf, &output_buf);

    delete output;
    return 1;
}

```

unfortunately I got crash with msg:

```
 Error: Constraint violated: f0.stride.0 (4) == 1 (1)

```

I think something is wrong with this line: output\_buf.stride[0] = buf.stride[0] = 4, but I'm not sure what should I change. Any tips?