123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- #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];
-
- };
|