Mercurial > libavcodec.hg
comparison libpostproc/postprocess.c @ 168:712c7a115164 libavcodec
use fastmemcpy for chrominance if no chrominance filtering is done
| author | michael |
|---|---|
| date | Sat, 24 Nov 2001 02:05:06 +0000 |
| parents | 2d97f0157a79 |
| children | 20bcd5b70886 |
comparison
equal
deleted
inserted
replaced
| 167:2d97f0157a79 | 168:712c7a115164 |
|---|---|
| 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) |
