| 
																	
																	
																		
																	
																	
																 | 
																@@ -22,7 +22,7 @@ | 
															
														
														
													
														
															
																 | 
																 | 
																  written by Aaron Holtzman <aholtzma@ess.engr.uvic.ca>)  | 
																 | 
																 | 
																  written by Aaron Holtzman <aholtzma@ess.engr.uvic.ca>)  | 
															
														
														
													
														
															
																 | 
																 | 
																 */ | 
																 | 
																 | 
																 */ | 
															
														
														
													
														
															
																 | 
																 | 
																#include "avcodec.h" | 
																 | 
																 | 
																#include "avcodec.h" | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																#include "dsputil.h" | 
															
														
														
													
														
															
																 | 
																 | 
																#include "simple_idct.h" | 
																 | 
																 | 
																#include "simple_idct.h" | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																#if 0 | 
																 | 
																 | 
																#if 0 | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																	
																	
																		
																	
																	
																 | 
																@@ -261,9 +261,83 @@ static inline void idctRowCondDC (int16_t * row) | 
															
														
														
													
														
															
																 | 
																 | 
																} | 
																 | 
																 | 
																} | 
															
														
														
													
														
															
																 | 
																 | 
																#endif /* not ARCH_ALPHA */ | 
																 | 
																 | 
																#endif /* not ARCH_ALPHA */ | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																static inline void idctSparseCol (int16_t * col) | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																static inline void idctSparseColPut (UINT8 *dest, int line_size,  | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                                     int16_t * col) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																{ | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	int a0, a1, a2, a3, b0, b1, b2, b3; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        UINT8 *cm = cropTbl + MAX_NEG_CROP; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        /* XXX: I did that only to give same values as previous code */ | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	a0 = W4 * (col[8*0] + ((1<<(COL_SHIFT-1))/W4)); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	a1 = a0; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	a2 = a0; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	a3 = a0; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        a0 +=  + W2*col[8*2]; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        a1 +=  + W6*col[8*2]; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        a2 +=  - W6*col[8*2]; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        a3 +=  - W2*col[8*2]; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        MUL16(b0, W1, col[8*1]); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        MUL16(b1, W3, col[8*1]); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        MUL16(b2, W5, col[8*1]); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        MUL16(b3, W7, col[8*1]); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        MAC16(b0, + W3, col[8*3]); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        MAC16(b1, - W7, col[8*3]); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        MAC16(b2, - W1, col[8*3]); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        MAC16(b3, - W5, col[8*3]); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	if(col[8*4]){ | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            a0 += + W4*col[8*4]; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            a1 += - W4*col[8*4]; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            a2 += - W4*col[8*4]; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            a3 += + W4*col[8*4]; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	} | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	if (col[8*5]) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            MAC16(b0, + W5, col[8*5]); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            MAC16(b1, - W1, col[8*5]); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            MAC16(b2, + W7, col[8*5]); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            MAC16(b3, + W3, col[8*5]); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	} | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	if(col[8*6]){ | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            a0 += + W6*col[8*6]; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            a1 += - W2*col[8*6]; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            a2 += + W2*col[8*6]; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            a3 += - W6*col[8*6]; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	} | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	if (col[8*7]) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            MAC16(b0, + W7, col[8*7]); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            MAC16(b1, - W5, col[8*7]); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            MAC16(b2, + W3, col[8*7]); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            MAC16(b3, - W1, col[8*7]); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	} | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        dest[0] = cm[(a0 + b0) >> COL_SHIFT]; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        dest += line_size; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        dest[0] = cm[(a1 + b1) >> COL_SHIFT]; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        dest += line_size; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        dest[0] = cm[(a2 + b2) >> COL_SHIFT]; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        dest += line_size; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        dest[0] = cm[(a3 + b3) >> COL_SHIFT]; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        dest += line_size; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        dest[0] = cm[(a3 - b3) >> COL_SHIFT]; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        dest += line_size; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        dest[0] = cm[(a2 - b2) >> COL_SHIFT]; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        dest += line_size; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        dest[0] = cm[(a1 - b1) >> COL_SHIFT]; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        dest += line_size; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        dest[0] = cm[(a0 - b0) >> COL_SHIFT]; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																} | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																static inline void idctSparseColAdd (UINT8 *dest, int line_size,  | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                                     int16_t * col) | 
															
														
														
													
														
															
																 | 
																 | 
																{ | 
																 | 
																 | 
																{ | 
															
														
														
													
														
															
																 | 
																 | 
																	int a0, a1, a2, a3, b0, b1, b2, b3; | 
																 | 
																 | 
																	int a0, a1, a2, a3, b0, b1, b2, b3; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        UINT8 *cm = cropTbl + MAX_NEG_CROP; | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																        /* XXX: I did that only to give same values as previous code */ | 
																 | 
																 | 
																        /* XXX: I did that only to give same values as previous code */ | 
															
														
														
													
														
															
																 | 
																 | 
																	a0 = W4 * (col[8*0] + ((1<<(COL_SHIFT-1))/W4)); | 
																 | 
																 | 
																	a0 = W4 * (col[8*0] + ((1<<(COL_SHIFT-1))/W4)); | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																	
																	
																		
																	
																	
																 | 
																@@ -314,14 +388,21 @@ static inline void idctSparseCol (int16_t * col) | 
															
														
														
													
														
															
																 | 
																 | 
																            MAC16(b3, - W1, col[8*7]); | 
																 | 
																 | 
																            MAC16(b3, - W1, col[8*7]); | 
															
														
														
													
														
															
																 | 
																 | 
																	} | 
																 | 
																 | 
																	} | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																        col[8*0] = (a0 + b0) >> COL_SHIFT; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																        col[8*7] = (a0 - b0) >> COL_SHIFT; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																        col[8*1] = (a1 + b1) >> COL_SHIFT; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																        col[8*6] = (a1 - b1) >> COL_SHIFT; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																        col[8*2] = (a2 + b2) >> COL_SHIFT; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																        col[8*5] = (a2 - b2) >> COL_SHIFT; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																        col[8*3] = (a3 + b3) >> COL_SHIFT; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																        col[8*4] = (a3 - b3) >> COL_SHIFT; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        dest[0] = cm[dest[0] + ((a0 + b0) >> COL_SHIFT)]; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        dest += line_size; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        dest[0] = cm[dest[0] + ((a1 + b1) >> COL_SHIFT)]; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        dest += line_size; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        dest[0] = cm[dest[0] + ((a2 + b2) >> COL_SHIFT)]; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        dest += line_size; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        dest[0] = cm[dest[0] + ((a3 + b3) >> COL_SHIFT)]; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        dest += line_size; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        dest[0] = cm[dest[0] + ((a3 - b3) >> COL_SHIFT)]; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        dest += line_size; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        dest[0] = cm[dest[0] + ((a2 - b2) >> COL_SHIFT)]; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        dest += line_size; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        dest[0] = cm[dest[0] + ((a1 - b1) >> COL_SHIFT)]; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        dest += line_size; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        dest[0] = cm[dest[0] + ((a0 - b0) >> COL_SHIFT)]; | 
															
														
														
													
														
															
																 | 
																 | 
																} | 
																 | 
																 | 
																} | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																#ifdef ARCH_ALPHA | 
																 | 
																 | 
																#ifdef ARCH_ALPHA | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																	
																	
																		
																	
																	
																 | 
																@@ -389,16 +470,39 @@ void simple_idct (short *block) | 
															
														
														
													
														
															
																 | 
																 | 
																	} | 
																 | 
																 | 
																	} | 
															
														
														
													
														
															
																 | 
																 | 
																} | 
																 | 
																 | 
																} | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																/* XXX: suppress this mess */ | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																void simple_idct_put(UINT8 *dest, int line_size, DCTELEM *block) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																{ | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    simple_idct(block); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    put_pixels_clamped(block, dest, line_size); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																} | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																void simple_idct_add(UINT8 *dest, int line_size, DCTELEM *block) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																{ | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    simple_idct(block); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    add_pixels_clamped(block, dest, line_size); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																} | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																#else | 
																 | 
																 | 
																#else | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																void simple_idct (short *block) | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																void simple_idct_put(UINT8 *dest, int line_size, INT16 *block) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																{ | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    int i; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    for(i=0; i<8; i++) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        idctRowCondDC(block + i*8); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																     | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    for(i=0; i<8; i++) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        idctSparseColPut(dest + i, line_size, block + i); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																} | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																void simple_idct_add(UINT8 *dest, int line_size, INT16 *block) | 
															
														
														
													
														
															
																 | 
																 | 
																{ | 
																 | 
																 | 
																{ | 
															
														
														
													
														
															
																 | 
																 | 
																    int i; | 
																 | 
																 | 
																    int i; | 
															
														
														
													
														
															
																 | 
																 | 
																    for(i=0; i<8; i++) | 
																 | 
																 | 
																    for(i=0; i<8; i++) | 
															
														
														
													
														
															
																 | 
																 | 
																        idctRowCondDC(block + i*8); | 
																 | 
																 | 
																        idctRowCondDC(block + i*8); | 
															
														
														
													
														
															
																 | 
																 | 
																     | 
																 | 
																 | 
																     | 
															
														
														
													
														
															
																 | 
																 | 
																    for(i=0; i<8; i++) | 
																 | 
																 | 
																    for(i=0; i<8; i++) | 
															
														
														
													
														
															
																 | 
																 | 
																        idctSparseCol(block + i); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        idctSparseColAdd(dest + i, line_size, block + i); | 
															
														
														
													
														
															
																 | 
																 | 
																} | 
																 | 
																 | 
																} | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																#endif | 
																 | 
																 | 
																#endif | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																	
																	
																	
																 | 
																
  |