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

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

?? mp4venc.c

?? 基于Linux的ffmepg decoder
?? C
字號:
/**
 *  @file Mp4Venc.c
 *  @brief The implementation file for Faraday MPEG4 encoder API.
 *
 */
#include "portab.h"
#include "ftmcp100.h"
#include "Mp4Venc.h"
#include "encoder.h"
#include "motion.h"
//#include "mem_align.h"

// added for debugging purpose
#ifdef DUMP_RECONSTRUCTED_RESULT
  FILE *reconstructed_result_file;
#endif
#ifdef DUMP_ME_RESULT
  FILE *me_result_file;
#endif
#ifdef DUMP_PMV_RESULT
  FILE *pmv_result_file;
#endif

unsigned int pred_value_virt_sz=0;

void *Init_FTMCP100(FMP4_ENC_PARAM * ptParam)
{
  // create the Codec object
#if 1//ivan
  FTMCP100_CODEC *pCodec=(FTMCP100_CODEC *) kmalloc(sizeof(FTMCP100_CODEC),GFP_ATOMIC);
#else
  FTMCP100_CODEC *pCodec=(FTMCP100_CODEC *) Faraday_malloc(sizeof(FTMCP100_CODEC),CACHE_LINE);
#endif

  volatile MP4_t * ptMP4 = (MP4_t *)(((uint32_t)ptParam->pu32BaseAddr)  + MP4_OFFSET);  
  
  uint32_t v;
  
  pCodec->pCoreBaseAddr=ptParam->pu32BaseAddr;
  
  // set the coprocessor clock, 0 => same as CPU clock
  SET_CKR(CKR_RATIO)
  SET_QAR(0)
  SET_VLDCTL(1<<5) //stop autobuffer in case previous firmware program did not terminate normally
  SET_MEIADDR(0)
  SET_CMDADDR(0)
  SET_MECADDR(0)
  SET_MCCADDR(0)
  SET_ACDCPAR(0)
  SET_BADR(0)
  SET_MCIADDR(0)
  SET_VOADR(RUN_LEVEL)
  // To set the bit 23~20 of VOP0 register to zero at hardware member's request
  //READ_VOP0(v)
  //SET_VOP0(v&0x0fffff)
  
  // we put the rate control related parameters here for reference...
  // we did not export these encoding setting to API...
  pCodec->RC_AVERAGE_PERIOD = 100;
  pCodec->DELAY_FACTOR = 16;
  pCodec->ARG_RC_BUFFER=100;

	
  pCodec->ME_command_queue0=(uint32_t *) (ME_COMMAND_QUEUE_ADDR + pCodec->pCoreBaseAddr);
  pCodec->DMA_COMMAND_local=(uint32_t *) (DMA_COMMAND_LOCAL_ADDR + pCodec->pCoreBaseAddr);
  
  pCodec->pfnDmaMalloc=(void *)ptParam->pfnDmaMalloc;
  pCodec->pfnDmaFree=(void *)ptParam->pfnDmaFree;
  
  if(ptParam->p16ACDC) {
    pCodec->pred_value_virt = NULL;
    pCodec->pred_value_phy=ptParam->p16ACDC;
  }
  else {
#if 1 //ivan
    pred_value_virt_sz=((ptParam->u32FrameWidth+15)/16)*64;
    pCodec->pred_value_virt = consistent_alloc(GFP_ATOMIC,pred_value_virt_sz,&pCodec->pred_value_phy);
#else
    pCodec->pred_value_virt = (int16_t *)(*(DMA_MALLOC_PTR)pCodec->pfnDmaMalloc)(((ptParam->u32FrameWidth+15)/16)*64, 16, CACHE_LINE,&(pCodec->pred_value_phy));
#endif
  }
  
  #ifdef CORE_VERSION_1 
#if 1 //ivan
    DMA_COMMAND_system_virt_sz=44*sizeof(uint32_t);
    pCodec->DMA_COMMAND_system_virt=consistent_alloc(GFP_ATOMIC,DMA_COMMAND_system_virt_sz,&(pCodec->DMA_COMMAND_system_phy));
#else
    pCodec->DMA_COMMAND_system_virt=(uint32_t *)(*(DMA_MALLOC_PTR)pCodec->pfnDmaMalloc)(44*sizeof(uint32_t),16,CACHE_LINE,&(pCodec->DMA_COMMAND_system_phy));
#endif
  #endif
  return (void *)pCodec;
}

void *FMpeg4EncCreate(FMP4_ENC_PARAM * ptParam)
{
  FTMCP100_CODEC *pCodec;
  volatile MDMA *pmdma;
  void *pEnc;
  
  pCodec=(FTMCP100_CODEC *)Init_FTMCP100(ptParam);
  
  pmdma = MDMA1;
	
  // for debugging purpose
  #ifdef DUMP_RECONSTRUCTED_RESULT
    reconstructed_result_file = fopen("reconstructed_result_fpga.yuv","wb");
  #endif
  #ifdef DUMP_ME_RESULT
    me_result_file = fopen("me_result_fpga.dat","w");
  #endif
  #ifdef DUMP_PMV_RESULT
    pmv_result_file = fopen("pmv_result_fpga.dat","w");
  #endif
	
  pmdma->Status = 1;
  
  #ifdef FPGA_PLATFORM
    FA526_CleanInvalidateDCacheAll();
    FA526_DrainWriteBuffer();
  #endif

  pEnc = encoder_create(ptParam,pCodec);
  if(pEnc!=NULL)
    {
      // attach our FTMCP100 Codec object to encoder object
      ((Encoder *)pEnc)->pCodec=pCodec;
      ((Encoder *)pEnc)->mEncParam=*ptParam;
      ((Encoder *)pEnc)->reference->image.y = ptParam->pu8YFrameBaseAddr;
      ((Encoder *)pEnc)->reference->image.u = ptParam->pu8UFrameBaseAddr;
      ((Encoder *)pEnc)->reference->image.v = ptParam->pu8VFrameBaseAddr;
      return pEnc;
	}  
  return NULL;
}

void FMpeg4EncSetYUVAddr(void *enc_handle,unsigned char *yaddr,unsigned char *uaddr,unsigned char *vaddr)
{
  ((Encoder *)enc_handle)->mEncParam.pu8YFrameBaseAddr=yaddr;
  ((Encoder *)enc_handle)->mEncParam.pu8UFrameBaseAddr=uaddr;
  ((Encoder *)enc_handle)->mEncParam.pu8VFrameBaseAddr=vaddr;  
  
  ((Encoder *)enc_handle)->reference->image.y = yaddr;
  ((Encoder *)enc_handle)->reference->image.u = uaddr;
  ((Encoder *)enc_handle)->reference->image.v = vaddr;
}

int FMpeg4EncOneFrame(void *enc_handle,int *key_frame)
{
  int xerr,vld;
  Faraday_ENC_FRAME xframe;
  Encoder *enc=(Encoder *)enc_handle;
  FTMCP100_CODEC *pCodec=(FTMCP100_CODEC *)enc->pCodec;
  int flush_size;  
  DECLARE_MP4_PTR
  
  SET_ASADR((uint32_t) (enc->mEncParam.pu8BitstreamAddr) | 1)
  SET_VOADR(RUN_LEVEL)
  SET_VLDCTL(1<<4 |1<<6)  // enable auto-buffering and swap endian
	
  xframe.bitstream = enc->mEncParam.pu8BitstreamAddr;	
  xframe.length = -1; 	// this is written by the routine
  xframe.colorspace =Faraday_CSP_YV12;	// defined in <faraday.h>
  xframe.intra = -1; // let the codec decide between I-frame (1) and P-frame (0)	
  xframe.quant = ((Encoder *)enc_handle)->mEncParam.u32Quant;	// is quant != 0, use a fixed quant (and ignore bitrate)

  xframe.motion = PMV_EARLYSTOP16 | PMV_HALFPELREFINE16;
  xframe.general = Faraday_HALFPEL | (((Encoder *)enc_handle)->mEncParam.bH263Quant ? Faraday_H263QUANT:Faraday_MPEGQUANT);
  xframe.quant_intra_matrix = xframe.quant_inter_matrix = NULL;
  xerr = encoder_encode((Encoder *) enc_handle, &xframe);
	
  // Because during testing the real chip FIE8100, we found there is
  // difference between real chip (FIE8100) and FPGA target for autobuffer mechanism. That is,
  // whenever we enable the autobuffer mechanism, the bitstream buffer offset pointer can be
  // reset to zero under FPAG target. But in real chip (FIE8100), because of gated-clock,the
  // bitstream buffer offset pointer can not be reset to zero. So we figure out the following
  // code to fix such problem.
  READ_BALR(flush_size);
  flush_size = 256 - flush_size;
  flush_size >>= 1;
  SET_BADR(0)							//	residue half-words in local memory
  for (; flush_size > 0; flush_size--) {
    SET_BALR(16)
  }
		
  READ_VLDSTS(vld);
  for (;;)
    {
	  READ_VLDSTS(vld);
      if ((vld & 0x400) != 0)
        break;
    }
  SET_VLDCTL(1<<5)					//	stop autobuffer
  SET_VOADR(RUN_LEVEL)
  
  *key_frame = xframe.intra;	
  enc->iBitstreamSize=xframe.length;
	
  return (xerr==Faraday_ERR_OK)?1:0;
}

unsigned int FMpeg4EncGetBitsLength(void *enc_handle)
{
  return ((Encoder *)enc_handle)->iBitstreamSize;
}

MACROBLOCK_INFO *FMpeg4EncGetMBInfo(void *enc_handle)
{
  return (MACROBLOCK_INFO *) ((Encoder *)enc_handle)->current1->mbs;
}

int FMpeg4EncDestroy(void *enc_handle)
{
  int retval;
  Encoder *pEnc=(Encoder *) enc_handle;

#if 1 //ivan
    if(pEnc->pCodec->pred_value_virt)
        consistent_free(pEnc->pCodec->pred_value_virt,pred_value_virt_sz,pEnc->pCodec->pred_value_phy);
    #ifdef CORE_VERSION_1 
    if(pEnc->pCodec->DMA_COMMAND_system_virt)
        consistent_free(pEnc->pCodec->DMA_COMMAND_system_virt,DMA_COMMAND_system_virt_sz,pEnc->pCodec->DMA_COMMAND_system_phy);
    #endif
#else
  if(pEnc->pCodec->pred_value_virt)
    (*(DMA_FREE_PTR)pEnc->pCodec->pfnDmaFree)(pEnc->pCodec->pred_value_virt, pEnc->pCodec->pred_value_phy);
	
  #ifdef CORE_VERSION_1 
    (*(DMA_FREE_PTR)pEnc->pCodec->pfnDmaFree)(pEnc->pCodec->DMA_COMMAND_system_virt,pEnc->pCodec->DMA_COMMAND_system_phy);
  #endif
#endif

  // free Codec object
#if 1
  kfree(pEnc->pCodec);
#else
  Faraday_free(pEnc->pCodec);
#endif

  retval=encoder_destroy(pEnc);

  #ifdef DUMP_RECONSTRUCTED_RESULT
    fclose(reconstructed_result_file);
  #endif
    
  #ifdef DUMP_ME_RESULT
    fclose(me_result_file);
  #endif
    
  #ifdef DUMP_PMV_RESULT
    fclose(pmv_result_file);
  #endif
	
  return (retval==Faraday_ERR_OK)?1:0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91久久精品一区二区| 亚洲国产精品一区二区久久 | 麻豆精品在线看| 亚洲乱码国产乱码精品精可以看| 日韩午夜三级在线| 欧美无砖砖区免费| 欧美色倩网站大全免费| 欧美久久久久久蜜桃| 欧美老肥妇做.爰bbww视频| 欧美高清一级片在线| 欧美一卡2卡三卡4卡5免费| 欧美一区二区播放| 欧美tk丨vk视频| 欧美激情综合五月色丁香小说| 久久久久久久久久看片| 亚洲国产精品高清| 日韩理论电影院| 亚洲大片免费看| 亚洲视频综合在线| 日本少妇一区二区| 精品一区二区三区免费视频| 国产乱人伦精品一区二区在线观看 | 久久爱www久久做| 亚洲精品久久久蜜桃| 视频一区欧美精品| 国产经典欧美精品| 91亚洲精品一区二区乱码| 欧美日本在线播放| www国产精品av| 日韩理论电影院| 奇米精品一区二区三区在线观看 | 国产精品婷婷午夜在线观看| 亚洲人妖av一区二区| 三级亚洲高清视频| 不卡的av在线播放| 欧美一区二区三区精品| 久久精品欧美一区二区三区麻豆| 国产日产欧美精品一区二区三区| 一区二区激情小说| 国内精品不卡在线| 欧美日韩亚洲综合一区二区三区 | 丁香六月久久综合狠狠色| 色哟哟国产精品| 精品久久久三级丝袜| 亚洲蜜臀av乱码久久精品蜜桃| 蜜臀av亚洲一区中文字幕| 成人av电影免费在线播放| 日韩欧美一级精品久久| 亚洲国产成人午夜在线一区| 日韩av电影免费观看高清完整版 | 欧美高清dvd| 久久奇米777| 日韩av不卡一区二区| 色婷婷亚洲综合| 欧美精品一区视频| 日本在线不卡一区| 欧美这里有精品| 亚洲欧美另类久久久精品| 国产精华液一区二区三区| 日韩视频不卡中文| 午夜精品成人在线视频| 91看片淫黄大片一级| 日本一区免费视频| 国产一区二区福利视频| 91精品久久久久久蜜臀| 亚洲成人自拍偷拍| 欧美亚洲尤物久久| 亚洲男人天堂av| 91免费看片在线观看| 国产精品欧美一区二区三区| 免费成人深夜小野草| 精品国产乱码久久久久久夜甘婷婷| 亚洲激情图片qvod| 在线日韩av片| 亚洲国产成人高清精品| 欧美午夜精品电影| 亚洲成av人片在线观看无码| 在线观看亚洲专区| 亚洲一区在线视频观看| 欧美日韩视频不卡| 日本美女视频一区二区| 日韩精品一区二区三区视频在线观看| 午夜精品久久久久久久99樱桃| 欧美久久久久久蜜桃| 久久成人羞羞网站| 久久久久99精品一区| 成人激情小说网站| 亚洲欧美日韩中文字幕一区二区三区 | 精品乱人伦一区二区三区| 日韩国产成人精品| 欧美成人一区二区三区| 老司机一区二区| 久久久久9999亚洲精品| 成人免费毛片app| 亚洲精品欧美激情| 欧美精品乱码久久久久久| 久久精品国产第一区二区三区| 91精品国产色综合久久不卡蜜臀 | 国产伦精一区二区三区| 国产午夜精品一区二区三区视频 | 蜜桃精品在线观看| 日韩欧美一区二区三区在线| 激情六月婷婷久久| 国产欧美一区视频| 国产乱码精品1区2区3区| 国产精品灌醉下药二区| 色综合久久九月婷婷色综合| 午夜视频在线观看一区二区 | 国产精品影视在线观看| 国产精品久久久久aaaa| 欧美亚洲另类激情小说| 国产剧情一区二区三区| 一个色综合网站| 精品国产一区二区亚洲人成毛片| www.欧美色图| 亚洲高清视频在线| 国产精品免费看片| 日韩一区二区高清| 99国产一区二区三精品乱码| 日韩高清欧美激情| 《视频一区视频二区| 在线看一区二区| 国产麻豆精品视频| 午夜精品一区二区三区三上悠亚| 久久综合久久久久88| 一本大道久久a久久精品综合| 日本不卡中文字幕| 亚洲免费观看高清完整版在线观看熊| 欧美一区二区久久久| 一本大道综合伊人精品热热| 国产成人自拍网| 琪琪一区二区三区| 亚洲综合一区在线| 中文字幕中文乱码欧美一区二区 | 粉嫩绯色av一区二区在线观看| 亚洲成av人影院在线观看网| 日本一区二区三区国色天香| 日韩精品在线网站| 日韩精品在线看片z| 欧美日产在线观看| 欧美人伦禁忌dvd放荡欲情| 99久久国产免费看| www.日韩在线| 99久久久免费精品国产一区二区| 国产成人aaa| 国产成人精品影视| 福利一区二区在线| 国产不卡视频在线播放| 国产精品夜夜嗨| 国产精品1区2区3区在线观看| 精品一区二区三区在线播放| 久久精品国产秦先生| 美国十次了思思久久精品导航| 日日夜夜免费精品视频| 日产国产欧美视频一区精品| 麻豆久久久久久| 久久精品国产一区二区三| 韩国女主播一区二区三区| 日韩高清电影一区| 日本视频免费一区| 国内精品国产三级国产a久久| 国产麻豆日韩欧美久久| 国产成人在线看| 99国产精品久久久久久久久久久| 成人黄色软件下载| 欧美无乱码久久久免费午夜一区| 欧美视频一区二区| 精品久久久久99| 久久看人人爽人人| 国产精品久久久久久久久久久免费看 | 欧美三级电影在线看| 欧美日韩卡一卡二| 欧美一级生活片| 久久久欧美精品sm网站| 国产精品乱码一区二区三区软件| 中文字幕日韩av资源站| 有坂深雪av一区二区精品| 亚洲自拍偷拍图区| 国产在线视频一区二区| 成人av网站免费观看| 91啪亚洲精品| 欧洲一区二区三区在线| 欧美tickle裸体挠脚心vk| 久久久久久久综合色一本| 国产精品美女一区二区三区| 一区二区三区影院| 蜜桃视频一区二区三区| 成人精品视频一区二区三区尤物| 色综合久久久久网| 欧美大片日本大片免费观看| 亚洲国产成人自拍| 亚洲福利视频三区| 国产一区欧美一区| 99久久精品一区| 在线观看日韩国产| 欧美精品一区二区三区久久久| 国产欧美日韩综合精品一区二区| 一区二区三区.www| 国产99久久久国产精品潘金| 91伊人久久大香线蕉|