aboutsummaryrefslogtreecommitdiff
path: root/Src/f263/Decoder.h
diff options
context:
space:
mode:
Diffstat (limited to 'Src/f263/Decoder.h')
-rw-r--r--Src/f263/Decoder.h139
1 files changed, 139 insertions, 0 deletions
diff --git a/Src/f263/Decoder.h b/Src/f263/Decoder.h
new file mode 100644
index 00000000..4f4c6508
--- /dev/null
+++ b/Src/f263/Decoder.h
@@ -0,0 +1,139 @@
+#pragma once
+#include <bfc/platform/types.h>
+#include "BitReader.h"
+#include "IDCT.h"
+#include "IDCTRef.h"
+#include "lib.h"
+
+/* this is necessary for the max resolution 16CIF */
+#define MBC 88
+#define MBR 72
+
+#define PSC 1
+#define PSC_LENGTH 17
+#define SE_CODE 31
+
+#define MODE_INTER 0
+#define MODE_INTER_Q 1
+#define MODE_INTER4V 2
+#define MODE_INTRA 3
+#define MODE_INTRA_Q 4
+#define MODE_INTER4V_Q 5
+
+#define PBMODE_NORMAL 0
+#define PBMODE_MVDB 1
+#define PBMODE_CBPB_MVDB 2
+
+#define ESCAPE 7167
+#define ESCAPE_INDEX 102
+#define EP_FORWARD_PREDICTION 0
+#define EI_EP_UPWARD_PREDICTION 1
+#define EP_BIDIRECTIONAL_PREDICTION 2
+#define EI_EP_INTRA_PREDICTION 3
+#define MAX_LAYERS 2
+
+/* picture types */
+#define PCT_INTRA 0
+#define PCT_INTER 1
+#define PCT_DISPOSABLE_INTER 2
+//#define PCT_IPB 2
+#define PCT_B 3
+
+#define ON 1
+#define OFF 0
+#define YES 1
+#define NO 0
+
+#define B_EI_EP_STUFFING 5
+#define INVALID_MBTYPE 255
+
+#define B_DIRECT_PREDICTION 0
+#define B_FORWARD_PREDICTION 1
+#define B_BACKWARD_PREDICTION 2
+#define B_BIDIRECTIONAL_PREDICTION 3
+#define B_INTRA_PREDICTION 4
+
+#define SF_SQCIF 1 /* 001 */
+#define SF_QCIF 2 /* 010 */
+#define SF_CIF 3 /* 011 */
+#define SF_4CIF 4 /* 100 */
+#define SF_16CIF 5 /* 101 */
+
+
+/* this is necessary for the max resolution 16CIF */
+#define MBC 88
+#define MBR 72
+
+#define NO_VEC 999
+
+typedef unsigned char *Frame[3];
+class Decoder
+{
+public:
+ Decoder();
+ ~Decoder();
+ int init();
+
+ void getpicture(Frame frame);
+ int getheader();
+
+ int DecodeFrame(YV12_PLANES *yv12, int *width, int *height, int *keyframe);
+
+
+ static unsigned char *clp;
+
+ BitReader buffer;
+private:
+ void reconstruct(int bx, int by, int mode);
+
+ void get_I_P_MBs();
+ void horiz_edge_filter(unsigned char *rec, int width, int height, int chr);
+ void vert_edge_filter(unsigned char *rec, int width, int height, int chr);
+ void edge_filter(unsigned char *lum, unsigned char *Cb, unsigned char *Cr, int width, int height);
+ void vert_post_filter(unsigned char *rec, int width, int height, int chr);
+ void horiz_post_filter(unsigned char *rec, int width, int height, int chr);
+ void PostFilter(unsigned char *lum, unsigned char *Cb, unsigned char *Cr,int width, int height);
+ void addblock(int comp, int bx, int by, int addflag);
+ int find_pmv(int x, int y, int block, int comp);
+ void getpicturehdr();
+
+
+ void getblock(int comp, int mode);
+ void clearblock(int comp);
+
+ void startcode();
+
+ /* vlc */
+ int getTMNMV(void);
+ int getMCBPC(void);
+ int getMBTYPE (int *cbp_present, int *quant_present);
+ int getMCBPCintra(void);
+ int getCBPY(void);
+
+private:
+ Frame refframe, oldrefframe, newframe;
+ Frame edgeframe, edgeframeorig;
+ int MV[2][5][MBR+1][MBC+2];
+ int modemap[MBR+1][MBC+2];
+ int coded_map[MBR + 1][MBC + 1];
+ int quant_map[MBR + 1][MBC + 1];
+ unsigned int horizontal_size,vertical_size,mb_width,mb_height;
+ unsigned int coded_picture_width, coded_picture_height;
+ unsigned int chrom_width,chrom_height;
+ int pict_type;
+ int fault;
+ int deblock;
+ int refidct;
+ int quant;
+ int escapemode;
+ bool firstFrame;
+
+ IDCT idct;
+
+ /* block data */
+ short block[12][64];
+ static bool initted;
+ static unsigned char clp_table[1024];
+
+
+}; \ No newline at end of file