comparison postproc/postprocess_template.c @ 3094:4150aff2ac17

use fastmemcpy for chrominance if no chrominance filtering is done
author michael
date Sat, 24 Nov 2001 02:05:06 +0000
parents fb4cee33d3c6
children 897d46457708
comparison
equal deleted inserted replaced
3093:fb4cee33d3c6 3094:4150aff2ac17
60 border remover 60 border remover
61 optimize c versions 61 optimize c versions
62 try to unroll inner for(x=0 ... loop to avoid these damn if(x ... checks 62 try to unroll inner for(x=0 ... loop to avoid these damn if(x ... checks
63 smart blur 63 smart blur
64 commandline option for the deblock / dering thresholds 64 commandline option for the deblock / dering thresholds
65 memcpy chrominance if no chroma filtering is done
66 ... 65 ...
67 */ 66 */
68 67
69 //Changelog: use the CVS log 68 //Changelog: use the CVS log
70 69
78 #endif 77 #endif
79 //#undef HAVE_MMX2 78 //#undef HAVE_MMX2
80 //#define HAVE_3DNOW 79 //#define HAVE_3DNOW
81 //#undef HAVE_MMX 80 //#undef HAVE_MMX
82 //#define DEBUG_BRIGHTNESS 81 //#define DEBUG_BRIGHTNESS
82 #include "../libvo/fastmemcpy.h"
83 #include "postprocess.h" 83 #include "postprocess.h"
84 84
85 #define MIN(a,b) ((a) > (b) ? (b) : (a)) 85 #define MIN(a,b) ((a) > (b) ? (b) : (a))
86 #define MAX(a,b) ((a) < (b) ? (b) : (a)) 86 #define MAX(a,b) ((a) < (b) ? (b) : (a))
87 #define ABS(a) ((a) > 0 ? (a) : (-(a))) 87 #define ABS(a) ((a) > 0 ? (a) : (-(a)))
3035 horizontal_size >>= 1; 3035 horizontal_size >>= 1;
3036 vertical_size >>= 1; 3036 vertical_size >>= 1;
3037 src_stride >>= 1; 3037 src_stride >>= 1;
3038 dst_stride >>= 1; 3038 dst_stride >>= 1;
3039 3039
3040 if(1) 3040 if(ppMode.chromMode)
3041 { 3041 {
3042 postProcess(src[1], src_stride, dst[1], dst_stride, 3042 postProcess(src[1], src_stride, dst[1], dst_stride,
3043 horizontal_size, vertical_size, QP_store, QP_stride, 1, &ppMode); 3043 horizontal_size, vertical_size, QP_store, QP_stride, 1, &ppMode);
3044 postProcess(src[2], src_stride, dst[2], dst_stride, 3044 postProcess(src[2], src_stride, dst[2], dst_stride,
3045 horizontal_size, vertical_size, QP_store, QP_stride, 2, &ppMode); 3045 horizontal_size, vertical_size, QP_store, QP_stride, 2, &ppMode);
3046 } 3046 }
3047 else if(src_stride == dst_stride)
3048 {
3049 memcpy(dst[1], src[1], src_stride*vertical_size);
3050 memcpy(dst[2], src[2], src_stride*vertical_size);
3051 }
3047 else 3052 else
3048 { 3053 {
3054 int y;
3055 for(y=0; y<vertical_size; y++)
3056 {
3057 memcpy(&(dst[1][y*dst_stride]), &(src[1][y*src_stride]), horizontal_size);
3058 memcpy(&(dst[2][y*dst_stride]), &(src[2][y*src_stride]), horizontal_size);
3059 }
3060 }
3061
3062 #if 0
3049 memset(dst[1], 128, dst_stride*vertical_size); 3063 memset(dst[1], 128, dst_stride*vertical_size);
3050 memset(dst[2], 128, dst_stride*vertical_size); 3064 memset(dst[2], 128, dst_stride*vertical_size);
3051 // memcpy(dst[1], src[1], src_stride*horizontal_size); 3065 #endif
3052 // memcpy(dst[2], src[2], src_stride*horizontal_size);
3053 }
3054 } 3066 }
3055 3067
3056 void postprocess2(unsigned char * src[], int src_stride, 3068 void postprocess2(unsigned char * src[], int src_stride,
3057 unsigned char * dst[], int dst_stride, 3069 unsigned char * dst[], int dst_stride,
3058 int horizontal_size, int vertical_size, 3070 int horizontal_size, int vertical_size,
3083 horizontal_size >>= 1; 3095 horizontal_size >>= 1;
3084 vertical_size >>= 1; 3096 vertical_size >>= 1;
3085 src_stride >>= 1; 3097 src_stride >>= 1;
3086 dst_stride >>= 1; 3098 dst_stride >>= 1;
3087 3099
3088 postProcess(src[1], src_stride, dst[1], dst_stride, 3100 if(mode->chromMode)
3089 horizontal_size, vertical_size, QP_store, QP_stride, 1, mode); 3101 {
3090 postProcess(src[2], src_stride, dst[2], dst_stride, 3102 postProcess(src[1], src_stride, dst[1], dst_stride,
3091 horizontal_size, vertical_size, QP_store, QP_stride, 2, mode); 3103 horizontal_size, vertical_size, QP_store, QP_stride, 1, mode);
3104 postProcess(src[2], src_stride, dst[2], dst_stride,
3105 horizontal_size, vertical_size, QP_store, QP_stride, 2, mode);
3106 }
3107 else if(src_stride == dst_stride)
3108 {
3109 memcpy(dst[1], src[1], src_stride*vertical_size);
3110 memcpy(dst[2], src[2], src_stride*vertical_size);
3111 }
3112 else
3113 {
3114 int y;
3115 for(y=0; y<vertical_size; y++)
3116 {
3117 memcpy(&(dst[1][y*dst_stride]), &(src[1][y*src_stride]), horizontal_size);
3118 memcpy(&(dst[2][y*dst_stride]), &(src[2][y*src_stride]), horizontal_size);
3119 }
3120 }
3092 } 3121 }
3093 3122
3094 3123
3095 /** 3124 /**
3096 * gets the mode flags for a given quality (larger values mean slower but better postprocessing) 3125 * gets the mode flags for a given quality (larger values mean slower but better postprocessing)