Mercurial > mplayer.hg
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) |