| 
				
				
					
				
				
				 | 
			
			 | 
			@@ -25,6 +25,7 @@ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 */ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#include "libavutil/common.h" | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#include "libavutil/avassert.h" | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#include "transform.h" | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
	
		
			
				| 
				
					
				
				
					
				
				
				 | 
			
			 | 
			@@ -135,6 +136,16 @@ void avfilter_mul_matrix(const float *m1, float scalar, float *result) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        result[i] = m1[i] * scalar; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			static inline int mirror(int v, int m) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			{ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    while ((unsigned)v > (unsigned)m) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        v = -v; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if (v < 0) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            v += 2 * m; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    return v; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			void avfilter_transform(const uint8_t *src, uint8_t *dst, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                        int src_stride, int dst_stride, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                        int width, int height, const float *matrix, | 
		
		
	
	
		
			
				| 
				
					
				
				
					
				
				
				 | 
			
			 | 
			@@ -173,8 +184,11 @@ void avfilter_transform(const uint8_t *src, uint8_t *dst, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                    def = src[(int)y_s * src_stride + (int)x_s]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                    break; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                case FILL_MIRROR: | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                    y_s = (y_s < 0) ? -y_s : (y_s >= height) ? (height + height - y_s) : y_s; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                    x_s = (x_s < 0) ? -x_s : (x_s >= width) ? (width + width - x_s) : x_s; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                    x_s = mirror(x_s,  width-1); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                    y_s = mirror(y_s, height-1); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                    av_assert2(x_s >= 0 && y_s >= 0); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                    av_assert2(x_s < width && y_s < height); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                    def = src[(int)y_s * src_stride + (int)x_s]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
	
		
			
				| 
				
					
				
				
				
				 | 
			
			 | 
			
  |