fixing DCTELEM != short

Originally committed as revision 1462 to svn://svn.ffmpeg.org/ffmpeg/trunk
pull/126/head
Michael Niedermayer 22 years ago
parent 3a87ac948f
commit 0e15384d9d
  1. 2
      libavcodec/dsputil.c
  2. 3
      libavcodec/dsputil.h
  3. 2
      libavcodec/dv.c
  4. 8
      libavcodec/h263.c
  5. 2
      libavcodec/mpegvideo.h
  6. 80
      libavcodec/simple_idct.c
  7. 18
      libavcodec/simple_idct.h

@ -1822,7 +1822,7 @@ static int dct_sad8x8_c(/*MpegEncContext*/ void *c, uint8_t *src1, uint8_t *src2
return sum;
}
void simple_idct(INT16 *block); //FIXME
void simple_idct(DCTELEM *block); //FIXME
static int quant_psnr8x8_c(/*MpegEncContext*/ void *c, uint8_t *src1, uint8_t *src2, int stride){
MpegEncContext * const s= (MpegEncContext *)c;

@ -25,6 +25,7 @@
//#define DEBUG
/* dct code */
typedef short DCTELEM;
//typedef int DCTELEM;
void fdct_ifast (DCTELEM *data);
void ff_jpeg_fdct_islow (DCTELEM *data);
@ -156,7 +157,7 @@ void dsputil_init(DSPContext* p, unsigned mask);
* permute block according to permuatation.
* @param last last non zero element in scantable order
*/
void ff_block_permute(INT16 *block, UINT8 *permutation, const UINT8 *scantable, int last);
void ff_block_permute(DCTELEM *block, UINT8 *permutation, const UINT8 *scantable, int last);
#define emms_c()

@ -157,7 +157,7 @@ static const UINT16 block_sizes[6] = {
/* decode ac coefs */
static void dv_decode_ac(DVVideoDecodeContext *s,
BlockInfo *mb, INT16 *block, int last_index)
BlockInfo *mb, DCTELEM *block, int last_index)
{
int last_re_index;
int shift_offset = mb->shift_offset;

@ -67,7 +67,7 @@ static inline int mpeg4_decode_dc(MpegEncContext * s, int n, int *dir_ptr);
static inline int mpeg4_decode_block(MpegEncContext * s, DCTELEM * block,
int n, int coded, int intra);
static int h263_pred_dc(MpegEncContext * s, int n, UINT16 **dc_val_ptr);
static void mpeg4_inv_pred_ac(MpegEncContext * s, INT16 *block, int n,
static void mpeg4_inv_pred_ac(MpegEncContext * s, DCTELEM *block, int n,
int dir);
static void mpeg4_decode_sprite_trajectory(MpegEncContext * s);
static inline int ff_mpeg4_pred_dc(MpegEncContext * s, int n, UINT16 **dc_val_ptr, int *dir_ptr);
@ -999,7 +999,7 @@ static int h263_pred_dc(MpegEncContext * s, int n, UINT16 **dc_val_ptr)
}
void h263_pred_acdc(MpegEncContext * s, INT16 *block, int n)
void h263_pred_acdc(MpegEncContext * s, DCTELEM *block, int n)
{
int x, y, wrap, a, c, pred_dc, scale, i;
INT16 *dc_val, *ac_val, *ac_val1;
@ -1852,7 +1852,7 @@ static inline int ff_mpeg4_pred_dc(MpegEncContext * s, int n, UINT16 **dc_val_pt
return pred;
}
void mpeg4_pred_ac(MpegEncContext * s, INT16 *block, int n,
void mpeg4_pred_ac(MpegEncContext * s, DCTELEM *block, int n,
int dir)
{
int i;
@ -1907,7 +1907,7 @@ void mpeg4_pred_ac(MpegEncContext * s, INT16 *block, int n,
}
static void mpeg4_inv_pred_ac(MpegEncContext * s, INT16 *block, int n,
static void mpeg4_inv_pred_ac(MpegEncContext * s, DCTELEM *block, int n,
int dir)
{
int i;

@ -692,7 +692,7 @@ void h263_encode_picture_header(MpegEncContext *s, int picture_number);
int h263_encode_gob_header(MpegEncContext * s, int mb_line);
INT16 *h263_pred_motion(MpegEncContext * s, int block,
int *px, int *py);
void mpeg4_pred_ac(MpegEncContext * s, INT16 *block, int n,
void mpeg4_pred_ac(MpegEncContext * s, DCTELEM *block, int n,
int dir);
void ff_set_mpeg4_time(MpegEncContext * s, int picture_number);
void mpeg4_encode_picture_header(MpegEncContext *s, int picture_number);

@ -67,7 +67,7 @@
#endif
static inline void idctRowCondDC (int16_t * row)
static inline void idctRowCondDC (DCTELEM * row)
{
int a0, a1, a2, a3, b0, b1, b2, b3;
#ifdef FAST_64BIT
@ -82,26 +82,40 @@ static inline void idctRowCondDC (int16_t * row)
#else
#define ROW0_MASK 0xffffLL
#endif
if ( ((((uint64_t *)row)[0] & ~ROW0_MASK) |
((uint64_t *)row)[1]) == 0) {
temp = (row[0] << 3) & 0xffff;
temp += temp << 16;
temp += temp << 32;
((uint64_t *)row)[0] = temp;
((uint64_t *)row)[1] = temp;
return;
}
if(sizeof(DCTELEM)==2){
if ( ((((uint64_t *)row)[0] & ~ROW0_MASK) |
((uint64_t *)row)[1]) == 0) {
temp = (row[0] << 3) & 0xffff;
temp += temp << 16;
temp += temp << 32;
((uint64_t *)row)[0] = temp;
((uint64_t *)row)[1] = temp;
return;
}
}else{
if (!(row[1]|row[2]|row[3]|row[4]|row[5]|row[6]|row[7])) {
row[0]=row[1]=row[2]=row[3]=row[4]=row[5]=row[6]=row[7]= row[0] << 3;
return;
}
}
#else
if (!(((uint32_t*)row)[1] |
((uint32_t*)row)[2] |
((uint32_t*)row)[3] |
row[1])) {
temp = (row[0] << 3) & 0xffff;
temp += temp << 16;
((uint32_t*)row)[0]=((uint32_t*)row)[1] =
((uint32_t*)row)[2]=((uint32_t*)row)[3] = temp;
return;
}
if(sizeof(DCTELEM)==2){
if (!(((uint32_t*)row)[1] |
((uint32_t*)row)[2] |
((uint32_t*)row)[3] |
row[1])) {
temp = (row[0] << 3) & 0xffff;
temp += temp << 16;
((uint32_t*)row)[0]=((uint32_t*)row)[1] =
((uint32_t*)row)[2]=((uint32_t*)row)[3] = temp;
return;
}
}else{
if (!(row[1]|row[2]|row[3]|row[4]|row[5]|row[6]|row[7])) {
row[0]=row[1]=row[2]=row[3]=row[4]=row[5]=row[6]=row[7]= row[0] << 3;
return;
}
}
#endif
a0 = (W4 * row[0]) + (1 << (ROW_SHIFT - 1));
@ -159,7 +173,7 @@ static inline void idctRowCondDC (int16_t * row)
}
static inline void idctSparseColPut (UINT8 *dest, int line_size,
int16_t * col)
DCTELEM * col)
{
int a0, a1, a2, a3, b0, b1, b2, b3;
UINT8 *cm = cropTbl + MAX_NEG_CROP;
@ -231,7 +245,7 @@ static inline void idctSparseColPut (UINT8 *dest, int line_size,
}
static inline void idctSparseColAdd (UINT8 *dest, int line_size,
int16_t * col)
DCTELEM * col)
{
int a0, a1, a2, a3, b0, b1, b2, b3;
UINT8 *cm = cropTbl + MAX_NEG_CROP;
@ -302,7 +316,7 @@ static inline void idctSparseColAdd (UINT8 *dest, int line_size,
dest[0] = cm[dest[0] + ((a0 - b0) >> COL_SHIFT)];
}
static inline void idctSparseCol (int16_t * col)
static inline void idctSparseCol (DCTELEM * col)
{
int a0, a1, a2, a3, b0, b1, b2, b3;
@ -365,7 +379,7 @@ static inline void idctSparseCol (int16_t * col)
col[56] = ((a0 - b0) >> COL_SHIFT);
}
void simple_idct_put(UINT8 *dest, int line_size, INT16 *block)
void simple_idct_put(UINT8 *dest, int line_size, DCTELEM *block)
{
int i;
for(i=0; i<8; i++)
@ -375,7 +389,7 @@ void simple_idct_put(UINT8 *dest, int line_size, INT16 *block)
idctSparseColPut(dest + i, line_size, block + i);
}
void simple_idct_add(UINT8 *dest, int line_size, INT16 *block)
void simple_idct_add(UINT8 *dest, int line_size, DCTELEM *block)
{
int i;
for(i=0; i<8; i++)
@ -385,7 +399,7 @@ void simple_idct_add(UINT8 *dest, int line_size, INT16 *block)
idctSparseColAdd(dest + i, line_size, block + i);
}
void simple_idct(INT16 *block)
void simple_idct(DCTELEM *block)
{
int i;
for(i=0; i<8; i++)
@ -406,7 +420,7 @@ void simple_idct(INT16 *block)
and the butterfly must be multiplied by 0.5 * sqrt(2.0) */
#define C_SHIFT (4+1+12)
static inline void idct4col(UINT8 *dest, int line_size, const INT16 *col)
static inline void idct4col(UINT8 *dest, int line_size, const DCTELEM *col)
{
int c0, c1, c2, c3, a0, a1, a2, a3;
const UINT8 *cm = cropTbl + MAX_NEG_CROP;
@ -443,10 +457,10 @@ static inline void idct4col(UINT8 *dest, int line_size, const INT16 *col)
/* XXX: I think a 1.0/sqrt(2) normalization should be needed to
compensate the extra butterfly stage - I don't have the full DV
specification */
void simple_idct248_put(UINT8 *dest, int line_size, INT16 *block)
void simple_idct248_put(UINT8 *dest, int line_size, DCTELEM *block)
{
int i;
INT16 *ptr;
DCTELEM *ptr;
/* butterfly */
ptr = block;
@ -486,7 +500,7 @@ void simple_idct248_put(UINT8 *dest, int line_size, INT16 *block)
#define C2 C_FIX(0.2705980501)
#define C3 C_FIX(0.5)
#define C_SHIFT (4+1+12)
static inline void idct4col_add(UINT8 *dest, int line_size, const INT16 *col)
static inline void idct4col_add(UINT8 *dest, int line_size, const DCTELEM *col)
{
int c0, c1, c2, c3, a0, a1, a2, a3;
const UINT8 *cm = cropTbl + MAX_NEG_CROP;
@ -514,7 +528,7 @@ static inline void idct4col_add(UINT8 *dest, int line_size, const INT16 *col)
#define R2 R_FIX(0.2705980501)
#define R3 R_FIX(0.5)
#define R_SHIFT 11
static inline void idct4row(INT16 *row)
static inline void idct4row(DCTELEM *row)
{
int c0, c1, c2, c3, a0, a1, a2, a3;
const UINT8 *cm = cropTbl + MAX_NEG_CROP;
@ -533,7 +547,7 @@ static inline void idct4row(INT16 *row)
row[3]= (c0 - c1) >> R_SHIFT;
}
void simple_idct84_add(UINT8 *dest, int line_size, INT16 *block)
void simple_idct84_add(UINT8 *dest, int line_size, DCTELEM *block)
{
int i;
@ -548,7 +562,7 @@ void simple_idct84_add(UINT8 *dest, int line_size, INT16 *block)
}
}
void simple_idct48_add(UINT8 *dest, int line_size, INT16 *block)
void simple_idct48_add(UINT8 *dest, int line_size, DCTELEM *block)
{
int i;

@ -18,14 +18,14 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
void simple_idct_put(UINT8 *dest, int line_size, INT16 *block);
void simple_idct_add(UINT8 *dest, int line_size, INT16 *block);
void ff_simple_idct_mmx(short *block);
void ff_simple_idct_add_mmx(UINT8 *dest, int line_size, INT16 *block);
void ff_simple_idct_put_mmx(UINT8 *dest, int line_size, INT16 *block);
void simple_idct(short *block);
void simple_idct_put(UINT8 *dest, int line_size, DCTELEM *block);
void simple_idct_add(UINT8 *dest, int line_size, DCTELEM *block);
void ff_simple_idct_mmx(int16_t *block);
void ff_simple_idct_add_mmx(UINT8 *dest, int line_size, int16_t *block);
void ff_simple_idct_put_mmx(UINT8 *dest, int line_size, int16_t *block);
void simple_idct(DCTELEM *block);
void simple_idct248_put(UINT8 *dest, int line_size, INT16 *block);
void simple_idct248_put(UINT8 *dest, int line_size, DCTELEM *block);
void simple_idct84_add(UINT8 *dest, int line_size, INT16 *block);
void simple_idct48_add(UINT8 *dest, int line_size, INT16 *block);
void simple_idct84_add(UINT8 *dest, int line_size, DCTELEM *block);
void simple_idct48_add(UINT8 *dest, int line_size, DCTELEM *block);

Loading…
Cancel
Save