Example #1
0
static void vp56_decode_4mv(VP56Context *s, int row, int col)
{
    VP56mv mv = {0,0};
    int type[4];
    int b;

    /* parse each block type */
    for (b=0; b<4; b++) {
        type[b] = vp56_rac_gets(&s->c, 2);
        if (type[b])
            type[b]++;  /* only returns 0, 2, 3 or 4 (all INTER_PF) */
    }

    /* get vectors */
    for (b=0; b<4; b++) {
        switch (type[b]) {
            case VP56_MB_INTER_NOVEC_PF:
#ifdef IDE_COMPILE
                {
					VP56mv tmp1 = {0,0};
					s->mv[b] = tmp1;
				}
#else
				s->mv[b] = (VP56mv) {0,0};
#endif
				break;
            case VP56_MB_INTER_DELTA_PF:
                s->parse_vector_adjustment(s, &s->mv[b]);
                break;
            case VP56_MB_INTER_V1_PF:
                s->mv[b] = s->vector_candidate[0];
                break;
            case VP56_MB_INTER_V2_PF:
                s->mv[b] = s->vector_candidate[1];
                break;
        }
        mv.x += s->mv[b].x;
        mv.y += s->mv[b].y;
    }

    /* this is the one selected for the whole MB for prediction */
    s->macroblocks[row * s->mb_width + col].mv = s->mv[3];

    /* chroma vectors are average luma vectors */
    if (s->avctx->codec->id == AV_CODEC_ID_VP5) {
        s->mv[4].x = s->mv[5].x = RSHIFT(mv.x,2);
        s->mv[4].y = s->mv[5].y = RSHIFT(mv.y,2);
    } else {
#ifdef IDE_COMPILE
        {
			VP56mv tmp2 = {mv.x/4, mv.y/4};
			s->mv[4] = s->mv[5] = tmp2;
		}
#else
		s->mv[4] = s->mv[5] = (VP56mv) {mv.x/4, mv.y/4};
#endif
	}
}
Example #2
0
static void do_mouse_calibrate (int* x, int* y)
{
    int x1, y1, x2, y2, x3, y3, x4, y4;

    x1 = vars1 [0] * (*x) + vars1 [1] * (*y) + vars1 [2];
    y1 = vars1 [3] * (*x) + vars1 [4] * (*y) + vars1 [5];

    x2 = vars2 [0] * (*x) + vars2 [1] * (*y) + vars2 [2];
    y2 = vars2 [3] * (*x) + vars2 [4] * (*y) + vars2 [5];

    x3 = vars3 [0] * (*x) + vars3 [1] * (*y) + vars3 [2];
    y3 = vars3 [3] * (*x) + vars3 [4] * (*y) + vars3 [5];

    x4 = vars4 [0] * (*x) + vars4 [1] * (*y) + vars4 [2];
    y4 = vars4 [3] * (*x) + vars4 [4] * (*y) + vars4 [5];

    *x = RSHIFT (x1 + x2 + x3 + x4);
    *y = RSHIFT (y1 + y2 + y3 + y4);
}
Example #3
0
VALUE rb_num2ulong(VALUE x)
#   endif
{
    return (long)RSHIFT((SIGNED_VALUE)(x),1);
}
Example #4
0
//------------------------------------------------------------------------------------------------------------------------------------------------------
uint8 GetSampleSinusWave(Channel ch, int numSample)
{
    float dT = numSample * TSHIFT_2_ABS(1, TBASE);
    float voltage = ampl[ch] * sinf(2.0f * M_PI * freq[ch] * dT + angle[ch]) + NewNoiseValue(ch);
    return Math_VoltageToPoint(voltage, RANGE(ch), RSHIFT(ch));
}
Example #5
0
// process 64 byte chunk
// translated from pseudocode on wikipedia
void Sha256Digest::process()
{
    // these follow the naming conventions in the psuedocode
    uint32 w[64];
    uint32 a, b, c, d, e, f, g, h;
    uint32 s0, s1, maj, t2, t1, ch;
    
    GET_BE_UINT32(w[0], m_buffer, 0);
    GET_BE_UINT32(w[1], m_buffer, 4);
    GET_BE_UINT32(w[2], m_buffer, 8);
    GET_BE_UINT32(w[3], m_buffer, 12);
    GET_BE_UINT32(w[4], m_buffer, 16);
    GET_BE_UINT32(w[5], m_buffer, 20);
    GET_BE_UINT32(w[6], m_buffer, 24);
    GET_BE_UINT32(w[7], m_buffer, 28);
    GET_BE_UINT32(w[8], m_buffer, 32);
    GET_BE_UINT32(w[9], m_buffer, 36);
    GET_BE_UINT32(w[10], m_buffer, 40);
    GET_BE_UINT32(w[11], m_buffer, 44);
    GET_BE_UINT32(w[12], m_buffer, 48);
    GET_BE_UINT32(w[13], m_buffer, 52);
    GET_BE_UINT32(w[14], m_buffer, 56);
    GET_BE_UINT32(w[15], m_buffer, 60);

    // init hash value for this chunk
    a = m_state[0];
    b = m_state[1];
    c = m_state[2];
    d = m_state[3];
    e = m_state[4];
    f = m_state[5];
    g = m_state[6];
    h = m_state[7];

    for(int i=16; i<64; i++)
    {
        s0 = RROT(w[i-15], 7) XOR RROT(w[i-15], 18) XOR RSHIFT(w[i-15], 3);
        s1 = RROT(w[i-2], 17) XOR RROT(w[i-2], 19) XOR RSHIFT(w[i-2], 10);
        w[i] = w[i-16] + s0 + w[i-7] + s1;
    }

    // main loop
    // TODO: unroll?  
    for(int j=0; j<64; j++)
    {
        s0 = RROT(a, 2) XOR RROT(a, 13) XOR RROT(a, 22);
        maj = (a & b) XOR (a & c) ^ (b & c);
        t2 = s0 + maj;
        s1 = RROT(e, 6) XOR RROT(e, 11) XOR RROT(e, 25);
        ch = (e & f) XOR ((~e) & g);
        t1 = h + s1 + ch + K[j] + w[j];
        
        h = g;
        g = f;
        f = e;
        e = d + t1;
        d = c;
        c = b;
        b = a;
        a = t1 + t2;
    }
    
    // append this chunk's has value
    m_state[0] += a;
    m_state[1] += b;
    m_state[2] += c;
    m_state[3] += d;
    m_state[4] += e;
    m_state[5] += f;
    m_state[6] += g;
    m_state[7] += h;
}
/* 配置 pic 下行消息 */
SINT32 MP4HAL_V400R004_CfgDnMsg(MP4_DEC_PARAM_S *pMp4DecParam, SINT32 VdhId)
{
    UINT8 *pMsgBlock;
    UINT32 *pReg;
    UINT32 Dat;
    SINT32 i, j;//k;
    UINT32 WidthInMb, HeightInMb, MbCnt;
    SINT32 bitNumofMbCnt;
    SINT32 MbTotal;

    WidthInMb  = pMp4DecParam->PicWidthInMb;
    HeightInMb = pMp4DecParam->PicHeightInMb;
    MbCnt   = WidthInMb * HeightInMb;
    MbTotal = MbCnt;
    bitNumofMbCnt = MP4HAL_V400R004_Log2bin(MbCnt);

    /* step1: basic config < D0 ~ D7 > */
    pMsgBlock = (UINT8 *)MEM_Phy2Vir(g_HwMem[VdhId].MsgSlotAddr[DN_V400R004_MSG_SLOT_INDEX]);

    if (NULL == pMsgBlock)
    {
        dprint(PRN_FATAL, "line: %d ,pMsgBlock = NULL is not expected value!\n", __LINE__);
        return VDMHAL_ERR;
    }

    pReg = (UINT32 *)pMsgBlock;

    if ( 1 == pMp4DecParam->IsShortHeader)
    {
        /* short header!*/
        /* D0 */
        Dat = 4; // [2] is_short_header
        WR_MSGWORD( pReg, Dat );
        dprint(PRN_DNMSG, "D0=0x%x\n", Dat);

        /* D1 */
        Dat = ((UINT32)( (pMp4DecParam->VopGobNum - 1) & 0x1F ) << 0)  // [4:0] num_gobs_in_vop
              | ((UINT32)( (pMp4DecParam->GobMbNum) & 0x7F ) << 5)       // [11:5] num_macroblocks_in_gob
              | ((UINT32)( pMp4DecParam->VopQuant & 0x1F ) << 26);       // [30:26] vop_quant
        ++pReg;
        WR_MSGWORD( pReg, Dat );
        dprint(PRN_DNMSG, "D1=0x%x\n", Dat);

        /* D2 */
        Dat = ((UINT32)( pMp4DecParam->PicCodingType & 3 ) << 5)   // [6:5] vop_coding_type
              | ((UINT32)( bitNumofMbCnt & 0x0F ) << 22);            // [25:22] bit_num_of_mbnum
        ++pReg;
        WR_MSGWORD( pReg, Dat );
        dprint(PRN_DNMSG, "D2=0x%x\n", Dat);
    }
    else
    {
        /* D0 */
        Dat = 0;
        WR_MSGWORD( pReg, Dat );
        dprint(PRN_DNMSG, "D0=0x%x\n", Dat);

        /* D1 */
        Dat = ((UINT32)( pMp4DecParam->VopQuant & 0x1F ) << 26)    // [30:26] vop_quant
              | ((UINT32)( pMp4DecParam->PicQuantType & 1 ) << 31);  // [31] quant_type
        ++pReg;
        WR_MSGWORD( pReg, Dat );
        dprint(PRN_DNMSG, "D1=0x%x\n", Dat);

        if ( 2 == pMp4DecParam->PicCodingType ) //B_VOP
        {
            pMp4DecParam->vop_rounding_type = 0;
        }

        /* D2 */
        Dat = ((UINT32)( pMp4DecParam->Interlaced & 1 ) )    // [0] interlaced
              | ((UINT32)( pMp4DecParam->top_field_first & 1 ) << 1)    // [1] top_field_first
              | ((UINT32)( pMp4DecParam->alternate_vertical_scan & 1 ) << 2) // [2] alternative_vertical_scan_flag
              | ((UINT32)( pMp4DecParam->vop_rounding_type & 1 ) << 3)  // [3] vop_rounding_type
              | ((UINT32)( pMp4DecParam->QuarterSample & 1 ) << 4)  // [4] quarter_sample
              | ((UINT32)( pMp4DecParam->PicCodingType & 3 ) << 5) // [6:5] vop_coding_type
              | ((UINT32)( pMp4DecParam->resync_marker_disable & 1 ) << 7) // [7] resync_marker_disable
              | ((UINT32)( pMp4DecParam->intra_dc_vlc_thr & 7 ) << 8) // [10:8] intra_dc_vlc_thr
              | ((UINT32)( pMp4DecParam->FwdFcode & 7 ) << 11) // [13:11] vop_fcode_forward
              | ((UINT32)( pMp4DecParam->BwdFcode & 7 ) << 14) // [16:14] vop_fcode_backward
              | ((UINT32)( pMp4DecParam->BitsOfVopTimeIncr & 0x1F ) << 17)  // [21:17] bit_num_of_voptimeincrement
              | ((UINT32)( bitNumofMbCnt & 0x0F ) << 22)// [25:22] bit_num_of_mbnum
              | ((UINT32)( pMp4DecParam->sprite_enable & 3 ) << 26)
              | ((UINT32)( pMp4DecParam->sprite_warping_accuracy & 3 ) << 28)
              | ((UINT32)( pMp4DecParam->sprite_warping_points & 3 ) << 30);//实际的point,根据参数化简后的结果
        ++pReg;
        WR_MSGWORD( pReg, Dat );
        dprint(PRN_DNMSG, "D2=0x%x\n", Dat);

        /* D3 */
        if ( 2 == pMp4DecParam->PicCodingType ) //B_VOP
        {
            /*bp,pp硬件只用16比特表示的,如果数据超过16bit,则软件计算最大公约数,同等简化 */
            if (pMp4DecParam->Trd > 65535)
            {
                /*寻最大公约数,将bp,pp等比减小 */
                //wait for adding
            }

            Dat = ((pMp4DecParam->Trb << 1) & 0xFFFF) |  //  [15:0] trb
                  ( ((pMp4DecParam->Trd << 1) & 0xFFFF) << 16 ); // [31:16] trd
            ++pReg;
            WR_MSGWORD( pReg, Dat );
            dprint(PRN_DNMSG, "D3=0x%x\n", Dat);
        }
    }

    /* D4 */
    pReg = (UINT32 *)( pMsgBlock + 4 * 4 );
    Dat = (((UINT32)(pMp4DecParam->PicWidthInMb - 1)) & 0x0000FFFF) |
          ((((UINT32)(pMp4DecParam->PicHeightInMb - 1)) & 0x0000FFFF) << 16);
    WR_MSGWORD( pReg, Dat );
    dprint(PRN_DNMSG, "D4=0x%x\n", Dat);
    /* 显示宽高: D5 */
    pReg = (UINT32 *)( pMsgBlock + 4 * 5 );
    Dat = ((UINT32)(pMp4DecParam->image_width))
          | ((UINT32)(pMp4DecParam->image_height) << 16);
    WR_MSGWORD( pReg, Dat );
    dprint(PRN_DNMSG, "D5=0x%x\n", Dat);

    if (pMp4DecParam->PicCodingType == 3)
    {
        if (pMp4DecParam->sprite_warping_points == 1)
        {
            if (pMp4DecParam->FF_BUG_DIVX500B413 == 1)
            {
                /* GMC_1PT_MVX: D6 */
                pReg = (UINT32 *)( pMsgBlock + 4 * 6 );
                Dat = (UINT32)(pMp4DecParam->Uo / (1 << (pMp4DecParam->sprite_warping_accuracy - pMp4DecParam->QuarterSample)));
                WR_MSGWORD( pReg, Dat );
                dprint(PRN_DNMSG, "D6=0x%x\n", Dat);
                /* GMC_1PT_MVY: D7 */
                pReg = (UINT32 *)( pMsgBlock + 4 * 7 );
                Dat = (UINT32)(pMp4DecParam->Vo / (1 << (pMp4DecParam->sprite_warping_accuracy - pMp4DecParam->QuarterSample)));
                WR_MSGWORD( pReg, Dat );
                dprint(PRN_DNMSG, "D7=0x%x\n", Dat);
            }
            else
            {
                /* GMC_1PT_MVX: D6 */
                pReg = (UINT32 *)( pMsgBlock + 4 * 6 );
                Dat = (UINT32)RSHIFT(pMp4DecParam->Uo << pMp4DecParam->QuarterSample, pMp4DecParam->sprite_warping_accuracy);
                WR_MSGWORD( pReg, Dat );
                dprint(PRN_DNMSG, "D6=0x%x\n", Dat);
                /* GMC_1PT_MVY: D7 */
                pReg = (UINT32 *)( pMsgBlock + 4 * 7 );
                Dat = (UINT32)RSHIFT(pMp4DecParam->Vo << pMp4DecParam->QuarterSample, pMp4DecParam->sprite_warping_accuracy);
                WR_MSGWORD( pReg, Dat );
                dprint(PRN_DNMSG, "D7=0x%x\n", Dat);
            }

        }
    }

    /* step2: bitstream < D8 ~ D15 > */
    pReg = (UINT32 *)( pMsgBlock + 4 * 8 );
    /* D8 */
    Dat = 0;//StreamPhyAddr[0] & 0x00FFFFFF; //偏移地址
    WR_MSGWORD( pReg, Dat );
    dprint(PRN_DNMSG, "D8=0x%x\n", Dat);

    /* D9 */
    Dat = 0;//((StreamBitOffset[0]<<24)&0x7F000000) | (StreamLength[0]&0x00FFFFFF);
    ++pReg;
    WR_MSGWORD( pReg, Dat );
    dprint(PRN_DNMSG, "D9=0x%x\n", Dat);

    /* D10 */
    Dat = 0;//StreamPhyAddr[1] & 0x00FFFFFF;
    ++pReg;
    WR_MSGWORD( pReg, Dat );
    dprint(PRN_DNMSG, "D10=0x%x\n", Dat);

    /* D11 */
    Dat = 0;//((StreamBitOffset[1]<<24)&0x7F000000) | (StreamLength[1]&0x00FFFFFF);
    ++pReg;
    WR_MSGWORD( pReg, Dat );
    dprint(PRN_DNMSG, "D11=0x%x\n", Dat);


    /* step3: space arrangement < D12 ~ D23 > */

    /* D12: image_curr_recon_addr */
    Dat = (pMp4DecParam->DispFramePhyAddr + 0xF) & 0xFFFFFFF0;
    pReg++;
    WR_MSGWORD( pReg, Dat );
    dprint(PRN_DNMSG, "D12= 0x%x\n", Dat);

    /* D13: image_forward_ref_addr */
    Dat = (pMp4DecParam->FwdRefPicPhyAddr + 0xF) & 0xFFFFFFF0;
    pReg++;
    WR_MSGWORD( pReg, Dat );
    dprint(PRN_DNMSG, "D13= 0x%x\n", Dat);

    /* D14: image_backward_ref_addr */
    Dat = (pMp4DecParam->BwdRefPicPhyAddr + 0xF) & 0xFFFFFFF0;
    pReg++;
    WR_MSGWORD( pReg, Dat );
    dprint(PRN_DNMSG, "D14= 0x%x\n", Dat);

    /* D15: pmv_colmb_addr */
    Dat = (pMp4DecParam->CurPmvPhyAddr + 0xF) & 0xFFFFFFF0;
    pReg++;
    WR_MSGWORD( pReg, Dat );
    dprint(PRN_DNMSG, "D15= 0x%x\n", Dat);

    /* D16: pmv_backward_ref_addr */
    Dat = (pMp4DecParam->BwdPmvPhyAddr + 0xF) & 0xFFFFFFF0;
    pReg++;
    WR_MSGWORD( pReg, Dat );
    dprint(PRN_DNMSG, "D16= 0x%x\n", Dat);

    /* D17: sed_top_addr */
    Dat = (g_HwMem[VdhId].ItransTopAddr + 0xF) & 0xFFFFFFF0;
    pReg++;
    WR_MSGWORD( pReg, Dat );
    dprint(PRN_DNMSG, "D17= 0x%x\n", Dat);

    /* D18: pmv_top_addr */
    Dat = (g_HwMem[VdhId].PmvTopAddr + 0xF) & 0xFFFFFFF0;
    pReg++;
    WR_MSGWORD( pReg, Dat );
    dprint(PRN_DNMSG, "D18= 0x%x\n", Dat);

    /*D19*/
    pMp4DecParam->FF_BUG_QPEL_FILED = 0;
#if 1

    if (pMp4DecParam->PicCodingType == 3)
    {
        if (pMp4DecParam->sprite_warping_points == 1)
        {
            /*1pt扩边规则依然是由FF_BUG_EDGE_EXTEND决定*/
            pMp4DecParam->FF_BUG_EDGE_FIND_POINT = 1;
        }

        if (pMp4DecParam->sprite_warping_points > 1)
        {
            /*23pt扩边规则与取点规则一致,均由FF_BUG_EDGE_EXTEND决定*/
            pMp4DecParam->FF_BUG_EDGE_FIND_POINT = pMp4DecParam->FF_BUG_EDGE_EXTEND;
        }
    }
    else
    {
        pMp4DecParam->FF_BUG_EDGE_FIND_POINT = pMp4DecParam->FF_BUG_EDGE_EXTEND;
    }

#else
    p_syntax_des->FF_BUG_EDGE_FIND_POINT = 0;
    //p_syntax_des->FF_BUG_EDGE_EXTEND = 0;
#endif
    //pMp4DecParam->FF_BUG_EDGE_FIND_POINT = 1;
    //pMp4DecParam->FF_BUG_EDGE_EXTEND = 1;
    Dat = ((UINT32)(pMp4DecParam->FF_BUG_QPEL_CHROMA & 1))
          | ((UINT32)(pMp4DecParam->FF_BUG_QPEL_CHROMA2 & 1) << 1)
          | ((UINT32)(pMp4DecParam->FF_BUG_EDGE_EXTEND & 1) << 2)
          | ((UINT32)(pMp4DecParam->FF_BUG_EDGE_FIND_POINT & 1) << 3)
          //|((UINT32)(pMp4DecParam->FF_BUG_DIVX500B413 & 1) << 4)
          | ((UINT32)(pMp4DecParam->FF_BUG_QPEL_FILED & 1) << 4)
          | (0 << 16);
    pReg++;
    //dprint(PRN_ALWS,"DAT %#x\n", Dat);
    //Dat = 0;//test
    WR_MSGWORD( pReg, Dat );
    dprint(PRN_DNMSG, "D19= 0x%x\n", Dat);
#if 1
    /* W' : D20 */
    pReg = (UINT32 *)( pMsgBlock + 4 * 20 );
    Dat = pMp4DecParam->dU[0];
    WR_MSGWORD( pReg, Dat );
    dprint(PRN_DNMSG, "D20= 0x%x\n", Dat);

    /* W' : D21 */
    pReg = (UINT32 *)( pMsgBlock + 4 * 21 );
    Dat = pMp4DecParam->dU[1];
    WR_MSGWORD( pReg, Dat );
    dprint(PRN_DNMSG, "D21= 0x%x\n", Dat);

    /* W' : D22 */
    pReg = (UINT32 *)( pMsgBlock + 4 * 22 );
    Dat = pMp4DecParam->dV[0];
    WR_MSGWORD( pReg, Dat );
    dprint(PRN_DNMSG, "D22= 0x%x\n", Dat);

    /* W' : D23 */
    pReg = (UINT32 *)( pMsgBlock + 4 * 23 );
    Dat = pMp4DecParam->dV[1];
    WR_MSGWORD( pReg, Dat );
    dprint(PRN_DNMSG, "D23= 0x%x\n", Dat);

    /* W' : D24 */
    pReg = (UINT32 *)( pMsgBlock + 4 * 24 );
    Dat = pMp4DecParam->Uo;
    WR_MSGWORD( pReg, Dat );
    dprint(PRN_DNMSG, "D24= 0x%x\n", Dat);

    /* W' : D25 */
    pReg = (UINT32 *)( pMsgBlock + 4 * 25 );
    Dat = pMp4DecParam->Vo;
    WR_MSGWORD( pReg, Dat );
    dprint(PRN_DNMSG, "D25= 0x%x\n", Dat);

    /* W' : D26 */
    pReg = (UINT32 *)( pMsgBlock + 4 * 26 );
    Dat = pMp4DecParam->Uco;
    WR_MSGWORD( pReg, Dat );
    dprint(PRN_DNMSG, "D26= 0x%x\n", Dat);

    /* W' : D27 */
    pReg = (UINT32 *)( pMsgBlock + 4 * 27 );
    Dat = pMp4DecParam->Vco;
    WR_MSGWORD( pReg, Dat );
    dprint(PRN_DNMSG, "D27= 0x%x\n", Dat);
#endif
    /* step4: quant table < D28 ~ D59 > */
    pReg = (UINT32 *)( pMsgBlock + 4 * 28 );

    if ( (NON_SHORT_HEADER_ID == pMp4DecParam->IsShortHeader) && (0 != pMp4DecParam->PicQuantType) ) //NON_SHORT_HEADER_ID
    {
        /*
           for ( i = 0; i < 4; i++ )
           {
           for ( j = 0; j < 16; j += 2 )
           {
           Dat = ((SINT32)(pMp4DecParam->IntraQuantTab[i*16+j] ) )
           | ((SINT32)(pMp4DecParam->NonintraQuantTab[i*16+j]) << 8 )
           | ((SINT32)(pMp4DecParam->IntraQuantTab[i*16+j+1]) << 16 )
           | ((SINT32)(pMp4DecParam->NonintraQuantTab[i*16+j+1]) << 24 );
           WR_MSGWORD( pReg, Dat );
           pReg++;
           dprint(PRN_DNMSG, "D%d= 0x%x\n", i*8+j/2+28, Dat);
           }
           }
           */

        for ( i = 0; i < 8; i++ )
        {
            for ( j = 0; j < 2; j ++ )
            {
                Dat = ((SINT32)(pMp4DecParam->IntraQuantTab[i + j * 8 + 0] ) )
                      | ((SINT32)(pMp4DecParam->IntraQuantTab[i + j * 8 + 16]) << 8 )
                      | ((SINT32)(pMp4DecParam->IntraQuantTab[i + j * 8 + 32]) << 16 )
                      | ((SINT32)(pMp4DecParam->IntraQuantTab[i + j * 8 + 48]) << 24 );
                pReg = (UINT32 *)(pMsgBlock + 4 * 28 + 4 * (2 * i + j));
                WR_MSGWORD( pReg, Dat );
                dprint(PRN_DNMSG, "D%d= 0x%x\n", i * 8 + j / 2 + 24, Dat);
            }
        }

        for ( i = 0; i < 8; i++ )
        {
            for ( j = 0; j < 2; j ++ )
            {
                Dat = ((SINT32)(pMp4DecParam->NonintraQuantTab[i + j * 8 + 0] ) )
                      | ((SINT32)(pMp4DecParam->NonintraQuantTab[i + j * 8 + 16]) << 8 )
                      | ((SINT32)(pMp4DecParam->NonintraQuantTab[i + j * 8 + 32]) << 16 )
                      | ((SINT32)(pMp4DecParam->NonintraQuantTab[i + j * 8 + 48]) << 24 );
                pReg = (UINT32 *)(pMsgBlock + 4 * 28  + 4 * (16 + 2 * i + j));
                WR_MSGWORD( pReg, Dat );
                dprint(PRN_DNMSG, "D%d= 0x%x\n", i * 8 + j / 2 + 24, Dat);
            }
        }
    }

    /* W' : D60 */
    pReg = (UINT32*)( pMsgBlock + 4*60 );
    Dat = g_HwMem[VdhId].SedTopAddr & 0xFFFFFFF0;
    WR_MSGWORD( pReg, Dat );
    dprint(PRN_DNMSG, "D60= 0x%x\n", Dat);

    /* W' : D63 */
    pReg = (UINT32 *)( pMsgBlock + 4 * 63 );
    Dat = g_HwMem[VdhId].MsgSlotAddr[DN_V400R004_MSG_SLOT_INDEX] + 4 * 64;
    WR_MSGWORD( pReg, Dat );
    dprint(PRN_DNMSG, "D63= 0x%x\n", Dat);

    return VDMHAL_OK;

}