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

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

?? encoder.c

?? 基于Linux的ffmepg decoder
?? C
?? 第 1 頁 / 共 5 頁
字號:
#include "encoder.h"
#include "global.h"
#include "enc_image.h"
#include "motion.h"
#include "ratecontrol.h"
#include "bitstream.h"
#include "mbfunctions.h"
#include "quant_matrix.h"

// added for dumping reconstructed image result
#ifdef DUMP_RECONSTRUCTED_RESULT
void dump_reconstructed_image_to_file(uint8_t * const buf,uint32_t width,uint32_t height,int dump_y,FILE *f)
{   // since the reconstructed image for MPEG4 encoder's hardware is 2D, so we transfrom it to 1D
	uint32_t i,j;
	uint32_t mb_x,mb_y,mb_size; // mb_x and mb_y is macroblock's number
	uint32_t mb_width,mb_height;
	uint8_t *mb_start;
	
	if(dump_y) { mb_width=16; mb_height=16; }
	else { mb_width=8; mb_height=8; }
	
	mb_size=mb_width*mb_height;
	
	for (j = 0; j < height; j++) {
		for (i = 0; i < width; i++) {
		  mb_x=i/mb_width;
		  mb_y=j/mb_height;
		  mb_start=buf+(mb_y*(width/mb_width)+mb_x)*mb_size;
          fwrite(mb_start+(j%mb_height)*mb_width+(i%mb_width),sizeof(uint8_t),1,f);
		}
	}
}
#endif

/*
__align(16) int16_t default_acdc_values[64] = {
	1024, 0, 0, 0, 0, 0, 0, 0,
	1024, 0, 0, 0, 0, 0, 0, 0,
	1024, 0, 0, 0, 0, 0, 0, 0,
	1024, 0, 0, 0, 0, 0, 0, 0,
	1024, 0, 0, 0, 0, 0, 0, 0,
	1024, 0, 0, 0, 0, 0, 0, 0,
	1024, 0, 0, 0, 0, 0, 0, 0,
	1024, 0, 0, 0, 0, 0, 0, 0};
*/

#define FRAMERATE_INCR		1001
#define SMALL_EPS 1e-10

/*****************************************************************************
 * Local function prototypes
 ****************************************************************************/
static int FrameCodeP(Encoder * pEnc,Bitstream * bs,uint32_t * pBits,bool vol_header);
static int FrameCodePNotCoded(Encoder * pEnc,Bitstream * bs,uint32_t * pBits,bool vol_header);
static int FrameCodeI(Encoder * pEnc,Bitstream * bs,uint32_t * pBits);
/*****************************************************************************
 * Local data
 ****************************************************************************/

static void __inline
image_null(IMAGE * image)
{
	image->y = image->u = image->v = NULL;
	image->y_virt = image->u_virt = image->v_virt = NULL;
}

static uint32_t __inline
log2bin(uint32_t value)
{
	int n = 0;

	while (value) {
		value >>= 1;
		n++;
	}
	return n;
}

/*****************************************************************************
 * Encoder creation
 *
 * This function creates an Encoder instance, it allocates all necessary
 * image buffers (reference, current) and initialize the internal Faraday
 * encoder paremeters according to the Faraday_ENC_PARAM input parameter.
 *
 * The code seems to be very long but is very basic, mainly memory allocation
 * and cleaning code.
 *
 * Returned values :
 *    - Faraday_ERR_OK     - no errors
 *    - Faraday_ERR_MEMORY - the libc could not allocate memory, the function
 *                        cleans the structure before exiting.
 *                        pParam->handle is also set to NULL.
 *
 ****************************************************************************/

void __inline MOVE_DEFAULT_PREDICTOR(MBParam * const pParam,uint32_t y,FTMCP100_CODEC *pCodec)
{
    if (pParam->resyn==0)
	{
		if (y)
			pCodec->acdc_status = 5; // Diagonal and Left
		else
			pCodec->acdc_status = 7; // Diagonal and Top and Left
	}
	else
	{
		pCodec->acdc_status = 7; // Diagonal and Top and Left
	}
}

void *encoder_create(FMP4_ENC_PARAM * ptParam,FTMCP100_CODEC *pCodec)
{
	volatile MDMA *pmdma = MDMA1;
	Encoder *pEnc;
	int i;
	int fincr,fbase;
	
    if ((ptParam->fFrameRate - (int)ptParam->fFrameRate) < SMALL_EPS)
      {  fincr = 1;  fbase = (int)ptParam->fFrameRate; }
    else
      {  fincr = FRAMERATE_INCR;  fbase = (int)(FRAMERATE_INCR * ptParam->fFrameRate); }

	#if defined(CORE_VERSION_2)
	  // we group the DMA commands type
	  // group ID 0 : normal operation
	  // group ID 1 : disable this DMA command
      // group ID 2 : sync to MC done
      // group ID 3 : sync to VLC done
      pmdma->GRPC =(uint32_t) 0x000000f8;
      pmdma->GRPS =(uint32_t) 0x000000e0;
      
	  /*  initial DMA command chain	*/
	  pCodec->DMA_COMMAND_local[14] = (uint32_t) 0;
	  pCodec->DMA_COMMAND_local[14+DMA_COMMAND_QUEUE_STRIDE] = (uint32_t) 0;
	  pCodec->DMA_COMMAND_local[18] = (uint32_t) 0;
	  pCodec->DMA_COMMAND_local[18+DMA_COMMAND_QUEUE_STRIDE] = (uint32_t) 0;
	  pCodec->DMA_COMMAND_local[22] = (uint32_t) 0;
	  pCodec->DMA_COMMAND_local[22+DMA_COMMAND_QUEUE_STRIDE] = (uint32_t) 0;


      pCodec->DMA_COMMAND_local[26] = (uint32_t) 0;
	  //pCodec->DMA_COMMAND_local[27] = (uint32_t) 0x4B01040; // make it group ID 1, disable this command
	  pCodec->DMA_COMMAND_local[30] = (uint32_t) 0;
	  //pCodec->DMA_COMMAND_local[31] = (uint32_t) 0x4B01010; // make it group ID 1, disable this command
	  pCodec->DMA_COMMAND_local[34] = (uint32_t) 0;
	  //pCodec->DMA_COMMAND_local[35] = (uint32_t) 0x4B01010; // make it group ID 1, disable this command
	  
	  pCodec->DMA_COMMAND_local[26+DMA_COMMAND_QUEUE_STRIDE] = (uint32_t) 0;
	  //pCodec->DMA_COMMAND_local[27+DMA_COMMAND_QUEUE_STRIDE] = (uint32_t) 0x4B01040; // make it group ID 1, disable this command
	  pCodec->DMA_COMMAND_local[30+DMA_COMMAND_QUEUE_STRIDE] = (uint32_t) 0;
	  //pCodec->DMA_COMMAND_local[31+DMA_COMMAND_QUEUE_STRIDE] = (uint32_t) 0x4B01010; // make it group ID 1, disable this command
	  pCodec->DMA_COMMAND_local[34+DMA_COMMAND_QUEUE_STRIDE] = (uint32_t) 0;
	  //pCodec->DMA_COMMAND_local[35+DMA_COMMAND_QUEUE_STRIDE] = (uint32_t) 0x4B01010; // make it group ID 1, disable this command
      // load predictor
      pCodec->DMA_COMMAND_local[38] = (uint32_t) (8+1-4) << 24 | 4 << 20;
	  //pCodec->DMA_COMMAND_local[39] = (uint32_t) 0x840010;
	  pCodec->DMA_COMMAND_local[38+DMA_COMMAND_QUEUE_STRIDE] = (uint32_t) (8+1-4) << 24 | 4 << 20;
	  //pCodec->DMA_COMMAND_local[39+DMA_COMMAND_QUEUE_STRIDE] = (uint32_t) 0x840010;	  
      
      //  store predictor
      pCodec->DMA_COMMAND_local[41] = TRANSLATE_LOCAL_MEMORY_BASE_ADDRESS(LOCAL_PREDICTOR8);
      pCodec->DMA_COMMAND_local[41+DMA_COMMAND_QUEUE_STRIDE] = TRANSLATE_LOCAL_MEMORY_BASE_ADDRESS(LOCAL_PREDICTOR8);
	
	  pCodec->DMA_COMMAND_local[42] = (uint32_t) (8+1-4) << 24 | 4 << 20;
	  pCodec->DMA_COMMAND_local[42+DMA_COMMAND_QUEUE_STRIDE] = (uint32_t) (8+1-4) << 24 | 4 << 20;

	  pCodec->DMA_COMMAND_local[43] = (uint32_t) 0x942010;  // sync to MC done
      pCodec->DMA_COMMAND_local[43+DMA_COMMAND_QUEUE_STRIDE] = (uint32_t) 0x942010; // sync to MC done

    #elif defined(CORE_VERSION_1)
	  /*  initial DMA command chain	*/
	  pCodec->DMA_COMMAND_local[14] = (uint32_t) 0;
	  pCodec->DMA_COMMAND_local[18] = (uint32_t) 0;
	  pCodec->DMA_COMMAND_local[22] = (uint32_t) 0;
      //	load predictor
	  pCodec->DMA_COMMAND_local[26] = (uint32_t) (8+1-4) << 24 | 4 << 20;
	  pCodec->DMA_COMMAND_local[27] = (uint32_t) 0x840010;						//  chain disenable
      //	end load predictor

	  pCodec->DMA_COMMAND_local[30] = (uint32_t) 0;
	  pCodec->DMA_COMMAND_local[31] = (uint32_t) 0x4B00040;						//  chain enable

	  pCodec->DMA_COMMAND_local[34] = (uint32_t) 0;
	  pCodec->DMA_COMMAND_local[35] = (uint32_t) 0x4B00010;						//  chain enable

	  pCodec->DMA_COMMAND_local[38] = (uint32_t) 0;
	  pCodec->DMA_COMMAND_local[39] = (uint32_t) 0x4B00010;						//  chain disenable

      //  store predictor
	  pCodec->DMA_COMMAND_local[41] = LOCAL_PREDICTOR8;
	
	  pCodec->DMA_COMMAND_local[42] = (uint32_t) (8+1-4) << 24 | 4 << 20;
	  pCodec->DMA_COMMAND_local[43] = (uint32_t) 0x940010; // Disable Transfer Done flag mask
                                                   // Enable DMA start transferring
                                                   // Disable chain transfer
                                                   // From 2D Local memory to sequential System memory
                                                   // transfer 0x10(16) words = 64 bytes
      //  end store predictor
    #endif

	//if (pParam->fincr <= 0 || pParam->fbase <= 0) {
    //pParam->fincr = 1;
	//	pParam->fbase = 25;
	//}
	if (fincr <= 0 || fbase <= 0) {
		fincr = 1;
		fbase = 25;
	}

	//
	// Simplify the "fincr/fbase" fraction
	// (neccessary, since windows supplies us with huge numbers)
	//
	 
	i = fincr; //i = pParam->fincr;
	while (i > 1) {
		if (fincr % i == 0 && fbase % i == 0) {
			fincr /= i;
			fbase /= i;
			i = fincr;
			continue;
		}
		i--;
	}

    if (fbase > 65535) {
		float div = (float) fbase / 65535;
		fbase = (int) (fbase / div);
		fincr = (int) (fincr / div);
	}
#if 0 //ivan
	pEnc = (Encoder *) Faraday_malloc(sizeof(Encoder), (uint8_t) CACHE_LINE);
#else
    pEnc = (Encoder *)kmalloc(sizeof(Encoder),GFP_KERNEL|GFP_ATOMIC);
#endif
	
	if (pEnc == NULL) 
	  return NULL;

	// Zero the Encoder Structure
	memset(pEnc, 0, sizeof(Encoder));
	
	pEnc->mbParam.h263 = ptParam->bShortHeader;	
	pEnc->mbParam.resyn = ptParam->bResyncMarker;
	pEnc->mbParam.enable_4mv = ptParam->bEnable4MV;
	
	if (ptParam->bEnable4MV) {	//if (pParam->enable_4mv) {	
      MotionEstimation = MotionEstimation_4MV;
      MotionEstimation_blocklast = MotionEstimation_blocklast_4MV;
      MotionEstimation_block0 = MotionEstimation_block0_4MV;
	} else {
      MotionEstimation = MotionEstimation_1MV;
      MotionEstimation_blocklast = MotionEstimation_blocklast_1MV;
      MotionEstimation_block0 = MotionEstimation_block0_1MV;
	}
	
	pEnc->mbParam.temporal_ref = 0;

	/* Fill members of Encoder structure */

    pEnc->mbParam.width = ptParam->u32FrameWidth;
	pEnc->mbParam.height = ptParam->u32FrameHeight;

	pEnc->mbParam.mb_width = (pEnc->mbParam.width + 15) / 16;
	pEnc->mbParam.mb_height = (pEnc->mbParam.height + 15) / 16;

	pEnc->mbParam.fbase = fbase;
	pEnc->mbParam.fincr = fincr;

	pEnc->mbParam.m_quant_type = H263_QUANT;

	/* Fill rate control parameters */

	pEnc->bitrate = ptParam->u32BitRate*1000;

	pEnc->iFrameNum = 0;
	pEnc->iMaxKeyInterval = ptParam->u32IPInterval;

	/* try to allocate frame memory */
#if 0
	pEnc->current = Faraday_malloc(sizeof(FRAMEINFO), CACHE_LINE);
	pEnc->reference = Faraday_malloc(sizeof(FRAMEINFO), CACHE_LINE);
#else
	pEnc->current1 = kmalloc(sizeof(FRAMEINFO),GFP_KERNEL|GFP_ATOMIC);
	pEnc->reference = kmalloc(sizeof(FRAMEINFO),GFP_KERNEL|GFP_ATOMIC);
#endif

	if (pEnc->current1 == NULL || pEnc->reference == NULL)
		goto Faraday_err_memory1;
	

    if(ptParam->pu8ReConFrameCur) // if it is not NULL, use user-provided buffer
      enc_image_adjust(&(pEnc->current1->reconstruct), pEnc->mbParam.mb_width, pEnc->mbParam.mb_height,ptParam->pu8ReConFrameCur);
    else {

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产欧美一区二区三区网站| 日日夜夜免费精品| 五月婷婷综合激情| 不卡的看片网站| 欧美大尺度电影在线| 亚洲国产日产av| 99久久精品免费观看| 久久人人97超碰com| 水野朝阳av一区二区三区| 波多野结衣91| 国产色爱av资源综合区| 日本不卡免费在线视频| 欧美日韩中文精品| 亚洲免费在线看| 91老师片黄在线观看| 国产色综合一区| 国产成人av一区二区三区在线| 日韩午夜小视频| 日韩av成人高清| 欧美久久婷婷综合色| 亚洲已满18点击进入久久| 91性感美女视频| 国产精品不卡一区| 成人午夜免费电影| 日本一区二区视频在线观看| 国内欧美视频一区二区| 26uuu亚洲综合色| 秋霞av亚洲一区二区三| 日韩免费视频一区二区| 精品无码三级在线观看视频| 日韩欧美色综合| 美女mm1313爽爽久久久蜜臀| 日韩丝袜美女视频| 裸体歌舞表演一区二区| 久久综合五月天婷婷伊人| 久久国产尿小便嘘嘘尿| 久久综合九色欧美综合狠狠| 国产成人福利片| 中文字幕高清一区| av中文字幕在线不卡| 综合欧美亚洲日本| 欧美午夜在线一二页| 日韩电影在线免费看| 欧美v国产在线一区二区三区| 韩国视频一区二区| 国产精品久久一卡二卡| 91久久国产最好的精华液| 亚洲中国最大av网站| 日韩三级高清在线| 成人三级伦理片| 亚洲一区免费视频| 91精品婷婷国产综合久久性色| 蜜臀91精品一区二区三区 | 欧美激情资源网| 成人高清在线视频| 天堂精品中文字幕在线| 精品国产污网站| 99久久婷婷国产精品综合| 五月天激情小说综合| 久久一区二区视频| 在线精品视频免费观看| 久久99国产精品免费| 中文字幕在线一区| 欧美日韩国产综合一区二区三区 | 亚洲国产成人va在线观看天堂| 欧美人与禽zozo性伦| 国产精品一区久久久久| 亚洲与欧洲av电影| 久久久精品影视| 欧美日韩国产免费| 成人精品国产免费网站| 亚洲国产欧美在线| 国产精品视频yy9299一区| 欧美亚洲愉拍一区二区| 国产精品一卡二卡| 亚洲高清免费在线| 国产精品网站一区| 欧美一级久久久| 色又黄又爽网站www久久| 久久精品国产第一区二区三区| 国产精品国模大尺度视频| 日韩欧美中文字幕制服| 在线观看www91| www.一区二区| 国产综合色在线视频区| 天天影视涩香欲综合网| 亚洲免费观看高清| 中文字幕免费一区| 久久久久久麻豆| 欧美一区二区三区不卡| 欧美吞精做爰啪啪高潮| www.日韩大片| 国产成人av影院| 国产精品综合二区| 精品一区二区在线免费观看| 奇米色777欧美一区二区| 夜夜嗨av一区二区三区中文字幕| 国产精品拍天天在线| 国产欧美va欧美不卡在线| 欧美成人精品3d动漫h| 日韩视频中午一区| 日韩情涩欧美日韩视频| 91精品国产手机| 5月丁香婷婷综合| 欧美日韩aaaaaa| 欧美日韩精品电影| 精品视频1区2区| 欧美日韩精品欧美日韩精品一综合| 成人成人成人在线视频| av动漫一区二区| 91在线精品秘密一区二区| 成人黄色大片在线观看| 欧美精品三级在线观看| 欧美久久久一区| 51精品视频一区二区三区| 欧美伦理电影网| 日韩一区二区三区视频| 日韩免费视频一区二区| 欧美精品一区二区三区四区 | 欧美日韩高清一区二区三区| 欧美亚洲动漫另类| 91麻豆精品国产自产在线| 欧美一区二区三区四区在线观看| 日韩一级完整毛片| 欧美成人a视频| 久久伊人蜜桃av一区二区| 国产亚洲成av人在线观看导航| 国产欧美日韩中文久久| 欧美国产乱子伦| 亚洲人成7777| 亚洲成人激情社区| 久久超级碰视频| 成人激情av网| 欧美三级中文字幕在线观看| 在线成人av网站| 久久众筹精品私拍模特| 亚洲日本欧美天堂| 天堂蜜桃91精品| 国产激情精品久久久第一区二区| 99精品久久99久久久久| 欧美日韩国产欧美日美国产精品| 精品日韩一区二区| 中文字幕一区二区三区精华液| 亚洲五月六月丁香激情| 久久超级碰视频| 色婷婷一区二区三区四区| 欧美男女性生活在线直播观看| 欧美v国产在线一区二区三区| 18涩涩午夜精品.www| 日本中文一区二区三区| 成人深夜视频在线观看| 欧美视频一区二区在线观看| 久久日韩精品一区二区五区| 中文字幕色av一区二区三区| 奇米一区二区三区| 99精品视频一区| 精品精品欲导航| 一区二区三区四区乱视频| 国内国产精品久久| 欧洲一区在线观看| 欧美激情综合五月色丁香小说| 午夜精品aaa| 91亚洲精品乱码久久久久久蜜桃| 日韩一区二区精品| 亚洲国产一区视频| 粉嫩久久99精品久久久久久夜| 欧美女孩性生活视频| 欧美激情一区二区| 麻豆久久久久久| 欧美婷婷六月丁香综合色| 国产精品久久久久影院亚瑟 | 日韩欧美国产系列| 一区二区不卡在线播放| 国产精品亚洲人在线观看| 制服丝袜日韩国产| 一区二区三区资源| 成人国产精品免费观看动漫| 精品乱人伦小说| 日韩不卡免费视频| 精品视频免费在线| 一区二区三区欧美激情| 丁香激情综合五月| 亚洲精品水蜜桃| 成人在线一区二区三区| 精品国产成人在线影院| 日韩中文字幕av电影| 欧美中文字幕不卡| 亚洲精品久久嫩草网站秘色| 成人18视频在线播放| 久久精品亚洲麻豆av一区二区| 精品综合久久久久久8888| 欧美久久高跟鞋激| 亚洲国产视频a| 欧美在线你懂的| 亚洲已满18点击进入久久| 91精彩视频在线观看| 夜夜揉揉日日人人青青一国产精品| 9人人澡人人爽人人精品| 国产精品久久久久9999吃药| 成人免费视频app|