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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 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 {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
视频一区免费在线观看| 久久99久久99小草精品免视看| 日韩一区二区视频在线观看| 91精品午夜视频| 久久午夜电影网| 中文字幕精品一区二区三区精品| 亚洲欧美另类小说| 青青草国产成人99久久| 成人午夜电影久久影院| 欧美二区三区的天堂| 久久精品夜色噜噜亚洲a∨| 亚洲美女淫视频| 国产一区二区电影| 欧美日韩国产精选| 中文文精品字幕一区二区| 亚洲国产乱码最新视频| 成人精品鲁一区一区二区| 欧美色区777第一页| 欧美激情一区二区三区在线| 日韩va欧美va亚洲va久久| 99久久99久久精品免费观看 | 久久精品99久久久| 国产一区二区三区久久悠悠色av| 91成人免费网站| 久久精品夜色噜噜亚洲aⅴ| 亚洲观看高清完整版在线观看| 成人自拍视频在线观看| 精品乱人伦小说| 五月天欧美精品| 色婷婷激情久久| 国产精品素人一区二区| 国内一区二区视频| 色综合视频在线观看| 国产片一区二区| 国产美女一区二区三区| 欧美成va人片在线观看| 午夜激情一区二区| www.亚洲色图| 日本一区二区在线不卡| 精品亚洲国内自在自线福利| 91丨九色丨蝌蚪丨老版| 精品国产乱码久久久久久影片| 亚洲国产精品尤物yw在线观看| 欧美精品在线一区二区| 91蜜桃免费观看视频| 91精品在线免费观看| 久久国内精品自在自线400部| 久久亚洲一区二区三区明星换脸| 国产伦精品一区二区三区视频青涩 | 精品免费日韩av| 国产麻豆视频一区| 中文字幕日韩av资源站| 欧美亚洲综合另类| 久久爱www久久做| 亚洲国产精品精华液ab| 色狠狠综合天天综合综合| 亚洲成人激情自拍| 亚洲精品一区二区三区精华液 | 国产精品欧美一区喷水| 91麻豆免费在线观看| 亚洲成人动漫在线免费观看| 日韩欧美成人激情| 成人午夜精品在线| 亚洲国产精品欧美一二99| 日韩一区二区在线播放| 成人18精品视频| 天堂精品中文字幕在线| 欧美国产丝袜视频| 日本高清不卡在线观看| 国产在线精品一区二区夜色| 日韩美女久久久| 欧美成人一区二区三区| 91视频免费观看| 精品一区二区三区免费毛片爱| 亚洲人成7777| 久久综合色8888| 欧洲一区二区av| 国产伦精一区二区三区| 日韩专区在线视频| 亚洲特级片在线| 久久综合999| 欧美午夜精品久久久久久超碰 | 亚洲视频一区二区在线观看| 日韩欧美第一区| 在线精品视频小说1| 国产不卡视频在线播放| 日本欧美一区二区三区乱码| 亚洲欧美另类图片小说| 久久久久久久综合色一本| 欧美日韩国产高清一区二区| 成人免费毛片app| 久久国产精品99久久人人澡| 亚洲主播在线观看| 国产精品高潮久久久久无| 精品久久久网站| 日韩一区二区三区电影在线观看 | 亚洲在线视频网站| 国产精品视频麻豆| 久久综合精品国产一区二区三区| 9191国产精品| 欧美日产国产精品| 在线观看国产日韩| 97se亚洲国产综合在线| 丰满白嫩尤物一区二区| 国产在线精品免费| 久久激情综合网| 蜜臀av性久久久久蜜臀aⅴ| 亚洲综合激情小说| 一区二区三区日韩精品视频| 亚洲视频在线一区观看| 亚洲欧洲美洲综合色网| 亚洲欧洲av在线| 一区在线观看视频| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 久久精品一级爱片| 久久久精品影视| 国产精品久久久久7777按摩| 国产精品毛片大码女人| 中文字幕一区二区三区不卡在线| 亚洲国产高清aⅴ视频| 国产精品天美传媒| 国产精品家庭影院| 日韩久久一区二区| 亚洲欧美视频在线观看视频| 国产精品久久久久一区| 中文字幕在线不卡| 亚洲精品国产第一综合99久久| 亚洲乱码中文字幕综合| 一区二区激情视频| 天涯成人国产亚洲精品一区av| 日韩av二区在线播放| 精品一区二区成人精品| 国产酒店精品激情| 成人h版在线观看| 91国产精品成人| 欧美不卡视频一区| 国产欧美一区二区精品性| 国产欧美日韩不卡| 亚洲欧美一区二区久久| 视频在线观看一区| 国产一区二区女| 91尤物视频在线观看| 欧美日韩视频专区在线播放| 欧美videos大乳护士334| 国产日韩欧美高清| 悠悠色在线精品| 久久精品国产第一区二区三区| 粉嫩13p一区二区三区| 色综合视频在线观看| 日韩欧美亚洲国产精品字幕久久久| 久久伊人中文字幕| 中文字幕中文字幕一区| 三级精品在线观看| 成人精品电影在线观看| 欧美人狂配大交3d怪物一区| 久久久精品综合| 日韩制服丝袜av| 成人高清免费在线播放| 欧美一区二区三区在线视频| 国产免费久久精品| 午夜成人免费视频| 99久久久无码国产精品| 日韩欧美国产午夜精品| 亚洲蜜臀av乱码久久精品| 捆绑调教美女网站视频一区| 色欧美日韩亚洲| 国产色爱av资源综合区| 日韩一区精品字幕| 91久久国产最好的精华液| 久久夜色精品一区| 三级欧美在线一区| 91麻豆swag| 国产日韩av一区二区| 久久精品国产在热久久| 在线日韩一区二区| 1区2区3区精品视频| 国产精品一品视频| 日韩精品一区二| 日韩二区在线观看| 欧美亚洲综合色| 樱桃视频在线观看一区| 99国产一区二区三精品乱码| 久久精品视频在线看| 久久99久久99| 久久久99免费| 亚洲精品中文字幕在线观看| 东方aⅴ免费观看久久av| 日韩精品一区二| 久久国产精品72免费观看| 欧美精品高清视频| 亚洲自拍另类综合| 欧美日韩中文精品| 亚洲一区二区三区三| 色婷婷国产精品综合在线观看| 亚洲欧洲在线观看av| 91香蕉视频在线| 亚洲欧美二区三区| 亚洲精品视频观看| 在线观看日韩一区| 亚洲国产欧美在线人成|