亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? encoder.c

?? 基于Linux的ffmepg decoder
?? C
?? 第 1 頁 / 共 5 頁
字號:

	  pCodec->DMA_COMMAND_local[39] = (uint32_t) 0x4B00010; // enable Transfer Done flag mask
	                                                // Enable DMA start transferring
	                                                // Enable chain transfer
	                                                // From sequential System memory to sequential Local memory
	                                                // transfer 0x10 words (64 bytes)
	#endif

    POLL_MARKER_S
	while((pmdma->Status & 0x1) == 0);
	POLL_MARKER_E
	
	#if defined(CORE_VERSION_1)
	  // begin to move the local DMA commands (from 12th to 12+16-1=27th)
      // to the system memory and start DMA procedure..
	  DMA_MOVE(12, 0x4B00010) // enable Transfer Done flag mask
                            // Enable DMA start transferring
                            // Enable chain transfer
                            // From sequential Local memory to sequential System memory
                            // transfer 0x10(16) words	
	#elif defined(CORE_VERSION_2)
      // begin to move the local DMA commands (from 12th to 12+28-1=39th)
      // to the system memory and start DMA procedure..
	  DMA_MOVE(12, 0x4B0001C) // enable Transfer Done flag mask
	#endif
                            

	READ_ASADR(*pBits)						//	64 byte
	// read Bit-Stream Access Length Register (0x10050)
	READ_BALR(x)							//	compressed data in local memory (words)
	// read VLC/VLD Data Address Register (0x10044)
	READ_VOADR(y)							//	compressed data in local memory (bits)
	
	// the following lines... why???
	x = (x & 0x3c);
	y = y & 0xff;
	bit_header = y + x*8;					//	total bits in local memory

	pEnc->iFrameNum = 0;
	pEnc->current1->coding_type = I_VOP;
	if (!pEnc->mbParam.h263) {
		pEnc->mbParam.m_rounding_type = 1;
		pEnc->current1->rounding_type = pEnc->mbParam.m_rounding_type;
		BitstreamWriteVolHeader(&pEnc->mbParam, pEnc->current1,pEnc->pCodec);
		BitstreamWriteVopHeader(&pEnc->mbParam, pEnc->current1, 1,pEnc->pCodec);
	} else {
		pEnc->mbParam.m_rounding_type = 0;
		pEnc->current1->rounding_type = pEnc->mbParam.m_rounding_type;
		BitstreamWriteShortHeader(&pEnc->mbParam, pEnc->current1, 0,pEnc->pCodec);
	}
	
    // even_odd_1 was used to control the selection bewteen 
    // (CUR_Y0 ,CUR_U0,CUR_V0) buffer and (CUR_Y1,CUR_U1,CUR_V1) buffer
	pCodec->even_odd_1 = 0;
	
	// even_odd_I was used to control the selection bewteen 
    // LOCAL_PREDICTOR0 's double buffers
	pCodec->even_odd_I = 0;
	
	// DZQAR is a constant value = 0x8000800
	// DZAR/QAR register is at 0x10038
	// It was used to set the Quantization Block Address to 0x0800
	SET_QAR(DZQAR)
	
	// set ACDC Predictor Buffer Address
	// ACDCPAR register is at 0x10040
	SET_ACDCPAR(LOCAL_PREDICTOR0)

    POLL_MARKER_S
	while((pmdma->Status & 0x1) == 0);
	POLL_MARKER_E
	
	pCodec->DMA_COMMAND_local[23] = (uint32_t) 0x800010;	// disable Transfer Done flag mask
                                                    // Enable DMA start transferring
                                                    // Disable chain transfer
                                                    // From sequential System memory to sequential Local memory
                                                    // transfer 0x10(16) words = 64 bytes
	                                               
	pCodec->DMA_COMMAND_local[27] = (uint32_t) 0x4A40010;	// Enable Transfer Done flag mask
                                                    // Enable DMA start transferring
                                                    // Enable chain transfer
                                                    // From sequential System memory to 2D Local memory
                                                    // transfer 0x10(16) words
	
	pMB = pEnc->current1->mbs;
	for (y = 0; y < pEnc->mbParam.mb_height; y++) {
		MOVE_DEFAULT_PREDICTOR(&pEnc->mbParam,y,pCodec);
		for (x = 0; x < pEnc->mbParam.mb_width; x++) {
		    // CodeIntraMB() was just used to set the quantization level for each marcoblock
			CodeIntraMB(pEnc, pMB);

			RTL_DEBUG_OUT(0x91000000 | y << 12 | x)

			MBTransQuantIntra(&pEnc->mbParam, pEnc->current1, pMB, x, y, pEnc->mbParam.mb_width,pCodec);

			RTL_DEBUG_OUT(0x92000000 | y << 12 | x)

			pMB++;
            if (pEnc->mbParam.resyn==1)
			{
				pCodec->acdc_status = 6; // make Diagonal and Top default predictor
			}
		}

        if (pEnc->mbParam.resyn==1)
		{
		    if (!pEnc->mbParam.h263)
			{
				if (y!= (pEnc->mbParam.mb_height-1))
				{
					pMB->quant = pEnc->current1->quant;
					BitstreamPadAlways(pCodec);
					BitstreamPutBits(VIDO_RESYN_MARKER, 17,pCodec);
					BitstreamPutBits(x + y*pEnc->mbParam.mb_width, log2bin(pEnc->mbParam.mb_width *  pEnc->mbParam.mb_height - 1),pCodec);
					BitstreamPutBits(pMB->quant, 5,pCodec);
					BitstreamPutBit(0,pCodec);
				}
			}
			else
			{
				if (y!= (pEnc->mbParam.mb_height-1))
				{
				    #if defined(CORE_VERSION_2)
				      // In core_version_1 ,the hardware register (CPSTS) did not provide the
				      // bit to check whether the VLC engine is done or not. Without the bit,
				      // potentially, the follwing codes in core_version_1 will cause bitstream
				      // buffer contention if we want to insert the resync marker to bitstream
				      // buffer while VLC engine is not done and still accessing the same 
				      // bitstream buffer at the same time. Therefore, core_vesion_2 hardware has 
				      // provided another bit on bit15 of CPSTS register to let software check 
				      // the VLC done status in order to avoid bitstream buffer contention.

                      // check whether the VLC is done or not
                      // CPSTS register is at address 0x10028                      
                      int32_t cpsts;
 	                  do {
	                    READ_CPSTS(cpsts)
	                  } while (!(cpsts&0x08000));
                    #endif
 	                
					pMB->quant = pEnc->current1->quant;
					BitstreamPutBits(VIDO_RESYN_MARKER, 17,pCodec);
					BitstreamPutBits(y+1, 5,pCodec);
					BitstreamPutBits(0, 2,pCodec);		// ID
					BitstreamPutBits(pMB->quant, 5,pCodec);
				}
			}
		}
	}

	BitstreamPadAlways(pCodec);

	// check autobuffer done
	do {
	  READ_VLDSTS(y)
	} while(!(y&0x0400));
	
	READ_ASADR(data_64b)					//	64 byte
	READ_BALR(x)							//	compressed data in local memory (words)
	READ_VOADR(y)							//	compressed data in local memory (bits)
	x = (x & 0x3c);
	y = y & 0xff;
	y = y + x*8;							//	total bits in local memory
	data_64b = data_64b - *pBits;				//	total bytes in system memory
	*pBits = y + data_64b * 8 - bit_header;
	pEnc->mbParam.m_fcode = 1;
	
	#ifdef DUMP_RECONSTRUCTED_RESULT
	  dump_reconstructed_image_to_file(pEnc->current1->reconstruct.y,pEnc->mbParam.width,pEnc->mbParam.height,1,reconstructed_result_file);
	  dump_reconstructed_image_to_file(pEnc->current1->reconstruct.u,pEnc->mbParam.width/2,pEnc->mbParam.height/2,0,reconstructed_result_file);
	  dump_reconstructed_image_to_file(pEnc->current1->reconstruct.v,pEnc->mbParam.width/2,pEnc->mbParam.height/2,0,reconstructed_result_file);
    #endif

	return 1;					// intra
}

int
encoder_encode(Encoder * pEnc, Faraday_ENC_FRAME * pFrame)
{
    FTMCP100_CODEC *pCodec=(FTMCP100_CODEC *)pEnc->pCodec;
	Bitstream bs;
	uint32_t bits;
	uint16_t write_vol_header = 0;
	char not_coded_flag=1;
	
	DECLARE_MP4_PTR

	#if (defined(DUMP_ME_RESULT) || defined(DUMP_PMV_RESULT))
	  static int framenr=0;
	#endif
	  
	#ifdef DUMP_ME_RESULT
      fprintf(me_result_file,"Frame %d:\n",framenr);
    #endif
    
    #ifdef DUMP_PMV_RESULT
      fprintf(pmv_result_file,"Frame %d:\n",framenr);
    #endif
    
    #if (defined(DUMP_ME_RESULT) || defined(DUMP_PMV_RESULT))
	  framenr++;
	#endif

    if (pEnc->reference->image.y != NULL)
	{
      SWAP(pEnc->current1, pEnc->reference);
      not_coded_flag=0;
	}

	pEnc->current1->global_flags = pFrame->general;
	pEnc->current1->motion_flags = pFrame->motion;
	pEnc->current1->seconds = pEnc->mbParam.m_seconds;
	pEnc->current1->ticks = pEnc->mbParam.m_ticks;
	BitstreamInit(&bs, pFrame->bitstream, 0);
	if (pFrame->quant == 0) {
		pEnc->current1->quant = pEnc->rate_control.rtn_quant;
	} else {
		pEnc->current1->quant = pFrame->quant;
	}
	RTL_DEBUG_OUT(0x94000000 | (pEnc->current1->quant))

	if (pEnc->current1->global_flags & Faraday_H263QUANT) {
		if (pEnc->mbParam.m_quant_type != H263_QUANT)
			write_vol_header = 1;
		pEnc->mbParam.m_quant_type = H263_QUANT;
	} else if (pEnc->current1->global_flags & Faraday_MPEGQUANT) {
		int matrix1_changed, matrix2_changed;
		matrix1_changed = matrix2_changed = 0;
		if (pEnc->mbParam.m_quant_type != MPEG4_QUANT)
			write_vol_header = 1;
		pEnc->mbParam.m_quant_type = MPEG4_QUANT;
		if ((pEnc->current1->global_flags & Faraday_CUSTOM_QMATRIX) > 0) {
			if (pFrame->quant_intra_matrix != NULL)
				matrix1_changed = set_intra_matrix(pFrame->quant_intra_matrix,pEnc->pCodec);
			if (pFrame->quant_inter_matrix != NULL)
				matrix2_changed = set_inter_matrix(pFrame->quant_inter_matrix,pEnc->pCodec);
		} else {
			matrix1_changed = set_intra_matrix(get_default_intra_matrix(),pEnc->pCodec);
			matrix2_changed = set_inter_matrix(get_default_inter_matrix(),pEnc->pCodec);
		}
		if (write_vol_header == 0)
			write_vol_header = matrix1_changed | matrix2_changed;
	}
	
	//if (pEnc->current1->image.y == NULL)				/// not coded
	if(not_coded_flag)
	{
		FrameCodePNotCoded(pEnc, &bs, &bits, write_vol_header);
	}
	else
	{
	  if (pFrame->intra < 0) {
		if ((pEnc->iFrameNum == 0) || ((pEnc->iMaxKeyInterval > 0)
				&& (pEnc->iFrameNum >= pEnc->iMaxKeyInterval))) {
			pFrame->intra = FrameCodeI(pEnc, &bs, &bits);			
		} else {
			pFrame->intra = FrameCodeP(pEnc, &bs, &bits, write_vol_header);			
		}
	  } else {
		if (pFrame->intra == 1) {
			pFrame->intra = FrameCodeI(pEnc, &bs, &bits);			
		} else {
			pFrame->intra = FrameCodeP(pEnc, &bs, &bits, write_vol_header);			
		}
	  }
	}
	
	#if defined(RTL_PLATFORM)
    // why should we do this for RTL platform???
    // well, because the result of legnth is not right if we use FPGA platform's approach to 
    // calculate the frame length... so we copy the following line from well-established
    // codes for RTL platform from Rogers... this approach was approved before by Rogers
	pFrame->length = (bits>>3) + ((bits&0x7) != 0);
	
	#elif defined(FPGA_PLATFORM)

	// wait for auto buffer clean
	{
		unsigned int data_64b;
		unsigned int bit_len;
		unsigned int y;
		
		// check autobuffer done
 	    do {
	      READ_VLDSTS(y)
	    } while(!(y&0x0400 ));

		READ_ASADR(data_64b);
		READ_BALR(bit_len);
		bit_len = bit_len & 0x3c;  // access local memory position
		
		data_64b = data_64b + bit_len - (unsigned int)bs.start;
		READ_VOADR(bits);
		bits &= 0x1f;				/// got last bit
	

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
不卡一区二区在线| 蜜桃一区二区三区在线| 一区二区三区四区激情| 亚洲一区日韩精品中文字幕| 国产在线精品国自产拍免费| 成人黄色av电影| 成人精品小蝌蚪| 久久久精品黄色| 免费一区二区视频| 欧美日韩国产首页| 欧美日韩综合在线| 欧美精品亚洲一区二区在线播放| 色婷婷av久久久久久久| 色婷婷av一区二区三区大白胸| 欧美撒尿777hd撒尿| 欧美日韩国产乱码电影| 欧美一区二区三区思思人| 欧美大尺度电影在线| 欧美激情一区在线| 一区二区三区四区激情| 蜜臀久久99精品久久久久宅男| 不卡一区二区三区四区| 国产成人自拍网| 91精品国产色综合久久不卡电影| 成人免费一区二区三区在线观看| 老司机免费视频一区二区三区| 91蝌蚪porny成人天涯| 欧美精品三级日韩久久| 亚洲欧洲国产专区| 国产精品99久| 久久美女艺术照精彩视频福利播放| 亚洲欧美日韩成人高清在线一区| 国产酒店精品激情| 久久综合久久久久88| 国产一区二区影院| 精品sm在线观看| 精品一区二区三区免费观看| 日韩欧美一卡二卡| 看国产成人h片视频| 国产精品久久一卡二卡| 136国产福利精品导航| 亚洲国产日产av| 国产亚洲一二三区| 欧美成人女星排名| 欧美乱熟臀69xxxxxx| 99久久久无码国产精品| 一区二区三区免费看视频| 欧美高清www午色夜在线视频| 久久综合综合久久综合| 国产精品国产三级国产普通话三级 | 久久日一线二线三线suv| 国产九色sp调教91| 亚洲欧洲三级电影| 欧美精三区欧美精三区| 激情综合一区二区三区| 国产精品成人一区二区艾草 | 伊人一区二区三区| 欧美一区二区日韩一区二区| 国产精品一区二区黑丝| 亚洲一区在线视频观看| 日韩欧美激情四射| 在线看国产一区二区| 国产在线精品免费av| 日韩制服丝袜av| 1000精品久久久久久久久| 日韩欧美的一区二区| 色呦呦日韩精品| 国产aⅴ综合色| 蜜臀精品久久久久久蜜臀| 亚洲视频 欧洲视频| 久久久午夜精品理论片中文字幕| 欧美日韩一级二级| 国产91在线看| 国产乱妇无码大片在线观看| 亚洲成人av一区二区三区| 亚洲人成在线播放网站岛国| 久久人人超碰精品| 26uuu另类欧美| 久久精品日产第一区二区三区高清版| 日韩一卡二卡三卡国产欧美| 91精品一区二区三区在线观看| 欧美一卡2卡3卡4卡| 精品国产污污免费网站入口| 久久亚区不卡日本| 一区二区三区日韩精品视频| 国产精品不卡一区| 亚洲欧美另类久久久精品2019| 亚洲欧美另类小说| 久久色成人在线| 樱花影视一区二区| 亚洲一线二线三线久久久| 日韩国产欧美在线播放| 久久国产尿小便嘘嘘| 成人性视频网站| 一本久久精品一区二区| 欧美日韩一级片在线观看| 欧美不卡激情三级在线观看| 久久久精品人体av艺术| 一区二区三区在线播放| 成人国产精品免费网站| 欧美日韩国产免费一区二区 | 中文字幕的久久| 亚洲色图欧美在线| 男男成人高潮片免费网站| 成人av在线一区二区三区| 91极品视觉盛宴| 欧美激情中文字幕| 日本成人在线电影网| 91在线播放网址| 国产日韩欧美精品在线| 日韩电影在线观看一区| 99riav久久精品riav| 久久久噜噜噜久久人人看 | 丰满岳乱妇一区二区三区| 69av一区二区三区| 五月综合激情婷婷六月色窝| 成人av免费在线| 久久综合九色综合欧美98| 日韩高清一区二区| 欧洲色大大久久| 亚洲精品国产高清久久伦理二区| 国产精品一区一区| 久久先锋影音av| 波多野结衣中文一区| 国产嫩草影院久久久久| 激情亚洲综合在线| 久久亚洲综合色一区二区三区| 久久精品国产99国产| wwww国产精品欧美| 成人性视频网站| 亚洲欧美偷拍卡通变态| 在线免费观看一区| 日韩av一区二区在线影视| 日韩你懂的在线播放| 成人国产精品免费观看视频| 亚洲精品视频在线观看免费 | 中文字幕亚洲区| 91久久精品一区二区三| 亚洲国产成人精品视频| 欧美成人精精品一区二区频| 国产一区二区毛片| 亚洲欧洲精品一区二区三区不卡| 欧美在线制服丝袜| 麻豆精品一区二区综合av| 精品粉嫩超白一线天av| 欧美性受xxxx黑人xyx性爽| 日韩福利视频网| 国产精品盗摄一区二区三区| 91精品麻豆日日躁夜夜躁| 国产在线播精品第三| 婷婷综合五月天| 亚洲精选一二三| 中文字幕va一区二区三区| 69堂国产成人免费视频| 91国在线观看| 国产成人免费视| 久久精品国产77777蜜臀| 亚洲一本大道在线| 亚洲免费观看在线视频| 久久日韩精品一区二区五区| 制服丝袜在线91| 欧美日韩一区不卡| 欧美伊人精品成人久久综合97| 国产麻豆欧美日韩一区| 美国十次综合导航| 成人永久aaa| 成人黄色电影在线| 成人免费看黄yyy456| 国产乱国产乱300精品| 韩日精品视频一区| 国产精品羞羞答答xxdd| 国产精品一级在线| 国产精品1024久久| 国产v综合v亚洲欧| 国产成人午夜精品影院观看视频 | 性久久久久久久久久久久| 午夜精品一区二区三区三上悠亚| 亚洲国产精品视频| 日韩成人一区二区三区在线观看| 日韩精品久久久久久| 另类人妖一区二区av| 国产精品456露脸| 粗大黑人巨茎大战欧美成人| 波多野结衣中文字幕一区二区三区| 色哟哟一区二区| 欧美大胆一级视频| 国产精品国产三级国产专播品爱网| 亚洲三级电影网站| 视频在线观看91| 成人黄页在线观看| 欧美色大人视频| 久久精品视频网| 亚洲成av人在线观看| 国产麻豆视频一区| 欧美日韩视频不卡| 欧美激情一区二区三区在线| 亚洲成人动漫精品| 91视频免费观看| 欧美韩国日本不卡| 韩国毛片一区二区三区|