File schroedinger-strict-aliasing.patch of Package schroedinger
commit 7831a506bc6714b3db40e31584e61ccaa71d78d9
Author: David Schleef <ds@schleef.org>
Date: Wed Jun 3 11:39:46 2009 -0700
motion: merge SchroMotionVectorDC into SchroMotionVector
Fixes a bunch of compiler aliasing issues.
diff --git a/schroedinger/schrodecoder.c b/schroedinger/schrodecoder.c
index 4a2e803..485addb 100644
--- a/schroedinger/schrodecoder.c
+++ b/schroedinger/schrodecoder.c
@@ -2515,29 +2515,28 @@ schro_decoder_decode_prediction_unit(SchroPicture *picture, SchroArith **arith,
if (mv->pred_mode == 0) {
int pred[3];
- SchroMotionVectorDC *mvdc = (SchroMotionVectorDC *)mv;
schro_motion_dc_prediction (motion, x, y, pred);
if (!params->is_noarith) {
- mvdc->dc[0] = pred[0] + _schro_arith_decode_sint (
+ mv->u.dc.dc[0] = pred[0] + _schro_arith_decode_sint (
arith[SCHRO_DECODER_ARITH_DC_0],
SCHRO_CTX_LUMA_DC_CONT_BIN1, SCHRO_CTX_LUMA_DC_VALUE,
SCHRO_CTX_LUMA_DC_SIGN);
- mvdc->dc[1] = pred[1] + _schro_arith_decode_sint (
+ mv->u.dc.dc[1] = pred[1] + _schro_arith_decode_sint (
arith[SCHRO_DECODER_ARITH_DC_1],
SCHRO_CTX_CHROMA1_DC_CONT_BIN1, SCHRO_CTX_CHROMA1_DC_VALUE,
SCHRO_CTX_CHROMA1_DC_SIGN);
- mvdc->dc[2] = pred[2] + _schro_arith_decode_sint (
+ mv->u.dc.dc[2] = pred[2] + _schro_arith_decode_sint (
arith[SCHRO_DECODER_ARITH_DC_2],
SCHRO_CTX_CHROMA2_DC_CONT_BIN1, SCHRO_CTX_CHROMA2_DC_VALUE,
SCHRO_CTX_CHROMA2_DC_SIGN);
} else {
- mvdc->dc[0] = pred[0] +
+ mv->u.dc.dc[0] = pred[0] +
schro_unpack_decode_sint (unpack + SCHRO_DECODER_ARITH_DC_0);
- mvdc->dc[1] = pred[1] +
+ mv->u.dc.dc[1] = pred[1] +
schro_unpack_decode_sint (unpack + SCHRO_DECODER_ARITH_DC_1);
- mvdc->dc[2] = pred[2] +
+ mv->u.dc.dc[2] = pred[2] +
schro_unpack_decode_sint (unpack + SCHRO_DECODER_ARITH_DC_2);
}
} else {
@@ -2562,18 +2561,18 @@ schro_decoder_decode_prediction_unit(SchroPicture *picture, SchroArith **arith,
&pred_x, &pred_y, 1);
if (!params->is_noarith) {
- mv->dx[0] = pred_x + _schro_arith_decode_sint (
+ mv->u.vec.dx[0] = pred_x + _schro_arith_decode_sint (
arith[SCHRO_DECODER_ARITH_VECTOR_REF1_X],
SCHRO_CTX_MV_REF1_H_CONT_BIN1, SCHRO_CTX_MV_REF1_H_VALUE,
SCHRO_CTX_MV_REF1_H_SIGN);
- mv->dy[0] = pred_y + _schro_arith_decode_sint (
+ mv->u.vec.dy[0] = pred_y + _schro_arith_decode_sint (
arith[SCHRO_DECODER_ARITH_VECTOR_REF1_Y],
SCHRO_CTX_MV_REF1_V_CONT_BIN1, SCHRO_CTX_MV_REF1_V_VALUE,
SCHRO_CTX_MV_REF1_V_SIGN);
} else {
- mv->dx[0] = pred_x + schro_unpack_decode_sint (
+ mv->u.vec.dx[0] = pred_x + schro_unpack_decode_sint (
unpack + SCHRO_DECODER_ARITH_VECTOR_REF1_X);
- mv->dy[0] = pred_y + schro_unpack_decode_sint (
+ mv->u.vec.dy[0] = pred_y + schro_unpack_decode_sint (
unpack + SCHRO_DECODER_ARITH_VECTOR_REF1_Y);
}
}
@@ -2582,26 +2581,26 @@ schro_decoder_decode_prediction_unit(SchroPicture *picture, SchroArith **arith,
&pred_x, &pred_y, 2);
if (!params->is_noarith) {
- mv->dx[1] = pred_x + _schro_arith_decode_sint (
+ mv->u.vec.dx[1] = pred_x + _schro_arith_decode_sint (
arith[SCHRO_DECODER_ARITH_VECTOR_REF2_X],
SCHRO_CTX_MV_REF2_H_CONT_BIN1, SCHRO_CTX_MV_REF2_H_VALUE,
SCHRO_CTX_MV_REF2_H_SIGN);
- mv->dy[1] = pred_y + _schro_arith_decode_sint (
+ mv->u.vec.dy[1] = pred_y + _schro_arith_decode_sint (
arith[SCHRO_DECODER_ARITH_VECTOR_REF2_Y],
SCHRO_CTX_MV_REF2_V_CONT_BIN1, SCHRO_CTX_MV_REF2_V_VALUE,
SCHRO_CTX_MV_REF2_V_SIGN);
} else {
- mv->dx[1] = pred_x + schro_unpack_decode_sint (
+ mv->u.vec.dx[1] = pred_x + schro_unpack_decode_sint (
unpack + SCHRO_DECODER_ARITH_VECTOR_REF2_X);
- mv->dy[1] = pred_y + schro_unpack_decode_sint (
+ mv->u.vec.dy[1] = pred_y + schro_unpack_decode_sint (
unpack + SCHRO_DECODER_ARITH_VECTOR_REF2_Y);
}
}
} else {
- mv->dx[0] = 0;
- mv->dy[0] = 0;
- mv->dx[1] = 0;
- mv->dy[1] = 0;
+ mv->u.vec.dx[0] = 0;
+ mv->u.vec.dy[0] = 0;
+ mv->u.vec.dx[1] = 0;
+ mv->u.vec.dy[1] = 0;
}
}
}
diff --git a/schroedinger/schroencoder.c b/schroedinger/schroencoder.c
index 7c92bcb..6265745 100644
--- a/schroedinger/schroencoder.c
+++ b/schroedinger/schroencoder.c
@@ -1931,8 +1931,8 @@ schro_encoder_encode_vector_data (SchroEncoderFrame *frame, int ref, int xy)
if ((mv->pred_mode&(1<<ref)) && !mv->using_global) {
schro_motion_vector_prediction (frame->motion,
i+k, j+l, &pred_x, &pred_y, 1<<ref);
- x = mv->dx[ref];
- y = mv->dy[ref];
+ x = mv->u.vec.dx[ref];
+ y = mv->u.vec.dy[ref];
if (!params->is_noarith) {
if (xy == 0) {
@@ -1999,7 +1999,6 @@ schro_encoder_encode_dc_data (SchroEncoderFrame *frame, int comp)
if (mv->pred_mode == 0) {
int pred[3];
- SchroMotionVectorDC *mvdc = (SchroMotionVectorDC *)mv;
schro_motion_dc_prediction (frame->motion, i+k, j+l, pred);
@@ -2009,25 +2008,25 @@ schro_encoder_encode_dc_data (SchroEncoderFrame *frame, int comp)
_schro_arith_encode_sint (arith,
SCHRO_CTX_LUMA_DC_CONT_BIN1, SCHRO_CTX_LUMA_DC_VALUE,
SCHRO_CTX_LUMA_DC_SIGN,
- mvdc->dc[0] - pred[0]);
+ mv->u.dc.dc[0] - pred[0]);
break;
case 1:
_schro_arith_encode_sint (arith,
SCHRO_CTX_CHROMA1_DC_CONT_BIN1, SCHRO_CTX_CHROMA1_DC_VALUE,
SCHRO_CTX_CHROMA1_DC_SIGN,
- mvdc->dc[1] - pred[1]);
+ mv->u.dc.dc[1] - pred[1]);
break;
case 2:
_schro_arith_encode_sint (arith,
SCHRO_CTX_CHROMA2_DC_CONT_BIN1, SCHRO_CTX_CHROMA2_DC_VALUE,
SCHRO_CTX_CHROMA2_DC_SIGN,
- mvdc->dc[2] - pred[2]);
+ mv->u.dc.dc[2] - pred[2]);
break;
default:
SCHRO_ASSERT(0);
}
} else {
- schro_pack_encode_sint (pack, mvdc->dc[comp] - pred[comp]);
+ schro_pack_encode_sint (pack, mv->u.dc.dc[comp] - pred[comp]);
}
}
}
diff --git a/schroedinger/schroglobalest.c b/schroedinger/schroglobalest.c
index 67608ea..1ac8e6d 100644
--- a/schroedinger/schroglobalest.c
+++ b/schroedinger/schroglobalest.c
@@ -48,8 +48,8 @@ schro_motion_global_metric (SchroMotionField *field, SchroFrame *frame,
for(i=0;i<field->x_num_blocks;i++){
mv = field->motion_vectors + j*field->x_num_blocks + i;
- x = i*8 + mv->dx[ref];
- y = j*8 + mv->dy[ref];
+ x = i*8 + mv->u.vec.dx[ref];
+ y = j*8 + mv->u.vec.dy[ref];
#if 0
mv->metric = schro_metric_absdiff_u8 (
frame->components[0].data + x + y*frame->components[0].stride,
@@ -111,8 +111,8 @@ schro_motion_field_global_estimation (SchroMotionField *mf,
for(i=0;i<mf->x_num_blocks;i++) {
mv = mf->motion_vectors + j*mf->x_num_blocks + i;
if (mv->using_global) {
- m_f += mv->dx[ref];
- m_g += mv->dy[ref];
+ m_f += mv->u.vec.dx[ref];
+ m_g += mv->u.vec.dy[ref];
m_x += i*xbsep;
m_y += j*ybsep;
n++;
@@ -137,10 +137,10 @@ schro_motion_field_global_estimation (SchroMotionField *mf,
for(i=0;i<mf->x_num_blocks;i++) {
mv = mf->motion_vectors + j*mf->x_num_blocks + i;
if (mv->using_global) {
- m_fx += (mv->dx[ref] - pan_x) * (i*xbsep - ave_x);
- m_fy += (mv->dx[ref] - pan_x) * (j*ybsep - ave_y);
- m_gx += (mv->dy[ref] - pan_y) * (i*xbsep - ave_x);
- m_gy += (mv->dy[ref] - pan_y) * (j*ybsep - ave_y);
+ m_fx += (mv->u.vec.dx[ref] - pan_x) * (i*xbsep - ave_x);
+ m_fy += (mv->u.vec.dx[ref] - pan_x) * (j*ybsep - ave_y);
+ m_gx += (mv->u.vec.dy[ref] - pan_y) * (i*xbsep - ave_x);
+ m_gy += (mv->u.vec.dy[ref] - pan_y) * (j*ybsep - ave_y);
m_xx += (i*xbsep - ave_x) * (i*xbsep - ave_x);
m_yy += (j*ybsep - ave_y) * (j*ybsep - ave_y);
n++;
@@ -164,8 +164,8 @@ schro_motion_field_global_estimation (SchroMotionField *mf,
mv = mf->motion_vectors + j*mf->x_num_blocks + i;
if (mv->using_global) {
double dx, dy;
- dx = mv->dx[ref] - (pan_x + a00 * i + a01 * j);
- dy = mv->dy[ref] - (pan_y + a10 * i + a11 * j);
+ dx = mv->u.vec.dx[ref] - (pan_x + a00 * i + a01 * j);
+ dy = mv->u.vec.dy[ref] - (pan_y + a10 * i + a11 * j);
sum2 += dx * dx + dy * dy;
}
}
@@ -181,8 +181,8 @@ schro_motion_field_global_estimation (SchroMotionField *mf,
for(i=0;i<mf->x_num_blocks;i++) {
double dx, dy;
mv = mf->motion_vectors + j*mf->x_num_blocks + i;
- dx = mv->dx[ref] - (pan_x + a00 * i + a01 * j);
- dy = mv->dy[ref] - (pan_y + a10 * i + a11 * j);
+ dx = mv->u.vec.dx[ref] - (pan_x + a00 * i + a01 * j);
+ dy = mv->u.vec.dy[ref] - (pan_y + a10 * i + a11 * j);
mv->using_global = (dx * dx + dy * dy < stddev2*16);
n += mv->using_global;
}
@@ -211,10 +211,10 @@ schro_motion_field_global_estimation (SchroMotionField *mf,
for(i=0;i<mf->x_num_blocks;i++) {
mv = mf->motion_vectors + j*mf->x_num_blocks + i;
mv->using_global = 1;
- //mv->dx[ref] = gm->b0 + ((gm->a00 * (i*8) + gm->a01 * (j*8))>>gm->a_exp) - i*8;
- //mv->dy[ref] = gm->b1 + ((gm->a10 * (i*8) + gm->a11 * (j*8))>>gm->a_exp) - j*8;
- mv->dx[ref] = 0;
- mv->dy[ref] = 0;
+ //mv->u.vec.dx[ref] = gm->b0 + ((gm->a00 * (i*8) + gm->a01 * (j*8))>>gm->a_exp) - i*8;
+ //mv->u.vec.dy[ref] = gm->b1 + ((gm->a10 * (i*8) + gm->a11 * (j*8))>>gm->a_exp) - j*8;
+ mv->u.vec.dx[ref] = 0;
+ mv->u.vec.dy[ref] = 0;
}
}
}
@@ -229,8 +229,8 @@ schro_motionest_superblock_global (SchroMotionEst *me, int ref,
mv->split = 0;
mv->pred_mode = 1<<ref;
mv->using_global = 1;
- mv->dx[ref] = 0;
- mv->dy[ref] = 0;
+ mv->u.vec.dx[ref] = 0;
+ mv->u.vec.dy[ref] = 0;
//block->error = schro_motionest_superblock_get_metric (me, block, i, j);
block->error = (ref==1) ? -1000 : 1000;
block->entropy = 0;
diff --git a/schroedinger/schromotion.c b/schroedinger/schromotion.c
index b7fcbdb..0a6ff63 100644
--- a/schroedinger/schromotion.c
+++ b/schroedinger/schromotion.c
@@ -93,12 +93,11 @@ static int
get_dc_pixel (SchroMotion *motion, int i, int j, int k, int x, int y)
{
SchroParams *params = motion->params;
- SchroMotionVectorDC *mvdc;
+ SchroMotionVector *mv;
- mvdc = (SchroMotionVectorDC *)
- &motion->motion_vectors[j*params->x_num_blocks + i];
+ mv = &motion->motion_vectors[j*params->x_num_blocks + i];
- return mvdc->dc[k] + 128;
+ return mv->u.dc.dc[k] + 128;
}
static int
@@ -113,8 +112,8 @@ get_ref1_pixel (SchroMotion *motion, int i, int j, int k, int x, int y)
if (mv->using_global) {
schro_motion_get_global_vector (motion, 0, x, y, &dx, &dy);
} else {
- dx = mv->dx[0];
- dy = mv->dy[0];
+ dx = mv->u.vec.dx[0];
+ dy = mv->u.vec.dy[0];
}
value = (motion->ref1_weight + motion->ref2_weight) *
@@ -135,8 +134,8 @@ get_ref2_pixel (SchroMotion *motion, int i, int j, int k, int x, int y)
if (mv->using_global) {
schro_motion_get_global_vector (motion, 1, x, y, &dx, &dy);
} else {
- dx = mv->dx[1];
- dy = mv->dy[1];
+ dx = mv->u.vec.dx[1];
+ dy = mv->u.vec.dy[1];
}
value = (motion->ref1_weight + motion->ref2_weight) *
@@ -158,10 +157,10 @@ get_biref_pixel (SchroMotion *motion, int i, int j, int k, int x, int y)
schro_motion_get_global_vector (motion, 0, x, y, &dx0, &dy0);
schro_motion_get_global_vector (motion, 1, x, y, &dx1, &dy1);
} else {
- dx0 = mv->dx[0];
- dy0 = mv->dy[0];
- dx1 = mv->dx[1];
- dy1 = mv->dy[1];
+ dx0 = mv->u.vec.dx[0];
+ dy0 = mv->u.vec.dy[0];
+ dx1 = mv->u.vec.dx[1];
+ dy1 = mv->u.vec.dy[1];
}
value = motion->ref1_weight *
@@ -312,15 +311,14 @@ static void
get_dc_block (SchroMotion *motion, int i, int j, int k, int x, int y)
{
SchroParams *params = motion->params;
- SchroMotionVectorDC *mvdc;
+ SchroMotionVector *mv;
int value;
int ii, jj;
- mvdc = (SchroMotionVectorDC *)
- &motion->motion_vectors[j*params->x_num_blocks + i];
+ mv = &motion->motion_vectors[j*params->x_num_blocks + i];
memcpy (&motion->block, &motion->alloc_block, sizeof(SchroFrameData));
- value = mvdc->dc[k];
+ value = mv->u.dc.dc[k];
for(jj=0;jj<motion->yblen;jj++) {
uint8_t *data = SCHRO_FRAME_DATA_GET_LINE (&motion->block, jj);
/* FIXME splat */
@@ -342,7 +340,7 @@ get_ref1_block (SchroMotion *motion, int i, int j, int k, int x, int y)
mv = &motion->motion_vectors[j*params->x_num_blocks + i];
SCHRO_ASSERT (mv->using_global == FALSE);
- get_block (motion, k, 0, i, j, mv->dx[0], mv->dy[0]);
+ get_block (motion, k, 0, i, j, mv->u.vec.dx[0], mv->u.vec.dy[0]);
weight = motion->ref1_weight + motion->ref2_weight;
shift = motion->ref_weight_precision;
@@ -375,7 +373,7 @@ get_ref2_block (SchroMotion *motion, int i, int j, int k, int x, int y)
mv = &motion->motion_vectors[j*params->x_num_blocks + i];
SCHRO_ASSERT (mv->using_global == FALSE);
- get_block (motion, k, 1, i, j, mv->dx[1], mv->dy[1]);
+ get_block (motion, k, 1, i, j, mv->u.vec.dx[1], mv->u.vec.dy[1]);
weight = motion->ref1_weight + motion->ref2_weight;
shift = motion->ref_weight_precision;
@@ -408,8 +406,8 @@ get_biref_block (SchroMotion *motion, int i, int j, int k, int x, int y)
mv = &motion->motion_vectors[j*params->x_num_blocks + i];
SCHRO_ASSERT (mv->using_global == FALSE);
- get_block (motion, k, 0, i, j, mv->dx[0], mv->dy[0]);
- get_block (motion, k, 1, i, j, mv->dx[1], mv->dy[1]);
+ get_block (motion, k, 0, i, j, mv->u.vec.dx[0], mv->u.vec.dy[0]);
+ get_block (motion, k, 1, i, j, mv->u.vec.dx[1], mv->u.vec.dy[1]);
weight0 = motion->ref1_weight;
weight1 = motion->ref2_weight;
@@ -870,7 +868,7 @@ schro_motion_render (SchroMotion *motion, SchroFrame *dest)
void
schro_motion_dc_prediction (SchroMotion *motion, int x, int y, int *pred)
{
- SchroMotionVectorDC *mvdc;
+ SchroMotionVector *mv;
int i;
for(i=0;i<3;i++){
@@ -878,23 +876,23 @@ schro_motion_dc_prediction (SchroMotion *motion, int x, int y, int *pred)
int n = 0;
if (x>0) {
- mvdc = SCHRO_MOTION_GET_DC_BLOCK(motion,x-1,y);
- if (mvdc->pred_mode == 0) {
- sum += mvdc->dc[i];
+ mv = SCHRO_MOTION_GET_BLOCK(motion,x-1,y);
+ if (mv->pred_mode == 0) {
+ sum += mv->u.dc.dc[i];
n++;
}
}
if (y>0) {
- mvdc = SCHRO_MOTION_GET_DC_BLOCK(motion,x,y-1);
- if (mvdc->pred_mode == 0) {
- sum += mvdc->dc[i];
+ mv = SCHRO_MOTION_GET_BLOCK(motion,x,y-1);
+ if (mv->pred_mode == 0) {
+ sum += mv->u.dc.dc[i];
n++;
}
}
if (x>0 && y>0) {
- mvdc = SCHRO_MOTION_GET_DC_BLOCK(motion,x-1,y-1);
- if (mvdc->pred_mode == 0) {
- sum += mvdc->dc[i];
+ mv = SCHRO_MOTION_GET_BLOCK(motion,x-1,y-1);
+ if (mv->pred_mode == 0) {
+ sum += mv->u.dc.dc[i];
n++;
}
}
@@ -974,24 +972,24 @@ schro_motion_vector_prediction (SchroMotion *motion,
if (x>0) {
mv = SCHRO_MOTION_GET_BLOCK(motion,x-1,y);
if (mv->using_global == FALSE && (mv->pred_mode & mode)) {
- vx[n] = mv->dx[mode-1];
- vy[n] = mv->dy[mode-1];
+ vx[n] = mv->u.vec.dx[mode-1];
+ vy[n] = mv->u.vec.dy[mode-1];
n++;
}
}
if (y>0) {
mv = SCHRO_MOTION_GET_BLOCK(motion,x,y-1);
if (mv->using_global == FALSE && (mv->pred_mode & mode)) {
- vx[n] = mv->dx[mode-1];
- vy[n] = mv->dy[mode-1];
+ vx[n] = mv->u.vec.dx[mode-1];
+ vy[n] = mv->u.vec.dy[mode-1];
n++;
}
}
if (x>0 && y>0) {
mv = SCHRO_MOTION_GET_BLOCK(motion,x-1,y-1);
if (mv->using_global == FALSE && (mv->pred_mode & mode)) {
- vx[n] = mv->dx[mode-1];
- vy[n] = mv->dy[mode-1];
+ vx[n] = mv->u.vec.dx[mode-1];
+ vy[n] = mv->u.vec.dy[mode-1];
n++;
}
}
@@ -1132,14 +1130,13 @@ schro_motion_verify (SchroMotion *motion)
switch (mv->pred_mode) {
case 0:
{
- SchroMotionVectorDC *mvdc = (SchroMotionVectorDC *)mv;
int i;
for(i=0;i<3;i++){
/* FIXME 8bit */
- if (mvdc->dc[i] < -128 || mvdc->dc[i] > 127) {
+ if (mv->u.dc.dc[i] < -128 || mv->u.dc.dc[i] > 127) {
SCHRO_ERROR("mv(%d,%d) has bad DC value [%d] %d", x, y,
- i, mvdc->dc[i]);
+ i, mv->u.dc.dc[i]);
return 0;
}
}
diff --git a/schroedinger/schromotion.h b/schroedinger/schromotion.h
index abe5a1b..9fde83a 100644
--- a/schroedinger/schromotion.h
+++ b/schroedinger/schromotion.h
@@ -21,19 +21,15 @@ struct _SchroMotionVector {
unsigned int unused : 3;
unsigned int scan : 8;
unsigned int metric : 16;
- int16_t dx[2];
- int16_t dy[2];
-};
-
-struct _SchroMotionVectorDC {
- unsigned int pred_mode : 2;
- unsigned int using_global : 1;
- unsigned int split : 2;
- unsigned int unused : 3;
- unsigned int scan : 8;
- unsigned int metric : 16;
- int16_t dc[3];
- uint16_t _padding1;
+ union {
+ struct {
+ int16_t dx[2];
+ int16_t dy[2];
+ } vec;
+ struct {
+ int16_t dc[3];
+ } dc;
+ } u;
};
struct _SchroMotionField {
@@ -78,8 +74,6 @@ struct _SchroMotion {
#define SCHRO_MOTION_GET_BLOCK(motion,x,y) \
((motion)->motion_vectors+(y)*(motion)->params->x_num_blocks + (x))
-#define SCHRO_MOTION_GET_DC_BLOCK(motion,x,y) \
- ((SchroMotionVectorDC *)SCHRO_MOTION_GET_BLOCK(motion,x,y))
SchroMotion * schro_motion_new (SchroParams *params,
SchroUpsampledFrame *ref1, SchroUpsampledFrame *ref2);
diff --git a/schroedinger/schromotionest.c b/schroedinger/schromotionest.c
index aec43ef..f973302 100644
--- a/schroedinger/schromotionest.c
+++ b/schroedinger/schromotionest.c
@@ -154,12 +154,12 @@ schro_encoder_motion_refine_block_subpel (SchroEncoderFrame *frame,
for(jj=0;jj<4;jj+=skip){
for(ii=0;ii<4;ii+=skip){
if (block->mv[jj][ii].pred_mode & 1) {
- block->mv[jj][ii].dx[0] <<= params->mv_precision;
- block->mv[jj][ii].dy[0] <<= params->mv_precision;
+ block->mv[jj][ii].u.vec.dx[0] <<= params->mv_precision;
+ block->mv[jj][ii].u.vec.dy[0] <<= params->mv_precision;
}
if (block->mv[jj][ii].pred_mode & 2) {
- block->mv[jj][ii].dx[1] <<= params->mv_precision;
- block->mv[jj][ii].dy[1] <<= params->mv_precision;
+ block->mv[jj][ii].u.vec.dx[1] <<= params->mv_precision;
+ block->mv[jj][ii].u.vec.dy[1] <<= params->mv_precision;
}
}
}
@@ -195,8 +195,8 @@ schro_encoder_motion_refine_block_subpel (SchroEncoderFrame *frame,
for(dx=-1;dx<=1;dx++) {
for(dy=-1;dy<=1;dy++) {
schro_upsampled_frame_get_subdata_prec1 (ref_upframe, 0,
- 2*x + block->mv[jj][ii].dx[ref] + dx,
- 2*y + block->mv[jj][ii].dy[ref] + dy,
+ 2*x + block->mv[jj][ii].u.vec.dx[ref] + dx,
+ 2*y + block->mv[jj][ii].u.vec.dy[ref] + dy,
&ref_fd);
metric = schro_metric_get (&orig, &ref_fd, width, height);
@@ -207,8 +207,8 @@ schro_encoder_motion_refine_block_subpel (SchroEncoderFrame *frame,
}
}
}
- block->mv[ii][ii].dx[ref] += min_dx;
- block->mv[jj][ii].dy[ref] += min_dy;
+ block->mv[ii][ii].u.vec.dx[ref] += min_dx;
+ block->mv[jj][ii].u.vec.dy[ref] += min_dy;
block->error = metric;
}
}
@@ -353,7 +353,7 @@ schro_motion_field_dump (SchroMotionField *field)
for(j=0;j<field->y_num_blocks;j++){
for(i=0;i<field->x_num_blocks;i++){
mv = field->motion_vectors + j*field->x_num_blocks + i;
- printf("%d %d %d %d\n", i, j, mv->dx[0], mv->dy[0]);
+ printf("%d %d %d %d\n", i, j, mv->u.vec.dx[0], mv->u.vec.dy[0]);
}
}
exit(0);
@@ -437,13 +437,13 @@ schro_motionest_superblock_scan_one (SchroMotionEst *me, int ref, int distance,
mv = &block->mv[0][0];
hint_mv = motion_field_get (hint_mf, i, j);
- dx = hint_mv->dx[ref];
- dy = hint_mv->dy[ref];
+ dx = hint_mv->u.vec.dx[ref];
+ dy = hint_mv->u.vec.dy[ref];
schro_metric_scan_setup (&scan, dx, dy, distance);
if (scan.scan_width <= 0 || scan.scan_height <= 0) {
- mv->dx[ref] = 0;
- mv->dy[ref] = 0;
+ mv->u.vec.dx[ref] = 0;
+ mv->u.vec.dy[ref] = 0;
mv->metric = SCHRO_METRIC_INVALID;
block->valid = FALSE;
return;
@@ -456,8 +456,8 @@ schro_motionest_superblock_scan_one (SchroMotionEst *me, int ref, int distance,
mv->split = 0;
mv->pred_mode = 1<<ref;
mv->using_global = 0;
- mv->dx[ref] = dx;
- mv->dy[ref] = dy;
+ mv->u.vec.dx[ref] = dx;
+ mv->u.vec.dy[ref] = dy;
schro_block_fixup (block);
block->entropy = schro_motion_superblock_try_estimate_entropy (me->motion,
@@ -478,8 +478,8 @@ schro_motionest_superblock_predicted (SchroMotionEst *me, int ref,
mv->split = 0;
mv->pred_mode = 1<<ref;
mv->using_global = 0;
- mv->dx[ref] = pred_x;
- mv->dy[ref] = pred_y;
+ mv->u.vec.dx[ref] = pred_x;
+ mv->u.vec.dy[ref] = pred_y;
block->error = schro_motionest_superblock_get_metric (me, block, i, j);
block->entropy = 0;
schro_block_fixup (block);
@@ -497,10 +497,10 @@ schro_motionest_superblock_biref_zero (SchroMotionEst *me,
mv->split = 0;
mv->pred_mode = 3;
mv->using_global = 0;
- mv->dx[0] = 0;
- mv->dy[0] = 0;
- mv->dx[1] = 0;
- mv->dy[1] = 0;
+ mv->u.vec.dx[0] = 0;
+ mv->u.vec.dy[0] = 0;
+ mv->u.vec.dx[1] = 0;
+ mv->u.vec.dy[1] = 0;
block->error = schro_motionest_superblock_get_metric (me, block, i, j);
schro_block_fixup (block);
block->entropy = schro_motion_superblock_try_estimate_entropy (me->motion,
@@ -513,18 +513,18 @@ schro_motionest_superblock_dc (SchroMotionEst *me,
SchroBlock *block, int i, int j)
{
SchroParams *params = me->params;
- SchroMotionVectorDC *mvdc;
+ SchroMotionVector *mv;
int chroma_w, chroma_h;
SchroFrame *frame;
int metric;
frame = get_downsampled (me->encoder_frame, 0);
- mvdc = (SchroMotionVectorDC *)&block->mv[0][0];
- mvdc->split = 0;
- mvdc->pred_mode = 0;
+ mv = &block->mv[0][0];
+ mv->split = 0;
+ mv->pred_mode = 0;
- metric = schro_block_average (&mvdc->dc[0], frame->components + 0,
+ metric = schro_block_average (&mv->u.dc.dc[0], frame->components + 0,
i * params->xbsep_luma, j * params->ybsep_luma,
4 * params->xbsep_luma, 4 * params->ybsep_luma);
if (metric == SCHRO_METRIC_INVALID_2) {
@@ -533,12 +533,12 @@ schro_motionest_superblock_dc (SchroMotionEst *me,
}
chroma_w = params->xbsep_luma>>SCHRO_CHROMA_FORMAT_H_SHIFT(params->video_format->chroma_format);
chroma_h = params->ybsep_luma>>SCHRO_CHROMA_FORMAT_V_SHIFT(params->video_format->chroma_format);
- schro_block_average (&mvdc->dc[1], frame->components + 1,
+ schro_block_average (&mv->u.dc.dc[1], frame->components + 1,
i * chroma_w, j * chroma_h, 4 * chroma_w, 4 * chroma_h);
- schro_block_average (&mvdc->dc[2], frame->components + 2,
+ schro_block_average (&mv->u.dc.dc[2], frame->components + 2,
i * chroma_w, j * chroma_h, 4 * chroma_w, 4 * chroma_h);
- mvdc->metric = metric/16;
+ mv->metric = metric/16;
block->error = metric;
/* FIXME magic parameter */
block->error += 4 * 2 * me->params->xbsep_luma * 10;
@@ -554,22 +554,22 @@ static void
schro_motionest_superblock_dc_predicted (SchroMotionEst *me,
SchroBlock *block, int i, int j)
{
- SchroMotionVectorDC *mvdc;
+ SchroMotionVector *mv;
int pred[3];
schro_motion_dc_prediction (me->motion, i, j, pred);
- mvdc = (SchroMotionVectorDC *)&block->mv[0][0];
- mvdc->split = 0;
- mvdc->pred_mode = 0;
- mvdc->dc[0] = pred[0];
- mvdc->dc[1] = pred[1];
- mvdc->dc[2] = pred[2];
+ mv = &block->mv[0][0];
+ mv->split = 0;
+ mv->pred_mode = 0;
+ mv->u.dc.dc[0] = pred[0];
+ mv->u.dc.dc[1] = pred[1];
+ mv->u.dc.dc[2] = pred[2];
block->error = schro_motionest_superblock_get_metric (me, block, i, j);
/* FIXME magic parameter */
block->error += 4 * 2 * me->params->xbsep_luma * 10;
- mvdc->metric = block->error/16;
+ mv->metric = block->error/16;
schro_block_fixup (block);
block->entropy = 0;
@@ -639,15 +639,15 @@ schro_motionest_block_scan_one (SchroMotionEst *me, int ref, int distance,
mv = &block->mv[jj][ii];
hint_mv = motion_field_get (hint_mf, i + (ii&2), j + (jj&2));
- dx = hint_mv->dx[ref];
- dy = hint_mv->dy[ref];
+ dx = hint_mv->u.vec.dx[ref];
+ dy = hint_mv->u.vec.dy[ref];
scan.x = (i + ii) * params->xbsep_luma;
scan.y = (j + jj) * params->ybsep_luma;
schro_metric_scan_setup (&scan, dx, dy, distance);
if (scan.scan_width <= 0 || scan.scan_height <= 0) {
- mv->dx[ref] = 0;
- mv->dy[ref] = 0;
+ mv->u.vec.dx[ref] = 0;
+ mv->u.vec.dy[ref] = 0;
mv->metric = SCHRO_METRIC_INVALID;
block->error += mv->metric;
block->valid = FALSE;
@@ -662,8 +662,8 @@ schro_motionest_block_scan_one (SchroMotionEst *me, int ref, int distance,
mv->split = 2;
mv->pred_mode = 1<<ref;
mv->using_global = 0;
- mv->dx[ref] = dx;
- mv->dy[ref] = dy;
+ mv->u.vec.dx[ref] = dx;
+ mv->u.vec.dy[ref] = dy;
}
}
@@ -709,15 +709,15 @@ schro_motionest_block_scan (SchroMotionEst *me, int ref, int distance,
mv = &block->mv[jj][ii];
hint_mv = motion_field_get (hint_mf, i + (ii&2), j + (jj&2));
- dx = hint_mv->dx[ref];
- dy = hint_mv->dy[ref];
+ dx = hint_mv->u.vec.dx[ref];
+ dy = hint_mv->u.vec.dy[ref];
scan.x = (i + ii) * params->xbsep_luma;
scan.y = (j + jj) * params->ybsep_luma;
schro_metric_scan_setup (&scan, dx, dy, distance);
if (scan.scan_width <= 0 || scan.scan_height <= 0) {
- mv->dx[ref] = 0;
- mv->dy[ref] = 0;
+ mv->u.vec.dx[ref] = 0;
+ mv->u.vec.dy[ref] = 0;
mv->metric = SCHRO_METRIC_INVALID;
block->error += mv->metric;
block->valid = FALSE;
@@ -732,8 +732,8 @@ schro_motionest_block_scan (SchroMotionEst *me, int ref, int distance,
mv->split = 2;
mv->pred_mode = 1<<ref;
mv->using_global = 0;
- mv->dx[ref] = dx;
- mv->dy[ref] = dy;
+ mv->u.vec.dx[ref] = dx;
+ mv->u.vec.dy[ref] = dy;
schro_block_fixup (block);
@@ -748,18 +748,18 @@ schro_motionest_block_dc (SchroMotionEst *me,
SchroBlock *block, int i, int j, int ii, int jj)
{
SchroParams *params = me->params;
- SchroMotionVectorDC *mvdc;
+ SchroMotionVector *mv;
int chroma_w, chroma_h;
SchroFrame *frame;
int metric;
frame = get_downsampled (me->encoder_frame, 0);
- mvdc = (SchroMotionVectorDC *)&(block->mv[jj][ii]);
- mvdc->split = 2;
- mvdc->pred_mode = 0;
+ mv = &(block->mv[jj][ii]);
+ mv->split = 2;
+ mv->pred_mode = 0;
- metric = schro_block_average (&mvdc->dc[0], frame->components + 0,
+ metric = schro_block_average (&mv->u.dc.dc[0], frame->components + 0,
(i + ii) * params->xbsep_luma, (j + jj) * params->ybsep_luma,
params->xbsep_luma, params->ybsep_luma);
if (metric == SCHRO_METRIC_INVALID_2) {
@@ -768,12 +768,12 @@ schro_motionest_block_dc (SchroMotionEst *me,
}
chroma_w = params->xbsep_luma>>SCHRO_CHROMA_FORMAT_H_SHIFT(params->video_format->chroma_format);
chroma_h = params->ybsep_luma>>SCHRO_CHROMA_FORMAT_V_SHIFT(params->video_format->chroma_format);
- schro_block_average (&mvdc->dc[1], frame->components + 1,
+ schro_block_average (&mv->u.dc.dc[1], frame->components + 1,
(i + ii) * chroma_w, (j+jj) * chroma_h, chroma_w, chroma_h);
- schro_block_average (&mvdc->dc[2], frame->components + 2,
+ schro_block_average (&mv->u.dc.dc[2], frame->components + 2,
(i + ii) * chroma_w, (j+jj) * chroma_h, chroma_w, chroma_h);
- mvdc->metric = metric;
+ mv->metric = metric;
block->error = metric;
/* FIXME magic parameter */
block->error += 4 * 2 * me->params->xbsep_luma * 10;
@@ -796,8 +796,8 @@ schro_motionest_superblock_block (SchroMotionEst *me,
for(ii=0;ii<4;ii++){
block.mv[jj][ii].split = 2;
block.mv[jj][ii].pred_mode = 1;
- block.mv[jj][ii].dx[0] = 0;
- block.mv[jj][ii].dy[0] = 0;
+ block.mv[jj][ii].u.vec.dx[0] = 0;
+ block.mv[jj][ii].u.vec.dy[0] = 0;
}
}
schro_motion_copy_to (me->motion, i, j, &block);
@@ -856,15 +856,15 @@ schro_motionest_subsuperblock_scan (SchroMotionEst *me, int ref, int distance,
mv = &block->mv[jj][ii];
hint_mv = motion_field_get (hint_mf, i + (ii&2), j + (jj&2));
- dx = hint_mv->dx[ref];
- dy = hint_mv->dy[ref];
+ dx = hint_mv->u.vec.dx[ref];
+ dy = hint_mv->u.vec.dy[ref];
scan.x = (i + ii) * params->xbsep_luma;
scan.y = (j + jj) * params->ybsep_luma;
schro_metric_scan_setup (&scan, dx, dy, distance);
if (scan.scan_width <= 0 || scan.scan_height <= 0) {
- mv->dx[ref] = 0;
- mv->dy[ref] = 0;
+ mv->u.vec.dx[ref] = 0;
+ mv->u.vec.dy[ref] = 0;
mv->metric = SCHRO_METRIC_INVALID;
block->error += mv->metric;
block->valid = FALSE;
@@ -879,8 +879,8 @@ schro_motionest_subsuperblock_scan (SchroMotionEst *me, int ref, int distance,
mv->split = 1;
mv->pred_mode = 1<<ref;
mv->using_global = 0;
- mv->dx[ref] = dx;
- mv->dy[ref] = dy;
+ mv->u.vec.dx[ref] = dx;
+ mv->u.vec.dy[ref] = dy;
schro_block_fixup (block);
@@ -895,18 +895,18 @@ schro_motionest_subsuperblock_dc (SchroMotionEst *me,
SchroBlock *block, int i, int j, int ii, int jj)
{
SchroParams *params = me->params;
- SchroMotionVectorDC *mvdc;
+ SchroMotionVector *mv;
int chroma_w, chroma_h;
SchroFrame *frame;
int metric;
frame = get_downsampled (me->encoder_frame, 0);
- mvdc = (SchroMotionVectorDC *)&block->mv[jj][ii];
- mvdc->split = 1;
- mvdc->pred_mode = 0;
+ mv = (SchroMotionVector *)&block->mv[jj][ii];
+ mv->split = 1;
+ mv->pred_mode = 0;
- metric = schro_block_average (&mvdc->dc[0], frame->components + 0,
+ metric = schro_block_average (&mv->u.dc.dc[0], frame->components + 0,
(i + ii) * params->xbsep_luma, (j + jj) * params->ybsep_luma,
2*params->xbsep_luma, 2*params->ybsep_luma);
if (metric == SCHRO_METRIC_INVALID_2) {
@@ -915,12 +915,12 @@ schro_motionest_subsuperblock_dc (SchroMotionEst *me,
}
chroma_w = params->xbsep_luma>>SCHRO_CHROMA_FORMAT_H_SHIFT(params->video_format->chroma_format);
chroma_h = params->ybsep_luma>>SCHRO_CHROMA_FORMAT_V_SHIFT(params->video_format->chroma_format);
- schro_block_average (&mvdc->dc[1], frame->components + 1,
+ schro_block_average (&mv->u.dc.dc[1], frame->components + 1,
(i + ii) * chroma_w, (j+jj) * chroma_h, 2*chroma_w, 2*chroma_h);
- schro_block_average (&mvdc->dc[2], frame->components + 2,
+ schro_block_average (&mv->u.dc.dc[2], frame->components + 2,
(i + ii) * chroma_w, (j+jj) * chroma_h, 2*chroma_w, 2*chroma_h);
- mvdc->metric = metric / 4;
+ mv->metric = metric / 4;
block->error = metric;
/* FIXME magic parameter */
block->error += 4 * 2 * me->params->xbsep_luma * 10;
@@ -929,7 +929,7 @@ schro_motionest_subsuperblock_dc (SchroMotionEst *me,
block->error = schro_motionest_superblock_get_metric (me, block, i, j);
/* FIXME magic parameter */
block->error += 4 * 2 * me->params->xbsep_luma * 10;
- mvdc->metric = block->error/16;
+ mv->metric = block->error/16;
#endif
block->entropy = schro_motion_block_estimate_entropy (me->motion,
@@ -950,8 +950,8 @@ schro_motionest_superblock_subsuperblock (SchroMotionEst *me,
for(ii=0;ii<4;ii++){
block.mv[jj][ii].split = 1;
block.mv[jj][ii].pred_mode = 1;
- block.mv[jj][ii].dx[0] = 0;
- block.mv[jj][ii].dy[0] = 0;
+ block.mv[jj][ii].u.vec.dx[0] = 0;
+ block.mv[jj][ii].u.vec.dy[0] = 0;
}
}
schro_motion_copy_to (me->motion, i, j, &block);
@@ -1104,14 +1104,13 @@ schro_motion_block_estimate_entropy (SchroMotion *motion, int i, int j)
if (mv->split == 1 && (i&1 || j&1)) return 0;
if (mv->pred_mode == 0) {
- SchroMotionVectorDC *mvdc = (SchroMotionVectorDC *)mv;
int pred[3];
schro_motion_dc_prediction (motion, i, j, pred);
- entropy += schro_pack_estimate_sint (mvdc->dc[0] - pred[0]);
- entropy += schro_pack_estimate_sint (mvdc->dc[1] - pred[1]);
- entropy += schro_pack_estimate_sint (mvdc->dc[2] - pred[2]);
+ entropy += schro_pack_estimate_sint (mv->u.dc.dc[0] - pred[0]);
+ entropy += schro_pack_estimate_sint (mv->u.dc.dc[1] - pred[1]);
+ entropy += schro_pack_estimate_sint (mv->u.dc.dc[2] - pred[2]);
return entropy;
}
@@ -1119,14 +1118,14 @@ schro_motion_block_estimate_entropy (SchroMotion *motion, int i, int j)
if (mv->pred_mode & 1) {
int pred_x, pred_y;
schro_motion_vector_prediction (motion, i, j, &pred_x, &pred_y, 1);
- entropy += schro_pack_estimate_sint (mv->dx[0] - pred_x);
- entropy += schro_pack_estimate_sint (mv->dy[0] - pred_y);
+ entropy += schro_pack_estimate_sint (mv->u.vec.dx[0] - pred_x);
+ entropy += schro_pack_estimate_sint (mv->u.vec.dy[0] - pred_y);
}
if (mv->pred_mode & 2) {
int pred_x, pred_y;
schro_motion_vector_prediction (motion, i, j, &pred_x, &pred_y, 2);
- entropy += schro_pack_estimate_sint (mv->dx[1] - pred_x);
- entropy += schro_pack_estimate_sint (mv->dy[1] - pred_y);
+ entropy += schro_pack_estimate_sint (mv->u.vec.dx[1] - pred_x);
+ entropy += schro_pack_estimate_sint (mv->u.vec.dy[1] - pred_y);
}
return entropy;
}
@@ -1208,9 +1207,7 @@ schro_motionest_superblock_get_metric (SchroMotionEst *me,
mv = &block->mv[0][0];
if (mv->pred_mode == 0) {
- SchroMotionVectorDC *mvdc = (SchroMotionVectorDC *)mv;
-
- return schro_metric_get_dc (&orig, mvdc->dc[0], width, height);
+ return schro_metric_get_dc (&orig, mv->u.dc.dc[0], width, height);
}
if (mv->pred_mode == 1 || mv->pred_mode == 2) {
SchroFrame *ref_frame;
@@ -1221,16 +1218,16 @@ schro_motionest_superblock_get_metric (SchroMotionEst *me,
ref_frame = get_downsampled (me->encoder_frame->ref_frame[ref], 0);
- if (xmin + mv->dx[ref] < -ref_frame->extension ||
- ymin + mv->dy[ref] < -ref_frame->extension ||
- xmax + mv->dx[ref] > me->encoder_frame->filtered_frame->width + ref_frame->extension ||
- ymax + mv->dy[ref] > me->encoder_frame->filtered_frame->height + ref_frame->extension) {
+ if (xmin + mv->u.vec.dx[ref] < -ref_frame->extension ||
+ ymin + mv->u.vec.dy[ref] < -ref_frame->extension ||
+ xmax + mv->u.vec.dx[ref] > me->encoder_frame->filtered_frame->width + ref_frame->extension ||
+ ymax + mv->u.vec.dy[ref] > me->encoder_frame->filtered_frame->height + ref_frame->extension) {
/* bailing because it's "hard" */
return SCHRO_METRIC_INVALID_2;
}
schro_frame_get_subdata (ref_frame, &ref_data,
- 0, xmin + mv->dx[ref], ymin + mv->dy[ref]);
+ 0, xmin + mv->u.vec.dx[ref], ymin + mv->u.vec.dy[ref]);
return schro_metric_get (&orig, &ref_data, width, height);
}
@@ -1244,22 +1241,22 @@ schro_motionest_superblock_get_metric (SchroMotionEst *me,
ref0_frame = get_downsampled (me->encoder_frame->ref_frame[0], 0);
ref1_frame = get_downsampled (me->encoder_frame->ref_frame[1], 0);
- if (xmin + mv->dx[0] < -ref0_frame->extension ||
- ymin + mv->dy[0] < -ref0_frame->extension ||
- xmax + mv->dx[0] > me->encoder_frame->filtered_frame->width + ref0_frame->extension ||
- ymax + mv->dy[0] > me->encoder_frame->filtered_frame->height + ref0_frame->extension ||
- xmin + mv->dx[1] < -ref1_frame->extension ||
- ymin + mv->dy[1] < -ref1_frame->extension ||
- xmax + mv->dx[1] > me->encoder_frame->filtered_frame->width + ref1_frame->extension ||
- ymax + mv->dy[1] > me->encoder_frame->filtered_frame->height + ref1_frame->extension) {
+ if (xmin + mv->u.vec.dx[0] < -ref0_frame->extension ||
+ ymin + mv->u.vec.dy[0] < -ref0_frame->extension ||
+ xmax + mv->u.vec.dx[0] > me->encoder_frame->filtered_frame->width + ref0_frame->extension ||
+ ymax + mv->u.vec.dy[0] > me->encoder_frame->filtered_frame->height + ref0_frame->extension ||
+ xmin + mv->u.vec.dx[1] < -ref1_frame->extension ||
+ ymin + mv->u.vec.dy[1] < -ref1_frame->extension ||
+ xmax + mv->u.vec.dx[1] > me->encoder_frame->filtered_frame->width + ref1_frame->extension ||
+ ymax + mv->u.vec.dy[1] > me->encoder_frame->filtered_frame->height + ref1_frame->extension) {
/* bailing because it's "hard" */
return SCHRO_METRIC_INVALID_2;
}
schro_frame_get_subdata (ref0_frame,
- &ref0_data, 0, xmin + mv->dx[0], ymin + mv->dy[0]);
+ &ref0_data, 0, xmin + mv->u.vec.dx[0], ymin + mv->u.vec.dy[0]);
schro_frame_get_subdata (ref1_frame,
- &ref1_data, 0, xmin + mv->dx[1], ymin + mv->dy[1]);
+ &ref1_data, 0, xmin + mv->u.vec.dx[1], ymin + mv->u.vec.dy[1]);
return schro_metric_get_biref (&orig, &ref0_data, 1, &ref1_data, 1, 1, width, height);
}
diff --git a/schroedinger/schrophasecorrelation.c b/schroedinger/schrophasecorrelation.c
index 8413528..eadd190 100644
--- a/schroedinger/schrophasecorrelation.c
+++ b/schroedinger/schrophasecorrelation.c
@@ -511,8 +511,8 @@ out:
mv->split = 0;
mv->pred_mode = 1<<ref;
mv->using_global = 0;
- mv->dx[ref] = dx;
- mv->dy[ref] = dy;
+ mv->u.vec.dx[ref] = dx;
+ mv->u.vec.dy[ref] = dy;
block->error = schro_motionest_superblock_get_metric (me, block, i, j);
block->entropy = 0;
schro_block_fixup (block);
diff --git a/schroedinger/schroroughmotion.c b/schroedinger/schroroughmotion.c
index 1046c72..99c6390 100644
--- a/schroedinger/schroroughmotion.c
+++ b/schroedinger/schroroughmotion.c
@@ -113,8 +113,8 @@ schro_rough_me_heirarchical_scan_nohint (SchroRoughME *rme, int shift,
mv = motion_field_get (mf, i, j);
if (scan.scan_width <= 0 || scan.scan_height <= 0) {
- mv->dx[0] = 0 << shift;
- mv->dy[0] = 0 << shift;
+ mv->u.vec.dx[0] = 0 << shift;
+ mv->u.vec.dy[0] = 0 << shift;
mv->metric = SCHRO_METRIC_INVALID;
continue;
}
@@ -123,8 +123,8 @@ schro_rough_me_heirarchical_scan_nohint (SchroRoughME *rme, int shift,
* scan smaller block sizes */
if (scan.x + scan.block_width >= scan.ref_frame->width ||
scan.y + scan.block_height >= scan.ref_frame->height) {
- mv->dx[0] = 0 << shift;
- mv->dy[0] = 0 << shift;
+ mv->u.vec.dx[0] = 0 << shift;
+ mv->u.vec.dy[0] = 0 << shift;
mv->metric = SCHRO_METRIC_INVALID;
continue;
}
@@ -135,8 +135,8 @@ schro_rough_me_heirarchical_scan_nohint (SchroRoughME *rme, int shift,
dx <<= shift;
dy <<= shift;
- mv->dx[ref] = dx;
- mv->dy[ref] = dy;
+ mv->u.vec.dx[ref] = dx;
+ mv->u.vec.dy[ref] = dy;
}
}
@@ -241,8 +241,8 @@ schro_rough_me_heirarchical_scan_hint (SchroRoughME *rme, int shift,
int width, height;
int x,y;
- dx = hint_mv[m]->dx[ref];
- dy = hint_mv[m]->dy[ref];
+ dx = hint_mv[m]->u.vec.dx[ref];
+ dy = hint_mv[m]->u.vec.dy[ref];
x = (i*params->xbsep_luma + dx) >> shift;
@@ -270,8 +270,8 @@ schro_rough_me_heirarchical_scan_hint (SchroRoughME *rme, int shift,
}
}
- dx = hint_mv[min_m]->dx[ref] >> shift;
- dy = hint_mv[min_m]->dy[ref] >> shift;
+ dx = hint_mv[min_m]->u.vec.dx[ref] >> shift;
+ dy = hint_mv[min_m]->u.vec.dy[ref] >> shift;
scan.x = (i>>shift) * params->xbsep_luma;
scan.y = (j>>shift) * params->ybsep_luma;
@@ -281,8 +281,8 @@ schro_rough_me_heirarchical_scan_hint (SchroRoughME *rme, int shift,
mv = motion_field_get (mf, i, j);
if (scan.scan_width <= 0 || scan.scan_height <= 0) {
- mv->dx[ref] = 0;
- mv->dy[ref] = 0;
+ mv->u.vec.dx[ref] = 0;
+ mv->u.vec.dy[ref] = 0;
mv->metric = SCHRO_METRIC_INVALID;
continue;
}
@@ -292,8 +292,8 @@ schro_rough_me_heirarchical_scan_hint (SchroRoughME *rme, int shift,
dx <<= shift;
dy <<= shift;
- mv->dx[ref] = dx;
- mv->dy[ref] = dy;
+ mv->u.vec.dx[ref] = dx;
+ mv->u.vec.dy[ref] = dy;
}
}
diff --git a/testsuite/motion.c b/testsuite/motion.c
index 60e5739..1c47f7f 100644
--- a/testsuite/motion.c
+++ b/testsuite/motion.c
@@ -67,8 +67,8 @@ main (int argc, char *argv[])
printf("sizeof(SchroMotionVector) = %lu\n",(unsigned long) sizeof(SchroMotionVector));
printf("num blocks %d x %d\n", params.x_num_blocks, params.y_num_blocks);
for(i=0;i<params.x_num_blocks*params.y_num_blocks;i++){
- motion_vectors[i].dx[0] = 0;
- motion_vectors[i].dy[0] = 0;
+ motion_vectors[i].u.vec.dx[0] = 0;
+ motion_vectors[i].u.vec.dy[0] = 0;
motion_vectors[i].pred_mode = 1;
motion_vectors[i].split = 2;
}
diff --git a/testsuite/motion2.c b/testsuite/motion2.c
index c6f4cc7..6dd8a0e 100644
--- a/testsuite/motion2.c
+++ b/testsuite/motion2.c
@@ -141,8 +141,8 @@ main (int argc, char *argv[])
motion_vectors[jj+i].pred_mode = 0;
}
#endif
- motion_vectors[jj+i].dx[0] = 0;
- motion_vectors[jj+i].dy[0] = -8*i;
+ motion_vectors[jj+i].u.vec.dx[0] = 0;
+ motion_vectors[jj+i].u.vec.dy[0] = -8*i;
motion_vectors[jj+i].pred_mode = 1;
motion_vectors[jj+i].split = 2;
}
diff --git a/testsuite/wavelet_gain_curve.c b/testsuite/wavelet_gain_curve.c
index 5f30182..3935bb1 100644
--- a/testsuite/wavelet_gain_curve.c
+++ b/testsuite/wavelet_gain_curve.c
@@ -120,6 +120,7 @@ print_subband_quants (double *a, int filter, int n_levels)
double b[20];
int i;
+ c[0] = 0;
for(i=0;i<n_levels+1;i++){
c[i] = 1/sqrt(a[i]);
//printf("%d %g\n", i, c[i]);