AV * construct_p_matrix ( SDL_Surface *surface ) { AV * matrix = newAV(); int i, j; for( i =0 ; i < surface->w; i++) { AV * matrix_row = newAV(); for( j =0 ; j < surface->h; j++) { av_push(matrix_row, get_pixel32(surface, i,j) ); } av_push(matrix, newRV_noinc((SV*) matrix_row) ); } return matrix; }