/*
- Copyright (C) 2001 Michael Niedermayer (michaelni@gmx.at)
+ Copyright (C) 2001-2002 Michael Niedermayer (michaelni@gmx.at)
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+#ifndef NEWPOSTPROCESS_H
+#define NEWPOSTPROCESS_H
-#ifndef POSTPROCESS_H
-#define POSTPROCESS_H
+#define PP_QUALITY_MAX 6
-#define BLOCK_SIZE 8
-#define TEMP_STRIDE 8
+#define QP_STORE_T int8_t
-#define V_DEBLOCK 0x01
-#define H_DEBLOCK 0x02
-#define DERING 0x04
-#define LEVEL_FIX 0x08 /* Brightness & Contrast */
+typedef void pp_context_t;
+typedef void pp_mode_t;
-#define LUM_V_DEBLOCK V_DEBLOCK
-#define LUM_H_DEBLOCK H_DEBLOCK
-#define CHROM_V_DEBLOCK (V_DEBLOCK<<4)
-#define CHROM_H_DEBLOCK (H_DEBLOCK<<4)
-#define LUM_DERING DERING
-#define CHROM_DERING (DERING<<4)
-#define LUM_LEVEL_FIX LEVEL_FIX
-//not supported currently
-#define CHROM_LEVEL_FIX (LEVEL_FIX<<4)
+extern char *pp_help; //a simple help text
-// Experimental stuff
-#define RK_FILTER 0x0100
-#define LUM_V_RK_FILTER RK_FILTER
-#define CHROM_V_RK_FILTER (RK_FILTER<<4)
-
-#define X1_FILTER 0x0200
-#define LUM_V_X1_FILTER X1_FILTER
-#define CHROM_V_X1_FILTER (X1_FILTER<<4)
-
-
-#define TIMEING
-#define MORE_TIMEING
-
-#define MIN(a,b) ((a) > (b) ? (b) : (a))
-#define MAX(a,b) ((a) < (b) ? (b) : (a))
-#define ABS(a) ((a) > 0 ? (a) : (-(a)))
-#define SIGN(a) ((a) > 0 ? 1 : -1)
-
-#define QP_STORE_T int
-
-#ifdef HAVE_MMX2
-#define PAVGB(a,b) "pavgb " #a ", " #b " \n\t"
-#elif defined (HAVE_3DNOW)
-#define PAVGB(a,b) "pavgusb " #a ", " #b " \n\t"
-#endif
-
-#ifdef __cplusplus
-//#include <inttypes.h>
+void pp_postprocess(uint8_t * src[3], int srcStride[3],
+ uint8_t * dst[3], int dstStride[3],
+ int horizontalSize, int verticalSize,
+ QP_STORE_T *QP_store, int QP_stride,
+ pp_mode_t *mode, pp_context_t *ppContext, int pict_type);
-void postProcess(uint8_t src[], int srcStride, uint8_t dst[], int dstStride, int width, int height,
- QP_STORE_T QPs[], int QPStride, int isColor, int mode);
-#endif
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-void postprocess(unsigned char * src[], int src_stride,
- unsigned char * dst[], int dst_stride,
- int horizontal_size, int vertical_size,
- QP_STORE_T *QP_store, int QP_stride,
- int mode);
+/**
+ * returns a pp_mode_t or NULL if an error occured
+ * name is the string after "-pp" on the command line
+ * quality is a number from 0 to PP_QUALITY_MAX
+ */
+pp_mode_t *pp_get_mode_by_name_and_quality(char *name, int quality);
+void pp_free_mode(pp_mode_t *mode);
-int getModeForQuality(int quality);
-#ifdef __cplusplus
-}
-#endif
+pp_context_t *pp_get_context(int width, int height, int cpuCaps);
+void pp_free_context(pp_context_t *ppContext);
+#define PP_CPU_CAPS_MMX 0x80000000
+#define PP_CPU_CAPS_MMX2 0x20000000
+#define PP_CPU_CAPS_3DNOW 0x40000000
#endif