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

📄 dma_b.c

📁 基于Linux的ffmepg decoder
💻 C
📖 第 1 页 / 共 5 页
字号:
#define DMA_B_GLOBALS

#include "portab.h"
#include "dma.h"
#include "dma_b.h"
#include "dma_m.h"
#include "decoder.h"
#include "local_mem.h"
#include "image/image.h"
#include "define.h"
#include "mp4.h"
#include "me.h"
#if 1
#define DEFAULT_WIDTH	176
#define DEFAULT_HEIGHT	144
#define DEFAULT_STRIDE	DEFAULT_WIDTH
#ifndef LINUX
__align(8)
#endif
uint32_t u32dma_const0[] = {
	///////////////////////////// DMA_TOGGLE 0 //////////////////////////
	// 1. CHNP_REF_4MV_Y0,Y1,Y2,Y3,U,V
	// 2. CHNP_REF_1MV_Y, U,V
	// 3. CHNP_IMG_Y, U,V
	// 4. CHNP_YUV_Y, U,V or CHNP_RGB
	// 5. CHNP_LD
	// 6. CHNP_ST
	// 7, CHNI_IMG_Y, U, V
	// 8. CHNI_YUV_Y, U,V or CHNI_RGB
	// 9. CHNI_LD
	// 10. CHNI_ST

	///////////////////////////////////////////////////
	// p-frame
	// vld->toggle			vld(load)	ref	dmc		img(yuv)	rgb
	//		0			1		1			1		0
	//		1			0		0			0		1
	//		...
	///////////////////////////////////////////////////
	// Toggle 0
	///////////////////////////////////////////////////
	// 1
	// CHNP_REF_4MV_Y0 + 0
		DONT_CARE,
	// CHNP_REF_4MV_Y0 + 1
		mDmaLoc2dWidth4b(8) |								// 8 lines/block
		mDmaLoc2dOff8b(1 - (PIXEL_U - 1) * (8 * PIXEL_U) / 4) |	// jump to new block
		mDmaLoc3dWidth4b(2) |								// 2 block/row
		mDmaLocMemAddr14b(REF_Y0_OFF_1) |
		mDmaLocInc2b(DMA_INCL_0),
	// CHNP_REF_4MV_Y0 + 2
		mDmaSysWidth6b(2 * SIZE_U / 8) |
		mDmaSysOff14b((DEFAULT_WIDTH * 2 * SIZE_U / 4) + 1 - (2 * SIZE_U / 4)) |
		mDmaLocWidth4b(PIXEL_U / 4) |
		mDmaLocOff8b((8 * PIXEL_U / 4) + 1 - (PIXEL_U / 4)),
	// CHNP_REF_4MV_Y0 + 3
		mDmaLoc3dOff8b((8 * PIXEL_U / 4) + 1 - (2 * PIXEL_U / 4)) |// jump to next row
		mDmaIntChainMask1b(TRUE) |
		mDmaEn1b(TRUE) |
		mDmaChainEn1b(TRUE) |
		mDmaDir1b(DMA_DIR_2LOCAL) |
		mDmaSType2b(DMA_DATA_2D) |
		mDmaLType2b(DMA_DATA_4D) |
		mDmaLen12b( 4 * SIZE_U / 4) |
		mDmaID4b(ID_CHN_4MV),
	// CHNP_REF_4MV_Y1 + 0
		DONT_CARE,
	// CHNP_REF_4MV_Y1 + 1
		mDmaLoc2dWidth4b(8) |								// 8 lines/block
		mDmaLoc2dOff8b(1 - (PIXEL_U - 1) * (8 * PIXEL_U) / 4) |	// jump to new block
		mDmaLoc3dWidth4b(2) |								// 2 block/row
		mDmaLocMemAddr14b(REF_Y1_OFF_1) |
		mDmaLocInc2b(DMA_INCL_0),
	// CHNP_REF_4MV_Y1 + 2
		mDmaSysWidth6b(2 * SIZE_U / 8) |
		mDmaSysOff14b((DEFAULT_WIDTH * 2 * SIZE_U / 4) + 1 - (2 * SIZE_U / 4)) |
		mDmaLocWidth4b(PIXEL_U / 4) |
		mDmaLocOff8b((8 * PIXEL_U / 4) + 1 - (PIXEL_U / 4)),
	// CHNP_REF_4MV_Y1 + 3
		mDmaLoc3dOff8b((8 * PIXEL_U / 4) + 1 - (2 * PIXEL_U / 4)) |// jump to next row
		mDmaIntChainMask1b(TRUE) |
		mDmaEn1b(TRUE) |
		mDmaChainEn1b(TRUE) |
		mDmaDir1b(DMA_DIR_2LOCAL) |
		mDmaSType2b(DMA_DATA_2D) |
		mDmaLType2b(DMA_DATA_4D) |
		mDmaLen12b( 4 * SIZE_U / 4) |
		mDmaID4b(ID_CHN_4MV),
	// CHNP_REF_4MV_Y2 + 0
		DONT_CARE,
	// CHNP_REF_4MV_Y2 + 1
		mDmaLoc2dWidth4b(8) |								// 8 lines/block
		mDmaLoc2dOff8b(1 - (PIXEL_U - 1) * (8 * PIXEL_U) / 4) |	// jump to new block
		mDmaLoc3dWidth4b(2) |								// 2 block/row
		mDmaLocMemAddr14b(REF_Y2_OFF_1) |
		mDmaLocInc2b(DMA_INCL_0),
	// CHNP_REF_4MV_Y2 + 2
		mDmaSysWidth6b(2 * SIZE_U / 8) |
		mDmaSysOff14b((DEFAULT_WIDTH * 2 * SIZE_U / 4) + 1 - (2 * SIZE_U / 4)) |
		mDmaLocWidth4b(PIXEL_U / 4) |
		mDmaLocOff8b((8 * PIXEL_U / 4) + 1 - (PIXEL_U / 4)),
	// CHNP_REF_4MV_Y2 + 3
		mDmaLoc3dOff8b((8 * PIXEL_U / 4) + 1 - (2 * PIXEL_U / 4)) |// jump to next row
		mDmaIntChainMask1b(TRUE) |
		mDmaEn1b(TRUE) |
		mDmaChainEn1b(TRUE) |
		mDmaDir1b(DMA_DIR_2LOCAL) |
		mDmaSType2b(DMA_DATA_2D) |
		mDmaLType2b(DMA_DATA_4D) |
		mDmaLen12b( 4 * SIZE_U / 4) |
		mDmaID4b(ID_CHN_4MV),
	// CHNP_REF_4MV_Y3 + 0
		DONT_CARE,
	// CHNP_REF_4MV_Y3 + 1
		mDmaLoc2dWidth4b(8) |								// 8 lines/block
		mDmaLoc2dOff8b(1 - (PIXEL_U - 1) * (8 * PIXEL_U) / 4) |	// jump to new block
		mDmaLoc3dWidth4b(2) |								// 2 block/row
		mDmaLocMemAddr14b(REF_Y3_OFF_1) |
		mDmaLocInc2b(DMA_INCL_0),
	// CHNP_REF_4MV_Y3 + 2
		mDmaSysWidth6b(2 * SIZE_U / 8) |
		mDmaSysOff14b((DEFAULT_WIDTH * 2 * SIZE_U / 4) + 1 - (2 * SIZE_U / 4)) |
		mDmaLocWidth4b(PIXEL_U / 4) |
		mDmaLocOff8b((8 * PIXEL_U / 4) + 1 - (PIXEL_U / 4)),
	// CHNP_REF_4MV_Y3 + 3
		mDmaLoc3dOff8b((8 * PIXEL_U / 4) + 1 - (2 * PIXEL_U / 4)) |// jump to next row
		mDmaIntChainMask1b(TRUE) |
		mDmaEn1b(TRUE) |
		mDmaChainEn1b(TRUE) |
		mDmaDir1b(DMA_DIR_2LOCAL) |
		mDmaSType2b(DMA_DATA_2D) |
		mDmaLType2b(DMA_DATA_4D) |
		mDmaLen12b( 4 * SIZE_U / 4) |
		mDmaID4b(ID_CHN_4MV),
	// CHNP_REF_4MV_U + 0
		DONT_CARE,
	// CHNP_REF_4MV_U + 1
		mDmaLoc2dWidth4b(8) |								// 8 lines/block
		mDmaLoc2dOff8b(1 - (PIXEL_U - 1) * (8 * PIXEL_U) / 4) |	// jump to new block
		mDmaLoc3dWidth4b(2) |								// 2 block/row
		mDmaLocMemAddr14b(REF_U_OFF_1) | 
		mDmaLocInc2b(DMA_INCL_0),
	// CHNP_REF_4MV_U + 2
		mDmaSysWidth6b(2 * SIZE_U / 8) |
		mDmaSysOff14b((DEFAULT_WIDTH * SIZE_U / 4) + 1 - (2 * SIZE_U / 4)) |
		mDmaLocWidth4b(PIXEL_U / 4) |
		mDmaLocOff8b(((8 * PIXEL_U) / 4) + 1 - (PIXEL_U / 4)),
	// CHNP_REF_4MV_U + 3
		mDmaLoc3dOff8b((8 * PIXEL_U / 4) + 1 - (2 * PIXEL_U / 4)) |// jump to next row
		mDmaIntChainMask1b(TRUE) |
		mDmaEn1b(TRUE) |
		mDmaChainEn1b(TRUE) |
		mDmaDir1b(DMA_DIR_2LOCAL) |
		mDmaSType2b(DMA_DATA_2D) |
		mDmaLType2b(DMA_DATA_4D) |
		mDmaLen12b(4 * SIZE_U / 4) |
		mDmaID4b(ID_CHN_4MV),
	// CHNP_REF_4MV_V + 0
		DONT_CARE,
	// CHNP_REF_4MV_V + 1
		mDmaLoc2dWidth4b(8) |								// 8 lines/block
		mDmaLoc2dOff8b(1 - (PIXEL_V - 1) * (8 * PIXEL_V) / 4) |	// jump to new block
		mDmaLoc3dWidth4b(2) |								// 2 block/row
		mDmaLocMemAddr14b(REF_V_OFF_1) | 
		mDmaLocInc2b(DMA_INCL_0),
	// CHNP_REF_4MV_V + 2
		mDmaSysWidth6b(2 * SIZE_V / 8) |
		mDmaSysOff14b((DEFAULT_WIDTH * SIZE_V / 4) + 1 - (2 * SIZE_V / 4)) |
		mDmaLocWidth4b(PIXEL_V / 4) |
		mDmaLocOff8b(((8 * PIXEL_V) / 4) + 1 - (PIXEL_V / 4)),
	// CHNP_REF_4MV_V + 3
		mDmaLoc3dOff8b((8 * PIXEL_V / 4) + 1 - (2 * PIXEL_V / 4)) |// jump to next row
		mDmaIntChainMask1b(TRUE) |
		mDmaEn1b(TRUE) |
		mDmaChainEn1b(TRUE) |
		mDmaDir1b(DMA_DIR_2LOCAL) |
		mDmaSType2b(DMA_DATA_2D) |
		mDmaLType2b(DMA_DATA_4D) |
		mDmaLen12b(4 * SIZE_U / 4) |
		mDmaID4b(ID_CHN_4MV),

	// 2
	// CHNP_REF_1MV_Y + 0
		DONT_CARE,
	// CHNP_REF_1MV_Y + 1
		mDmaLoc2dWidth4b(8) |								// 8 lines/block
		mDmaLoc2dOff8b(1 - (PIXEL_U - 1) * (8 * PIXEL_U) / 4) |	// jump to new block
		mDmaLoc3dWidth4b(3) |								// 3 block/row
		mDmaLocMemAddr14b(REF_Y_OFF_1) |
		mDmaLocInc2b(DMA_INCL_0),
	// CHNP_REF_1MV_Y + 2
		mDmaSysWidth6b(3 * SIZE_U / 8) |
		mDmaSysOff14b((DEFAULT_WIDTH * 2 * SIZE_U / 4) + 1 - (3 * SIZE_U / 4)) |
		mDmaLocWidth4b(PIXEL_U / 4) |
		mDmaLocOff8b(((8 * PIXEL_U) / 4) + 1 - (PIXEL_U / 4)),
	// CHNP_REF_1MV_Y + 3
		mDmaLoc3dOff8b((8 * PIXEL_U / 4) + 1 - (3 * PIXEL_U / 4)) |// jump to next row
		mDmaIntChainMask1b(TRUE) |
		mDmaEn1b(TRUE) |
		mDmaChainEn1b(TRUE) |
		mDmaDir1b(DMA_DIR_2LOCAL) |
		mDmaSType2b(DMA_DATA_2D) |
		mDmaLType2b(DMA_DATA_4D) |
		mDmaLen12b(9 * SIZE_U / 4) |
		mDmaID4b(ID_CHN_1MV),
	// CHNP_REF_1MV_U + 0
		DONT_CARE,
	// CHNP_REF_1MV_U + 1
		mDmaLoc2dWidth4b(8) |								// 8 lines/block
		mDmaLoc2dOff8b(1 - (PIXEL_U - 1) * (8 * PIXEL_U) / 4) |	// jump to new block
		mDmaLoc3dWidth4b(2) |								// 2 block/row
		mDmaLocMemAddr14b(REF_U_OFF_1) | 
		mDmaLocInc2b(DMA_INCL_0),
	// CHNP_REF_1MV_U + 2
		mDmaSysWidth6b(2 * SIZE_U / 8) |
		mDmaSysOff14b((DEFAULT_WIDTH * SIZE_U / 4) + 1 - (2 * SIZE_U / 4)) |
		mDmaLocWidth4b(PIXEL_U / 4) |
		mDmaLocOff8b(((8 * PIXEL_U) / 4) + 1 - (PIXEL_U / 4)),
	// CHNP_REF_1MV_U + 3
		mDmaLoc3dOff8b((8 * PIXEL_U / 4) + 1 - (2 * PIXEL_U / 4)) |// jump to next row
		mDmaIntChainMask1b(TRUE) |
		mDmaEn1b(TRUE) |
		mDmaChainEn1b(TRUE) |
		mDmaDir1b(DMA_DIR_2LOCAL) |
		mDmaSType2b(DMA_DATA_2D) |
		mDmaLType2b(DMA_DATA_4D) |
		mDmaLen12b(4 * SIZE_U / 4) |
		mDmaID4b(ID_CHN_1MV),
	// CHNP_REF_1MV_V + 0
		DONT_CARE,
	// CHNP_REF_1MV_V + 1
		mDmaLoc2dWidth4b(8) |								// 8 lines/block
		mDmaLoc2dOff8b(1 - (PIXEL_V - 1) * (8 * PIXEL_V) / 4) |	// jump to new block
		mDmaLoc3dWidth4b(2) |								// 2 block/row
		mDmaLocMemAddr14b(REF_V_OFF_1) |
		mDmaLocInc2b(DMA_INCL_0),
	// CHNP_REF_1MV_V + 2
		mDmaSysWidth6b(2 * SIZE_V / 8) |
		mDmaSysOff14b((DEFAULT_WIDTH * SIZE_V / 4) + 1 - (2 * SIZE_V / 4)) |
		mDmaLocWidth4b(PIXEL_V / 4) |
		mDmaLocOff8b(((8 * PIXEL_V) / 4) + 1 - (PIXEL_V / 4)),
	// CHNP_REF_1MV_V + 3
		mDmaLoc3dOff8b((8 * PIXEL_V / 4) + 1 - (2 * PIXEL_V / 4)) |// jump to next row
		mDmaIntChainMask1b(TRUE) |
		mDmaEn1b(TRUE) |
		mDmaChainEn1b(TRUE) |
		mDmaDir1b(DMA_DIR_2LOCAL) |
		mDmaSType2b(DMA_DATA_2D) |
		mDmaLType2b(DMA_DATA_4D) |
		mDmaLen12b(4 * SIZE_U / 4) |
		mDmaID4b(ID_CHN_1MV),

	// 3.
	// CHNP_IMG_Y + 0
		DONT_CARE,
	// CHNP_IMG_Y + 1
		mDmaLoc2dWidth4b(8) |								// 8 lines/block
		mDmaLoc2dOff8b(1 - (PIXEL_U - 1) * (2 * PIXEL_U) / 4) |	// jump to next block
		mDmaLoc3dWidth4b(2) |								// 2 block/row
		mDmaLocMemAddr14b(INTER_Y_OFF_1) |
		mDmaLocInc2b(DMA_INCL_0),
	// CHNP_IMG_Y + 2
		mDmaSysWidth6b(2 * SIZE_U / 8) |
		mDmaSysOff14b((DEFAULT_WIDTH * 2 * SIZE_U / 4) + 1 - (2 * SIZE_U / 4)) |
		mDmaLocWidth4b(PIXEL_U / 4) |
		mDmaLocOff8b((2 * PIXEL_U / 4) + 1 - (PIXEL_U / 4)),
	// CHNP_IMG_Y + 3
		mDmaLoc3dOff8b(1) |						// jump to next row
		mDmaIntChainMask1b(TRUE) |
		mDmaEn1b(TRUE) |
		mDmaChainEn1b(TRUE) |
		mDmaDir1b(DMA_DIR_2SYS) |
		mDmaSType2b(DMA_DATA_2D) |
		mDmaLType2b(DMA_DATA_4D) |
		mDmaLen12b(4 * SIZE_U / 4) |
		mDmaID4b(ID_CHN_IMG),
	// CHNP_IMG_U + 0
		DONT_CARE,
	// CHNP_IMG_U + 1
		mDmaLocMemAddr14b(INTER_U_OFF_1),
	// CHNP_IMG_U + 2
		DONT_CARE, 								// dont care block width
	// CHNP_IMG_U + 3
		mDmaLoc3dOff8b(DONT_CARE) |
		mDmaIntChainMask1b(TRUE) |
		mDmaEn1b(TRUE) |
		mDmaChainEn1b(TRUE) |
		mDmaDir1b(DMA_DIR_2SYS) |
		mDmaSType2b(DMA_DATA_SEQUENTAIL) |
		mDmaLType2b(DMA_DATA_SEQUENTAIL) |
		mDmaLen12b(SIZE_U / 4) |
		mDmaID4b(ID_CHN_IMG),
	// CHNP_IMG_V + 0
		DONT_CARE,
	// CHNP_IMG_V + 1
		mDmaLocMemAddr14b(INTER_V_OFF_1),
	// CHNP_IMG_V + 2
		DONT_CARE,								// dont care block width
	// CHNP_IMG_V + 3
		mDmaLoc3dOff8b(DONT_CARE) |
		mDmaIntChainMask1b(TRUE) |
		mDmaEn1b(TRUE) |
		mDmaChainEn1b(TRUE) |
		mDmaDir1b(DMA_DIR_2SYS) |
		mDmaSType2b(DMA_DATA_SEQUENTAIL) |
		mDmaLType2b(DMA_DATA_SEQUENTAIL) |
		mDmaLen12b(SIZE_V / 4) |
		mDmaID4b(ID_CHN_IMG),
	///////////////////////////////////////////////////
	// 4. 
	#if (OUTPUT_FMT == OUTPUT_FMT_YUV)
		// CHNP_YUV_Y + 0
			DONT_CARE,
		// CHNP_YUV_Y + 1
			mDmaLoc2dWidth4b(16) |				// 16 lines/MB
			mDmaLoc2dOff8b(DONT_CARE) |
			mDmaLoc3dWidth4b(DONT_CARE) |			// 2 block/row
			mDmaLocMemAddr14b(INTER_Y_OFF_1) |
			mDmaLocInc2b(DMA_INCL_0),
		// CHNP_YUV_Y + 2
			mDmaSysWidth6b(PIXEL_Y / 8) |
			mDmaSysOff14b((DEFAULT_STRIDE / 4) + 1 - (PIXEL_Y / 4)) |
			mDmaLocWidth4b(DONT_CARE) |
			mDmaLocOff8b(DONT_CARE),
		// CHNP_YUV_Y + 3
			mDmaLoc3dOff8b(DONT_CARE) |
			mDmaIntChainMask1b(TRUE) |
			mDmaEn1b(TRUE) |
			mDmaChainEn1b(TRUE) |
			mDmaDir1b(DMA_DIR_2SYS) |
			mDmaSType2b(DMA_DATA_2D) |
			mDmaLType2b(DMA_DATA_SEQUENTAIL) |
			mDmaLen12b(SIZE_Y / 4) |
			mDmaID4b(ID_CHN_YUV),
		// CHNP_YUV_U + 0
			DONT_CARE,
		// CHNP_YUV_U + 1
			mDmaLocMemAddr14b(INTER_U_OFF_1),
		// CHNP_YUV_U + 2
			mDmaSysWidth6b(PIXEL_U / 8) |
			mDmaSysOff14b(((DEFAULT_STRIDE / 2) / 4) + 1 - (PIXEL_U / 4)) |
			mDmaLocWidth4b(DONT_CARE) |
			mDmaLocOff8b(DONT_CARE),
		// CHNP_YUV_U + 3
			mDmaLoc3dOff8b(DONT_CARE) |
			mDmaIntChainMask1b(TRUE) |
			mDmaEn1b(TRUE) |
			mDmaChainEn1b(TRUE) |
			mDmaDir1b(DMA_DIR_2SYS) |
			mDmaSType2b(DMA_DATA_2D) |
			mDmaLType2b(DMA_DATA_SEQUENTAIL) |
			mDmaLen12b(SIZE_U / 4) |
			mDmaID4b(ID_CHN_YUV),
		// CHNP_YUV_V + 0
			DONT_CARE,
		// CHNP_YUV_V + 1
			mDmaLocMemAddr14b(INTER_V_OFF_1),
		// CHNP_YUV_V + 2
			mDmaSysWidth6b(PIXEL_V / 8) |
			mDmaSysOff14b(((DEFAULT_STRIDE / 2) / 4) + 1 - (PIXEL_V / 4)) |
			mDmaLocWidth4b(DONT_CARE) |
			mDmaLocOff8b(DONT_CARE),
		// CHNP_YUV_V + 3
			mDmaLoc3dOff8b(DONT_CARE) |
			mDmaIntChainMask1b(TRUE) |
			mDmaEn1b(TRUE) |
			mDmaChainEn1b(TRUE) |
			mDmaDir1b(DMA_DIR_2SYS) |
			mDmaSType2b(DMA_DATA_2D) |
			mDmaLType2b(DMA_DATA_SEQUENTAIL) |
			mDmaLen12b(SIZE_V / 4) |
			mDmaID4b(ID_CHN_YUV),
	#else
		// CHNP_RGB + 0
			DONT_CARE,
		// CHNP_RGB + 1
			mDmaLocMemAddr14b(BUFFER_RGB_OFF_0),		// watch-out
		// CHNP_RGB + 2
			mDmaSysWidth6b(RGB_PIXEL_SIZE * PIXEL_Y / 8) |
			mDmaSysOff14b((RGB_PIXEL_SIZE * DEFAULT_STRIDE / 4) + 1 - (RGB_PIXEL_SIZE * PIXEL_Y / 4)) |
			mDmaLocWidth4b(DONT_CARE) |
			mDmaLocOff8b(DONT_CARE),
		// CHNP_RGB + 3
			mDmaIntChainMask1b(TRUE) |
			mDmaEn1b(TRUE) |
			mDmaChainEn1b(TRUE) |
			mDmaDir1b(DMA_DIR_2SYS) |
			mDmaSType2b(DMA_DATA_2D) |

⌨️ 快捷键说明

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