mpegvideo.s 3.1 KB

#include <rsp.h>

#include "video_dmem.h"
#include "mpegvideo.h"

#define _IQUANT 
#define _IDCT  
#define _MC
#define	_RECON
/* #define _VADDB */
				
.base	TASKBASE

mpeg_init:	

    vxor vzero,	vzero, vzero			
    addi datbase, rzero, MB_BASE
			
proc_mb:

    nop
    nop			/* Get MB info here */
    nop
    nop
    
    lh	 mbtype, MBH_MBTYPE(datbase)


#ifdef	_MC
	
/*
    andi flag,   mbtype,        MBT_REQUANT

    blez flag, dont_new_qmat
    nop

do_new_qmat:
    lh  quant,           MBH_QUANT(datbase)
    jal new_qmat
    nop

dont_new_qmat:
*/
	
    andi flag,  mbtype, MBT_INTRA
    bgtz flag, dont_mc
    nop

    andi flag,  mbtype, MBT_FOR
    blez flag, dont_for

#include "mc_io.h"

    lh   mc_in_mvx,  MBH_MVFX(datbase)
    lh   mc_in_mvy,  MBH_MVFY(datbase)
    addi mc_in_dat,  datbase, MB_DATA_FREF
    addi mc_out_dat, datbase, MB_DATA_FREF
    addi mc_in_blend, rzero, 0
    jal mc
    nop

    andi flag,  mbtype, MBT_BAK
    blez flag, dont_bak

both:

    lh   mc_in_mvx,  MBH_MVBX(datbase)
    lh   mc_in_mvy,  MBH_MVBY(datbase)
    addi mc_in_dat,  datbase, MB_DATA_BREF
    addi mc_out_dat, datbase, MB_DATA_FREF
    addi mc_in_blend, rzero, 1
    jal mc
    nop

    j   dont_mc
    nop

dont_for:

    andi flag,  mbtype, MBT_BAK
    blez flag, dont_bak

    lh   mc_in_mvx,  MBH_MVBX(datbase)
    lh   mc_in_mvy,  MBH_MVBY(datbase)
    addi mc_in_dat,  datbase, MB_DATA_BREF
    addi mc_out_dat, datbase, MB_DATA_FREF        
    addi mc_in_blend, rzero, 0
    jal mc
    nop

#include "mc_io.h"

dont_bak:
    nop

#endif

	
dont_mc:
	
    andi intra, mbtype,	MBT_INTRA	
    lh	 cbp,	MBH_CBP(datbase)	

    nop
    nop
    nop
    nop

    blez cbp, skip_mb
    nop

#include "iquant_io.h"

    addi iq_in_dat,  datbase,	MB_DATA
    addi iq_out_dat, datbase,	MB_DATA
    addi iq_in_quant, datbase,	MBH_QUANT
    addi iq_in_cbp,  cbp,  0
    addi iq_in_intra, intra, 0
    jal  iq
    nop
    nop
	
#include "iquant_io.h" 
	

#include "idct_io.h"

    addi idct_in_dat,  datbase, MB_DATA
    addi idct_out_dat, datbase, MB_DATA
    addi idct_in_cbp,  cbp, 0
    jal	idct
    nop

#include "idct_io.h"

/*
    andi flag, mbtype, MBT_INTRA
    bgtz flag, dma_out
    nop
*/
	
skip_mb:

    nop
    nop

#include "recon_io.h"

    addi rec_in_dat, datbase, MB_DATA
    addi rec_in_ref, datbase, MB_DATA_FREF
    addi rec_out_dat, datbase, MB_DATA_FREF
    addi rec_in_cbp, cbp, 0 
	
    jal	recon
    nop

#include "recon_io.h"

dma_out:			
    nop
    nop			/* break here to output results */
    nop
    nop

    j	proc_mb
    nop

/* IQ		*/
#ifdef _IQUANT
	
#include "iquant_io.h"
#include "iquant.s"
#include "iquant_io.h"

#else
iq:
    nop
    jr	return
    nop

#endif

	
/* IDCT		*/
#ifdef _IDCT
	
#include "idct_io.h"
#include "idct.s"
#include "idct_io.h"

#else
idct:
    nop
    jr	return
    nop

#endif

	
/* MC		*/
#ifdef	_MC	
	
#include "mc_io.h"
#include "mc.s"
#include "mc_io.h"

#else
mc:
    nop
    jr	return
    nop

#endif

/* Reconstruct	*/
#ifdef	_RECON

#include "recon_io.h"
#include "recon.s"
#include "recon_io.h"

#else
recon:
    nop
    jr return
    nop

#endif
	
	
mc_comb:
    nop
    jr	return
    nop