The following is the delphi type definitions:
Code: type Proq_cell = ^roq_cell; roq_cell = record y0,y1,y2,y3,u,v : Byte; end; type Proq_qcell = ^roq_qcell; roq_qcell = record idx : array [0..3] of integer; end; Type PFile = ^File; type TArrayByte = array of Byte; type Proq_info = ^Troq_info; Troq_info = record FP : File; Buf_Size : Integer; Buf : TArrayByte; cells : array [0..255] of roq_cell; qcells : array [0..255] of roq_qcell; snd_sqr_arr : array [0..259] of Shortint; roq_start, aud_pos, vid_pos : Longint; Frame_offset : array of Longint; num_frames,num_audio_bytes : longword; width, height, frame_num, audio_channels : integer; y,u,v : array [0..1] of TArrayByte; stream_length : longint; audio_buf_size, audio_size : integer; audio : array of Byte; end;
My question is does the following look like correct convertions based on the type convertion above
Code: static void apply_vector_2x2(roq_info *ri, int x, int y, roq_cell *cell) { unsigned char *yptr; yptr = ri->y[0] + (y * ri->width) + x; *yptr++ = cell->y0; *yptr++ = cell->y1; yptr += (ri->width - 2); *yptr++ = cell->y2; *yptr++ = cell->y3; ri->u[0][(y/2) * (ri->width/2) + x/2] = cell->u; ri->v[0][(y/2) * (ri->width/2) + x/2] = cell->v; }
Code: procedure apply_vector_2x2(var ri:troq_info; x, y: integer; var cell:roq_cell); var p : integer; begin p := (y * ri.width) + x; ri.y[0][p] := cell.y0; inc(p); ri.y[0][p] := cell.y1; inc(p); p := p + (ri.width - 2); ri.y[0][p] := cell.y2; inc(p); ri.y[0][p] := cell.y3; inc(p); ri.u[0][(y div 2) * (ri.width div 2) + (x div 2)] := cell.u; ri.v[0][(y div 2) * (ri.width div 2) + (x div 2)] := cell.v; end;
Code: static void apply_vector_4x4(roq_info *ri, int x, int y, roq_cell *cell) { unsigned long row_inc, c_row_inc; register unsigned char y0, y1, u, v; unsigned char *yptr, *uptr, *vptr; yptr = ri->y[0] + (y * ri->width) + x; uptr = ri->u[0] + (y/2) * (ri->width/2) + x/2; vptr = ri->v[0] + (y/2) * (ri->width/2) + x/2; row_inc = ri->width - 4; c_row_inc = (ri->width/2) - 2; *yptr++ = y0 = cell->y0; *uptr++ = u = cell->u; *vptr++ = v = cell->v; *yptr++ = y0; *yptr++ = y1 = cell->y1; *uptr++ = u; *vptr++ = v; *yptr++ = y1; yptr += row_inc; *yptr++ = y0; *yptr++ = y0; *yptr++ = y1; *yptr++ = y1; yptr += row_inc; uptr += c_row_inc; vptr += c_row_inc; *yptr++ = y0 = cell->y2; *uptr++ = u; *vptr++ = v; *yptr++ = y0; *yptr++ = y1 = cell->y3; *uptr++ = u; *vptr++ = v; *yptr++ = y1; yptr += row_inc; *yptr++ = y0; *yptr++ = y0; *yptr++ = y1; *yptr++ = y1; }
Code: procedure apply_vector_4x4(var ri:troq_info; x, y: integer; var cell:roq_cell); var p,p2,p3 : integer; row_inc, c_row_inc : longint; y0, y1, u, v : byte; begin P := (y * ri.width) + x; P2 := (y div 2) * (ri.width div 2) + x div 2; P3 := (y div 2) * (ri.width div 2) + x div 2; row_inc := ri.width - 4; c_row_inc := (ri.width div 2) - 2; y0 := cell.y0; y1 := cell.y1; v := cell.v; u := cell.u; ri.y[0][p] := y0; Inc(p); ri.y[0][p] := y0; Inc(p); ri.y[0][p] := y1; Inc(p); ri.y[0][p] := y1; Inc(p); p := p + row_inc; ri.y[0][p] := y0; Inc(p); ri.y[0][p] := y0; Inc(p); ri.y[0][p] := y1; Inc(p); ri.y[0][p] := y1; Inc(p); p := p + row_inc; y0 := cell.y2; y1 := cell.y3; ri.y[0][p] := y0; Inc(p); ri.y[0][p] := y0; Inc(p); ri.y[0][p] := y1; Inc(p); ri.y[0][p] := y1; Inc(p); p := p + row_inc; ri.y[0][p] := y0; Inc(p); ri.y[0][p] := y0; Inc(p); ri.y[0][p] := y1; Inc(p); ri.y[0][p] := y1; Inc(p); u := cell.u; v := cell.v; ri.u[0][p2] := u; Inc(p2); ri.u[0][p2] := u; Inc(p2); p2 := p2 + c_row_inc; ri.u[0][p2] := u; Inc(p2); ri.u[0][p2] := u; Inc(p2); ri.v[0][p3] := v; Inc(p3); ri.v[0][p3] := v; Inc(p3); p3 := p3 + c_row_inc; ri.v[0][p3] := v; Inc(p3); ri.v[0][p3] := v; Inc(p3); end;
Code: static void apply_motion_4x4(roq_info *ri, int x, int y, unsigned char mv, char mean_x, char mean_y) { int i, mx, my; unsigned char *pa, *pb; mx = x + 8 - (mv >> 4) - mean_x; my = y + 8 - (mv & 0xf) - mean_y; pa = ri->y[0] + (y * ri->width) + x; pb = ri->y[1] + (my * ri->width) + mx; for(i = 0; i < 4; i++) { pa[0] = pb[0]; pa[1] = pb[1]; pa[2] = pb[2]; pa[3] = pb[3]; pa += ri->width; pb += ri->width; } pa = ri->u[0] + (y/2) * (ri->width/2) + x/2; pb = ri->u[1] + (my/2) * (ri->width/2) + (mx + 1)/2; for(i = 0; i < 2; i++) { pa[0] = pb[0]; pa[1] = pb[1]; pa += ri->width/2; pb += ri->width/2; } pa = ri->v[0] + (y/2) * (ri->width/2) + x/2; pb = ri->v[1] + (my/2) * (ri->width/2) + (mx + 1)/2; for(i = 0; i < 2; i++) { pa[0] = pb[0]; pa[1] = pb[1]; pa += ri->width/2; pb += ri->width/2; } }
Code: procedure apply_motion_4x4(var ri:troq_info; x, y: integer; mv,mean_x,mean_y : byte); var i,mx,my : integer; pa,pb : integer; begin mx := x + 8 - (mv shr 4) - mean_x; my := y + 8 - (mv and $f) - mean_y; pa := (y * ri.width) + x; //ri.y[0] pb := (my * ri.width) + mx; //ri.y[1] for i := 0 to 3 do begin ri.y[0][pa+0] := ri.y[1][pb+0]; ri.y[0][pa+1] := ri.y[1][pb+1]; ri.y[0][pa+2] := ri.y[1][pb+2]; ri.y[0][pa+3] := ri.y[1][pb+3]; pa := pa + ri.width; pb := pb + ri.width; end; pa := (y div 2) * (ri.width div 2) + x div 2; pb := (my div 2) * (ri.width div 2) + (mx + 1) div 2; for i := 0 to 1 do begin ri.u[0][pa+0] := ri.u[1][pb+0]; ri.u[0][pa+1] := ri.u[1][pb+1]; pa := pa + ri.width div 2; pb := pb + ri.width div 2; end; pa := (y div 2) * (ri.width div 2) + x div 2; pb := (my div 2) * (ri.width div 2) + (mx + 1) div 2; for i := 0 to 1 do begin ri.v[0][pa+0] := ri.v[1][pb+0]; ri.v[0][pa+1] := ri.v[1][pb+1]; pa := pa + ri.width div 2; pb := pb + ri.width div 2; end; end;
Code: static void apply_motion_8x8(roq_info *ri, int x, int y, unsigned char mv, char mean_x, char mean_y) { int mx, my, i; unsigned char *pa, *pb; mx = x + 8 - (mv >> 4) - mean_x; my = y + 8 - (mv & 0xf) - mean_y; pa = ri->y[0] + (y * ri->width) + x; pb = ri->y[1] + (my * ri->width) + mx; for(i = 0; i < 8; i++) { pa[0] = pb[0]; pa[1] = pb[1]; pa[2] = pb[2]; pa[3] = pb[3]; pa[4] = pb[4]; pa[5] = pb[5]; pa[6] = pb[6]; pa[7] = pb[7]; pa += ri->width; pb += ri->width; } pa = ri->u[0] + (y/2) * (ri->width/2) + x/2; pb = ri->u[1] + (my/2) * (ri->width/2) + (mx + 1)/2; for(i = 0; i < 4; i++) { pa[0] = pb[0]; pa[1] = pb[1]; pa[2] = pb[2]; pa[3] = pb[3]; pa += ri->width/2; pb += ri->width/2; } pa = ri->v[0] + (y/2) * (ri->width/2) + x/2; pb = ri->v[1] + (my/2) * (ri->width/2) + (mx + 1)/2; for(i = 0; i < 4; i++) { pa[0] = pb[0]; pa[1] = pb[1]; pa[2] = pb[2]; pa[3] = pb[3]; pa += ri->width/2; pb += ri->width/2; } }
Code: procedure apply_motion_8x8(var ri:troq_info; x, y: integer; mv,mean_x,mean_y : byte); var mx,my,i : integer; pa,pb : integer; begin mx := x + 8 - (mv shr 4) - mean_x; my := y + 8 - (mv and $f) - mean_y; pa := (y * ri.width) + x; //ri.y[0] pb := (my * ri.width) + mx; //ri.y[1] for x := 0 to 7 do begin ri.y[0][pa+0] := ri.y[1][pb+0]; ri.y[0][pa+1] := ri.y[1][pb+1]; ri.y[0][pa+2] := ri.y[1][pb+2]; ri.y[0][pa+3] := ri.y[1][pb+3]; ri.y[0][pa+4] := ri.y[1][pb+4]; ri.y[0][pa+5] := ri.y[1][pb+5]; ri.y[0][pa+6] := ri.y[1][pb+6]; ri.y[0][pa+7] := ri.y[1][pb+7]; pa := pa + ri.width; pb := pb + ri.width; end; pa := (y div 2) * (ri.width div 2) + x div 2; pb := (my div 2) * (ri.width div 2) + (mx + 1) div 2; for x := 0 to 3 do begin ri.u[0][pa+0] := ri.u[1][pb+0]; ri.u[0][pa+1] := ri.u[1][pb+1]; ri.u[0][pa+2] := ri.u[1][pb+2]; ri.u[0][pa+3] := ri.u[1][pb+3]; pa := pa + ri.width div 2; pb := pb + ri.width div 2; end; pa := (y div 2) * (ri.width div 2) + x div 2; pb := (my div 2) * (ri.width div 2) + (mx + 1) div 2; for x := 0 to 3 do begin ri.v[0][pa+0] := ri.v[1][pb+0]; ri.v[0][pa+1] := ri.v[1][pb+1]; ri.v[0][pa+2] := ri.v[1][pb+2]; ri.v[0][pa+3] := ri.v[1][pb+3]; pa := pa + ri.width div 2; pb := pb + ri.width div 2; end; end;
|