layerdata.hh
上传用户:aoeyumen
上传日期:2007-01-06
资源大小:3329k
文件大小:3k
源码类别:

DVD

开发平台:

Unix_Linux

  1. /*
  2.    File: LayerData
  3.    
  4.    By: Alex Theo de Jong
  5.    Created: February 1996
  6.    Description:
  7.    Place holder class for all layer data
  8.  */
  9. class LayerData {
  10.   friend class Mpeg2Video;
  11.  protected:
  12.   VideoStream* input;     // bit input
  13.   DisplayX11* display;
  14.   Idct* idct;
  15.   Synchronization* sync;  // Synchronization object
  16.   // sequence header
  17.   int intra_quantizer_matrix[64], non_intra_quantizer_matrix[64];
  18.   int chroma_intra_quantizer_matrix[64], chroma_non_intra_quantizer_matrix[64];
  19.   int mpeg2;
  20.   int qscale_type,altscan;      // picture coding extension
  21.   int pri_brk;                  // slice/macroblock
  22.   int quant_scale;
  23.   short block[12][64];
  24.   int   sparse[12];
  25.  public:
  26.   int pict_scal;                // picture spatial scalable extension
  27.   int scalable_mode;            // sequence scalable extension
  28.  protected:
  29.   // gethdr
  30.   void getseqhdr(void);
  31.   void getgophdr(void);
  32.   void getpicturehdr(void);
  33.   void ext_user_data(void);
  34.   void sequence_extension(void);
  35.   void sequence_display_extension(void);
  36.   void quant_matrix_extension(void);
  37.   void sequence_scalable_extension(void);
  38.   void picture_display_extension(void);
  39.   void picture_coding_extension(void);
  40.   void picture_spatial_scalable_extension(void);
  41.   void picture_temporal_scalable_extension(void);
  42.   /* decode extra bit information */
  43.   inline void ext_bit_info(void){ while (input->getbits(1)) input->flushbits(8); }
  44.   // getpic
  45.   void getMBs(int framenum);
  46.   void macroblock_modes(int *pmb_type, int *pstwtype, int *pstwclass, 
  47.                                int *pmotion_type, int *pmv_count, int *pmv_format, 
  48.                                int *pdmv, int *pmvscale, int *pdct_type);
  49.   void clearblock(int comp,int size);
  50.   void addblock(int comp, int bx, int by, int dct_type, int addflag);
  51.  public:
  52.   LayerData(const char* windowtitle, Synchronization* s=0){ 
  53.     sync=s; 
  54.     idct=new Idct;
  55.     input=0;
  56.     display=new DisplayX11(windowtitle, s);
  57.   }
  58.   ~LayerData(){ 
  59.     delete input;
  60.     delete idct; 
  61.     delete display; 
  62.   }
  63.   // gethdr
  64.   int getheader();
  65.   int getslicehdr(void);
  66.   // getpic
  67.   void getpicture(int framenum);
  68.   void putlast();
  69.  // getblk
  70.   void getintrablock(int comp, int dc_dct_pred[]);
  71.   void getinterblock(int comp);
  72.   void getmpg2intrablock(int comp, int dc_dct_pred[]);
  73.   void getmpg2interblock(int comp);
  74.   // motion
  75.   void motion_vectors(int PMV[2][2][2], int dmvector[2],
  76.                       int mv_field_sel[2][2], int s, int mv_count, int mv_format,
  77.                       int h_r_size, int v_r_size, int dmv, int mvscale);
  78.   void motion_vector(int *PMV, int *dmvector,
  79.                      int h_r_size, int v_r_size, int dmv, int mvscale, int full_pel_vector);
  80.   void calc_DMV(int DMV[][2], int *dmvector, int mvx, int mvy);
  81.   // recon
  82.   void reconstruct(int bx, int by, int mb_type, int motion_type,
  83.                    int PMV[2][2][2], int mv_field_sel[2][2], int dmvector[2], int stwtype);  
  84. };