⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mae_fe.c

📁 au1200 linux2.6.11 硬件解码mae驱动和maiplayer播放器源码
💻 C
📖 第 1 页 / 共 5 页
字号:
  uint32 exp_bc;  int32 first_mb_of_frame;  int32 last_mb_of_frame;  int32 interlaced_div;  uint8 * ppxliCurrQY;   uint8 * ppxliCurrQU;  uint8 * ppxliCurrQV;  int32 overlap;  int32 deblock;  uint32 imbY;  uint8 sb0 = 0;  uint8 sb1 = 0;  uint8 sb2 = 0;  uint8 sb3 = 0;   uint32 chroma_height = (mae_fe_cfg->bc) ? mae_fe_cfg->height : mae_fe_cfg->height/2;  uint32 chroma_ypos = (mae_fe_cfg->bc) ? mb_in->ypos : mb_in->ypos/2;  // For pointing to global structure so don't have to change code  // Can't copy yet because initial memset hasn't happend  MAE_tWMVDecInternalMember *MAE_pWMVDec;  uint8                     *cur_y_sub;  uint8                     *cur_cr_sub;  uint8                     *cur_cb_sub;  uint8                     *wm_intra_y;  uint8                     *wm_intra_c;  uint8                     *wm_inter_y;  uint8                     *wm_inter_c;#ifndef HAVE_MAE  int                        nFrameNum;  int                        nFrameType;  unsigned char              bPureIntra;  unsigned char              nDeadZone;  int                        iquant_output[64];  unsigned char              idct_output[64];#ifdef REF_WMV9  int16 iquant_output_16[64];  int16 idct_output_16[64];  U8_WMV					           *xStartY, *xStartU, *xStartV;#elif REF_DIVX   int16 iquant_output_16[64];   int16 idct_out16[64];#endif  char                       szFileName[MAX_FILE_SIZE], szFrameNum[MAX_FRAME_NUM_SIZE];  INTERMEDITATE_BLOCK_CHECKERS MAEBlkChecks;#endif  //  // Hack for things done once at the beginning of time  //   static int first = 1;#ifndef HAVE_MAE  memset (&MAEBlkChecks, 0, sizeof(INTERMEDITATE_BLOCK_CHECKERS));#endif  if (first) {     cmodel_check_global();#ifndef HAVE_MAE    mae_init_once(mae_fe_cfg, mb_in);#endif  }#ifdef MAE_FE_MPEG_COVERAGE  // macroblockwise coverage...  // (plus framewise one)  if(mae_fe_cfg->bc) {        sprintf(tmp_cov_str, "mae_fe_mpeg__macroblockwise_422_cbp/bblk=%d/cbp=%d", mb_in->bblk, mb_in->cbp); fcov_coverage_point_hit(tmp_cov_str);    sprintf(tmp_cov_str, "mae_fe_mpeg__macroblockwise_422_wtchgmsk/bblk=%d/wtchgmsk=%d", mb_in->bblk, mb_in->wtchgmsk); fcov_coverage_point_hit(tmp_cov_str);  }  else {          sprintf(tmp_cov_str, "mae_fe_mpeg__macroblockwise_420_cbp/bblk=%d/cbp=%d", mb_in->bblk, (mb_in->cbp) >> 2); fcov_coverage_point_hit(tmp_cov_str);    sprintf(tmp_cov_str, "mae_fe_mpeg__macroblockwise_420_wtchgmsk/bblk=%d/wtchgmsk=%d", mb_in->bblk, mb_in->wtchgmsk); fcov_coverage_point_hit(tmp_cov_str);  }  sprintf(tmp_cov_str, "mae_fe_mpeg__framewise/mis=%d/sat=%d", mae_fe_cfg->mis, mae_fe_cfg->satiq);  fcov_coverage_point_hit(tmp_cov_str);  // Macroblock back-to-back parm changing...  if(mb_num>0)    {      // MAE HEADER WORD 0      sprintf(tmp_cov_str, "mae_fe_mpeg__back2back_mbparm_bblk/prev=%d/now=%d",     fcov_prev_bblk, mb_in->bblk);         fcov_coverage_point_hit(tmp_cov_str);      sprintf(tmp_cov_str, "mae_fe_mpeg__back2back_mbparm_iqmul2/prev=%d/now=%d",   fcov_prev_iqmul2, mb_in->iqmul2);     fcov_coverage_point_hit(tmp_cov_str);;         sprintf(tmp_cov_str, "mae_fe_mpeg__back2back_mbparm_wtchgmsk/prev=%d/now=%d", fcov_prev_wtchgmsk, mb_in->wtchgmsk); fcov_coverage_point_hit(tmp_cov_str);;       sprintf(tmp_cov_str, "mae_fe_mpeg__back2back_mbparm_iqadd1/prev=%d/now=%d",   fcov_prev_iqadd1, mb_in->iqadd1);     fcov_coverage_point_hit(tmp_cov_str);;         sprintf(tmp_cov_str, "mae_fe_mpeg__back2back_mbparm_dcluma/prev=%d/now=%d",   fcov_prev_dcluma, mb_in->dcluma);     fcov_coverage_point_hit(tmp_cov_str);;         sprintf(tmp_cov_str, "mae_fe_mpeg__back2back_mbparm_dcchroma/prev=%d/now=%d", fcov_prev_dcchroma, mb_in->dcchroma); fcov_coverage_point_hit(tmp_cov_str);;       // MAE HEADER WORD 1      sprintf(tmp_cov_str, "mae_fe_mpeg__back2back_mbparm_cbp_y0/prev=%d/now=%d",  fcov_prev_cbp_y0,  (mb_in->cbp >> 7) & 0x1); fcov_coverage_point_hit(tmp_cov_str);      sprintf(tmp_cov_str, "mae_fe_mpeg__back2back_mbparm_cbp_y1/prev=%d/now=%d",  fcov_prev_cbp_y1,  (mb_in->cbp >> 6) & 0x1); fcov_coverage_point_hit(tmp_cov_str);      sprintf(tmp_cov_str, "mae_fe_mpeg__back2back_mbparm_cbp_y2/prev=%d/now=%d",  fcov_prev_cbp_y2,  (mb_in->cbp >> 5) & 0x1); fcov_coverage_point_hit(tmp_cov_str);      sprintf(tmp_cov_str, "mae_fe_mpeg__back2back_mbparm_cbp_y3/prev=%d/now=%d",  fcov_prev_cbp_y3,  (mb_in->cbp >> 4) & 0x1); fcov_coverage_point_hit(tmp_cov_str);      sprintf(tmp_cov_str, "mae_fe_mpeg__back2back_mbparm_cbp_cb0/prev=%d/now=%d", fcov_prev_cbp_cb0, (mb_in->cbp >> 3) & 0x1); fcov_coverage_point_hit(tmp_cov_str);      sprintf(tmp_cov_str, "mae_fe_mpeg__back2back_mbparm_cbp_cr0/prev=%d/now=%d", fcov_prev_cbp_cr0, (mb_in->cbp >> 2) & 0x1); fcov_coverage_point_hit(tmp_cov_str);      sprintf(tmp_cov_str, "mae_fe_mpeg__back2back_mbparm_cbp_cb1/prev=%d/now=%d", fcov_prev_cbp_cb1, (mb_in->cbp >> 1) & 0x1); fcov_coverage_point_hit(tmp_cov_str);      sprintf(tmp_cov_str, "mae_fe_mpeg__back2back_mbparm_cbp_cr1/prev=%d/now=%d", fcov_prev_cbp_cr1,  mb_in->cbp       & 0x1); fcov_coverage_point_hit(tmp_cov_str);      sprintf(tmp_cov_str, "mae_fe_mpeg__back2back_mbparm_iqdiv3/prev=%d/now=%d",  fcov_prev_iqdiv3, mb_in->iqdiv3);            fcov_coverage_point_hit(tmp_cov_str);;         sprintf(tmp_cov_str, "mae_fe_mpeg__back2back_mbparm_iqadd2/prev=%d/now=%d",  fcov_prev_iqadd2, mb_in->iqadd2);            fcov_coverage_point_hit(tmp_cov_str);;         // MAE HEADER WORD 2      sprintf(tmp_cov_str, "mae_fe_mpeg__back2back_mbparm_mbmode_y0/prev=%d/now=%d",     fcov_prev_mbmode_y0,        (mb_in->mbmode >> 14) & 0x3);    fcov_coverage_point_hit(tmp_cov_str);      sprintf(tmp_cov_str, "mae_fe_mpeg__back2back_mbparm_mbmode_y1/prev=%d/now=%d",     fcov_prev_mbmode_y1,        (mb_in->mbmode >> 12) & 0x3);    fcov_coverage_point_hit(tmp_cov_str);      sprintf(tmp_cov_str, "mae_fe_mpeg__back2back_mbparm_mbmode_y2/prev=%d/now=%d",     fcov_prev_mbmode_y2,        (mb_in->mbmode >> 10) & 0x3);    fcov_coverage_point_hit(tmp_cov_str);      sprintf(tmp_cov_str, "mae_fe_mpeg__back2back_mbparm_mbmode_y3/prev=%d/now=%d",     fcov_prev_mbmode_y3,        (mb_in->mbmode >> 8)  & 0x3);    fcov_coverage_point_hit(tmp_cov_str);      sprintf(tmp_cov_str, "mae_fe_mpeg__back2back_mbparm_mbmode_cb0/prev=%d/now=%d",    fcov_prev_mbmode_cb0,       (mb_in->mbmode >> 6)  & 0x3);    fcov_coverage_point_hit(tmp_cov_str);      sprintf(tmp_cov_str, "mae_fe_mpeg__back2back_mbparm_mbmode_cr0/prev=%d/now=%d",    fcov_prev_mbmode_cr0,       (mb_in->mbmode >> 4)  & 0x3);    fcov_coverage_point_hit(tmp_cov_str);      sprintf(tmp_cov_str, "mae_fe_mpeg__back2back_mbparm_mbmode_cb1/prev=%d/now=%d",    fcov_prev_mbmode_cb1,       (mb_in->mbmode >> 2)  & 0x3);    fcov_coverage_point_hit(tmp_cov_str);      sprintf(tmp_cov_str, "mae_fe_mpeg__back2back_mbparm_mbmode_cr1/prev=%d/now=%d",    fcov_prev_mbmode_cr1,        mb_in->mbmode        & 0x3);    fcov_coverage_point_hit(tmp_cov_str);      sprintf(tmp_cov_str, "mae_fe_mpeg__back2back_mbparm_xformsize_y0/prev=%d/now=%d",  fcov_prev_xformsize_y0,     (mb_in->xformsize >> 14) & 0x3); fcov_coverage_point_hit(tmp_cov_str);      sprintf(tmp_cov_str, "mae_fe_mpeg__back2back_mbparm_xformsize_y1/prev=%d/now=%d",  fcov_prev_xformsize_y1,     (mb_in->xformsize >> 12) & 0x3); fcov_coverage_point_hit(tmp_cov_str);      sprintf(tmp_cov_str, "mae_fe_mpeg__back2back_mbparm_xformsize_y2/prev=%d/now=%d",  fcov_prev_xformsize_y2,     (mb_in->xformsize >> 10) & 0x3); fcov_coverage_point_hit(tmp_cov_str);      sprintf(tmp_cov_str, "mae_fe_mpeg__back2back_mbparm_xformsize_y3/prev=%d/now=%d",  fcov_prev_xformsize_y3,     (mb_in->xformsize >> 8)  & 0x3); fcov_coverage_point_hit(tmp_cov_str);      sprintf(tmp_cov_str, "mae_fe_mpeg__back2back_mbparm_xformsize_cb0/prev=%d/now=%d", fcov_prev_xformsize_cb0,    (mb_in->xformsize >> 6)  & 0x3); fcov_coverage_point_hit(tmp_cov_str);      sprintf(tmp_cov_str, "mae_fe_mpeg__back2back_mbparm_xformsize_cr0/prev=%d/now=%d", fcov_prev_xformsize_cr0,    (mb_in->xformsize >> 4)  & 0x3); fcov_coverage_point_hit(tmp_cov_str);      sprintf(tmp_cov_str, "mae_fe_mpeg__back2back_mbparm_xformsize_cb1/prev=%d/now=%d", fcov_prev_xformsize_cb1,    (mb_in->xformsize >> 2)  & 0x3); fcov_coverage_point_hit(tmp_cov_str);      sprintf(tmp_cov_str, "mae_fe_mpeg__back2back_mbparm_xformsize_cr1/prev=%d/now=%d", fcov_prev_xformsize_cr1,     mb_in->xformsize        & 0x3); fcov_coverage_point_hit(tmp_cov_str);      // MAE HEADER WORD 3      sprintf(tmp_cov_str, "mae_fe_mpeg__back2back_mbparm_rnd/prev=%d/now=%d",      mb_in->rnd          , fcov_prev_rnd);      fcov_coverage_point_hit(tmp_cov_str);      sprintf(tmp_cov_str, "mae_fe_mpeg__back2back_mbparm_ps/prev=%d/now=%d",       mb_in->ps           , fcov_prev_ps);       fcov_coverage_point_hit(tmp_cov_str);      sprintf(tmp_cov_str, "mae_fe_mpeg__back2back_mbparm_dctt/prev=%d/now=%d",     mb_in->dctt         , fcov_prev_dctt);     fcov_coverage_point_hit(tmp_cov_str);      sprintf(tmp_cov_str, "mae_fe_mpeg__back2back_mbparm_fp/prev=%d/now=%d",       mb_in->fp           , fcov_prev_fp);       fcov_coverage_point_hit(tmp_cov_str);      sprintf(tmp_cov_str, "mae_fe_mpeg__back2back_mbparm_ft/prev=%d/now=%d",       mb_in->ft           , fcov_prev_ft);       fcov_coverage_point_hit(tmp_cov_str);      sprintf(tmp_cov_str, "mae_fe_mpeg__back2back_mbparm_fb/prev=%d/now=%d",       mb_in->fb           , fcov_prev_fb);       fcov_coverage_point_hit(tmp_cov_str);      sprintf(tmp_cov_str, "mae_fe_mpeg__back2back_mbparm_bt/prev=%d/now=%d",       mb_in->bt           , fcov_prev_bt);       fcov_coverage_point_hit(tmp_cov_str);      sprintf(tmp_cov_str, "mae_fe_mpeg__back2back_mbparm_bb/prev=%d/now=%d",       mb_in->bb           , fcov_prev_bb);       fcov_coverage_point_hit(tmp_cov_str);      sprintf(tmp_cov_str, "mae_fe_mpeg__back2back_mbparm_mbtype/prev=%d/now=%d",   mb_in->mbtype       , fcov_prev_mbtype);   fcov_coverage_point_hit(tmp_cov_str);      sprintf(tmp_cov_str, "mae_fe_mpeg__back2back_mbparm_mcprecy/prev=%d/now=%d",  mae_fe_cfg->mcprec  , fcov_prev_mcprecy);  fcov_coverage_point_hit(tmp_cov_str);      sprintf(tmp_cov_str, "mae_fe_mpeg__back2back_mbparm_mcprecuv/prev=%d/now=%d", mae_fe_cfg->mcprecuv, fcov_prev_mcprecuv); fcov_coverage_point_hit(tmp_cov_str);    }  // storing the actual parms for next mb...  // MAE HEADER WORD 0  fcov_prev_bblk              = mb_in->bblk;   // MAE HEADER WORD 1  fcov_prev_cbp_y0            = (mb_in->cbp >> 7) & 0x1;   fcov_prev_cbp_y1            = (mb_in->cbp >> 6) & 0x1;   fcov_prev_cbp_y2            = (mb_in->cbp >> 5) & 0x1;   fcov_prev_cbp_y3            = (mb_in->cbp >> 4) & 0x1;   fcov_prev_cbp_cb0           = (mb_in->cbp >> 3) & 0x1;  fcov_prev_cbp_cr0           = (mb_in->cbp >> 2) & 0x1;  fcov_prev_cbp_cb1           = (mb_in->cbp >> 1) & 0x1;  fcov_prev_cbp_cr1           =  mb_in->cbp       & 0x1;  // MAE HEADER WORD 2  fcov_prev_mbmode_y0         = (mb_in->mbmode >> 14) & 0x3;      fcov_prev_mbmode_y1         = (mb_in->mbmode >> 12) & 0x3;      fcov_prev_mbmode_y2         = (mb_in->mbmode >> 10) & 0x3;      fcov_prev_mbmode_y3         = (mb_in->mbmode >> 8)  & 0x3;      fcov_prev_mbmode_cb0        = (mb_in->mbmode >> 6)  & 0x3;     fcov_prev_mbmode_cr0        = (mb_in->mbmode >> 4)  & 0x3;     fcov_prev_mbmode_cb1        = (mb_in->mbmode >> 2)  & 0x3;     fcov_prev_mbmode_cr1        =  mb_in->mbmode        & 0x3;     fcov_prev_xformsize_y0      = (mb_in->xformsize >> 14) & 0x3;   fcov_prev_xformsize_y1      = (mb_in->xformsize >> 12) & 0x3;   fcov_prev_xformsize_y2      = (mb_in->xformsize >> 10) & 0x3;   fcov_prev_xformsize_y3      = (mb_in->xformsize >> 8)  & 0x3;   fcov_prev_xformsize_cb0     = (mb_in->xformsize >> 6)  & 0x3;  fcov_prev_xformsize_cr0     = (mb_in->xformsize >> 4)  & 0x3;  fcov_prev_xformsize_cb1     = (mb_in->xformsize >> 2)  & 0x3;  fcov_prev_xformsize_cr1     =  mb_in->xformsize        & 0x3;  // MAE HEADER WORD 3  fcov_prev_rnd               = mb_in->rnd;         fcov_prev_ps                = mb_in->ps;          fcov_prev_dctt              = mb_in->dctt;        fcov_prev_fp                = mb_in->fp;          fcov_prev_ft                = mb_in->ft;          fcov_prev_fb                = mb_in->fb;          fcov_prev_bt                = mb_in->bt;          fcov_prev_bb                = mb_in->bb;          fcov_prev_mbtype            = mb_in->mbtype;      fcov_prev_mcprecy           = mae_fe_cfg->mcprec;     fcov_prev_mcprecuv          = mae_fe_cfg->mcprecuv;  #endif  dp_width = (mae_fe_cfg->codstyl) ? dp_width_wmv9 : dp_width_mpeg;  whole_number_prec = (mae_fe_cfg->codstyl) ? whole_number_prec_wmv9 : whole_number_prec_mpeg;  check_param_size(mae_fe_cfg, mb_in);  exp_bc = mae_fe_cfg->bc ? 8 : 6;  first_mb_of_frame = !(mb_num%(mae_fe_cfg->height*mae_fe_cfg->linesiz/256));  if (first_mb_of_frame) {    RTL_printf("First mb of frame detected\n");    if (first || (gCM.cfg.cur_y_frame_ptr != mae_fe_cfg->cur_y_frame_ptr)) {      for(i = 0; i < mae_fe_cfg->height; i++) {        for(j = 0; j < mae_fe_cfg->linesiz; j++) {          cur_y_unsat[(i*mae_fe_cfg->linesiz) + j] = cur_y_frame[(i*mae_fe_cfg->linesiz) + j];        }      }    }     for(i = 0; i < chroma_height; i++) {      for(j = 0; j < mae_fe_cfg->linesiz/2; j++) {        if(first || (gCM.cfg.cur_cb_frame_ptr != mae_fe_cfg->cur_cb_frame_ptr))          cur_cb_unsat[(i*mae_fe_cfg->linesiz/2) + j] = cur_cb_frame[(i*mae_fe_cfg->linesiz/2) + j];        if(first || (gCM.cfg.cur_cr_frame_ptr != mae_fe_cfg->cur_cr_frame_ptr))          cur_cr_unsat[(i*mae_fe_cfg->linesiz/2) + j] = cur_cr_frame[(i*mae_fe_cfg->linesiz/2) + j];      }    }    gCM.change_addr = 0;  }  if (!first_mb_of_frame)     check_valid_cfg_changes(mae_fe_cfg, mb_in, mb_num);  do_malloc_if_necessary(mae_fe_cfg);  // --------------------------------------------------------------------------  //  // GLOBAL STRUCTURE EVILNESS (must be after do_malloc_if_necessary!)  //  //   Information *TO* global structure  gCM.nMB     = mb_num;  //   Copy structures for check_valid_changes() check  gCM.mb      = *mb_in;  gCM.cfg     = *mae_fe_cfg;  //   Information *FROM* global structure so don't have to change code  cur_y_sub   = gCM.current_y;  cur_cr_sub  = gCM.current_cr;  cur_cb_sub  = gCM.current_cb;  MAE_pWMVDec = gCM.MAE_pWMVDec;  wm_intra_y  = gCM.wm_intra_y;  wm_intra_c  = gCM.wm_intra_c;  wm_inter_y  = gCM.wm_inter_y;  wm_inter_c  = gCM.wm_inter_c;#ifndef HAVE_MAE  nFrameNum   = gCM.nFrameNum;  nFrameType  = gCM.nFrameType;  bPureIntra  = gCM.bPureIntra;  nDeadZone   = gCM.nDeadZone;#endif  //  // --------------------------------------------------------------------------   if (gCM.nMB == 0)    any_bwd = any_fwd = any_fp = 0; #ifdef DEBUG_BUFFER_DATA  print_buffer_data(mae_fe_cfg, mb_num);#endif#ifdef PROTOTYPING  // This function packs up the registers and writes to .txt file  // The file is to be used when prototyping the MAE  pack_proto_reg(mae_fe_cfg, mb_in, mb_num);#endif  // blk_mbmode is used to determine if motion comp will be done on the mb  blk_mbmode = 0;  for(bn = 0; bn < exp_bc; bn++){     blk_mbmode |= (mb_in->mbmode>>(14 - 2*bn)) & 0x3;   }  // y_mbmode & uv_mbmode are used to determine if interlaced frames can be created  y_mbmode = 0;  for(bn = 0; bn < 4; bn++){     y_mbmode |= (mb_in->mbmode>>(14 - 2*bn)) & 0x3;   }  uv_mbmode = 0;  for(bn = 4; bn < exp_bc; bn++){     uv_mbmode |= (mb_in->mbmode>>(14 - 2*bn)) & 0x3;   }  print_macroblock_data(mae_fe_cfg, mb_in, mb_num);  // Grab whatever wm's are passed in and store them off  if (mb_in->wtchgmsk & WM_INTRA_Y)    for(i=0; i < 64; i++) { wm_intra_y[i] = mb_in->wm0[i]; }  if (mb_in->wtchgmsk & WM_INTRA_C)    for(i=0; i < 64; i++) { wm_intra_c[i] = mb_in->wm1[i]; }  if (mb_in->wtchgmsk & WM_INTER_Y)    for(i=0; i < 64; i++) { wm_inter_y[i] = mb_in->wm2[i]; }  if (mb_in->wtchgmsk & WM_INTER_C)    for(i=0; i < 64; i++) { wm_inter_c[i] = mb_in->wm3[i]; }  if (mb_in->fp) any_fp = 1;  if (blk_mbmode) {    // Initializes mcomp    MAE_rtl2mae(&s, mae_fe_cfg, mb_in);    // Call mcomp    // In the mplayer code, the nomenclature of cur, prev, and fut is used.     // It can get a little confusing, so here are the parings    // fwd in mae means that mplayer uses the previous frame => prev_y = fwd_y     // bwd in mae means that mplayer uses the future frame => fut_y = bwd_y     // It actually makes sense in some twisted logic    MAE_MPV_motion(&s);  }#if (defined(REF_WMV9) && defined(USING_NEW_PK_1063))  else if(nFrameType != IFRAME)  {    // If we hit this case, it means that for this MB, there is no    // MotionComp. Just print out that stuff to the RefBlksMV file.    DumpNoDataForRefBlks(mb_num);  }#endif  else {    // re-use old reference frame pointers

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -