views:

83

answers:

1

Hey, I'm really struggling with this one. I'am trying to port a small piece of someone else's code to Python and this is what I have:

typedef struct
{
  uint8_t Y[LUMA_HEIGHT][LUMA_WIDTH];
  uint8_t Cb[CHROMA_HEIGHT][CHROMA_WIDTH];
  uint8_t Cr[CHROMA_HEIGHT][CHROMA_WIDTH];
} __attribute__((__packed__)) frame_t;

frame_t frame;

 while (! feof(stdin))
  {
    fread(&frame, 1, sizeof(frame), stdin);

    // DO SOME STUFF
  }

Later I need to access the data like so: frame.Y[x][y]

So I made a Class 'frame' in Python and inserted the corresponding variables(frame.Y, frame.Cb, frame.Cr). I have tried to sequentially map the data from Y[0][0] to Cr[MAX][MAX], even printed out the C struct in action but didn't manage to wrap my head around the method used to put the data in there. I've been struggling overnight with this and have to get back to the army tonight, so any immediate help is very welcome and appreciated.

Thanks

+6  A: 

You have to use struct python standard module.
From its documentation (emphasys added):

This module performs conversions between Python values and C structs represented as Python strings. It uses format strings (explained below) as compact descriptions of the lay-out of the C structs and the intended conversion to/from Python values. This can be used in handling binary data stored in files or from network connections, among other sources.

Note: as the data you are reading in the end is of a uniform format, you could also use the array module and then "restructure" the data in Python, but I think the best way to go is by using struct.

Roberto Liffredo
Thanks, I almost got this working when I noticed a seemingly meaningless bug which distorted all my output. My solution is now the same as I first stated - sequentially writing from Y[0][0] to Cr[MAX][MAX].Thanks for the help though.
kuratkull