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

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

?? passreg.cpp

?? mpeg4編解碼器
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/******************************************************** * Some code. Copyright (C) 2003 by Pascal Massimino.   * * All Rights Reserved.      (http://skal.planet-d.net) * * For Educational/Academic use ONLY. See 'LICENSE.TXT'.* ********************************************************//* * two-pass log file regularizer * *********************************************************//* *   This program can be used to generate, from a 1rst-pass *   log file, a "roadmap" for the final encoding (2nd-pass). *  *   Usually, two-pass encoding amounts to the following three steps: *  *   a)  'tmp4 input.ppm -pass 1 -passfile pass1.log -q 2' *  *   This will generate a log file 'pass1.log' during the 1rst pass. *   The input source (input.ppm) is analyzed only, using a fixed  *   quantizer (Note: no bitstream is generated). *  *   b) 'passreg pass1.log -o pass2.log -tp 50 -v' *  *   This will generate a road map file 'pass2.log' that aims at *   reducing the original size by 50%. Various other options are *   available for 'passreg'. For instance: '-ts' to specify a *   target size, '-la'/'-ha/ for asymmetric bit distribution, etc... *  *   c) tmp4 input.ppm -pass 2 -passfile pass2.log -o output.mp4 -trellis -4v 60 *  *   This is the final encoding, using 'pass2.log' to drive the *   quality and control the size of the bitstream..  *   Any additional encoding option can be used (trellis, ...): *   they needn't be exactly the same than the first pass. *  *  *   Note: all of these are rather experimental, and you're encouraged *   to play with options/code, since it's all an external application *   from the core codec point of view. *  *  ********************************************************/#include <stdio.h>#include <math.h>#include <stdlib.h>#include <string.h>#include <assert.h>#ifdef _WINDOWS#include <io.h>#include <fcntl.h>#endifstruct PASS_PARAM{  struct PASS_FRAME {    int Pic_Type;    float Q, FCode, mMV, dMV;    int Bytes, Txt_Bytes, MV_Bytes;    int Avrg;    float Avrg_mMV, Avrg_dMV;    int New_Bytes, New_Txt_Bytes;    void Accumulate(int nMin, int nMax, const PASS_FRAME Frames[]);  };  struct PASS_SCENE {    int Start, Len;    int Bytes;    float Q_Avrg;  };  const char *In_File, *Out_File;  int Verbose;  int Target_Size;  float Target_Percent;  float FPS, Bit_Rate;  int Hi_Amp_Percent;  int Low_Amp_Percent;  int Min_Frame, Max_Frame, Nb_Frames;  int All_Frames, All_Key_Frames;  int All_Bytes, All_Txt_Bytes, All_MV_Bytes;  int Win_Size;  int Log_Type;   // 0: MPEG4, 1:H264  int Pic_W, Pic_H, Nb_MBs;  int Pic_Min_Sizes[3];  int KBoost_Percent;  int Reg_Method;       // 0: assymetric scale    1: use average  2: scene activity  float Act_Limit;  PASS_FRAME *Frames;  PASS_SCENE *Scenes;  void Reset();   // default values  void Cleanup();  void Compute_Windowed_Average();  void Regularize_Frames();  void Setup_New_Quantizers();  void Parse_In_File();  void Write_Out_File();  void Help( char **argv, const char *S=0 );  void Missing( const char *S );  int Parse_Int_Value(const int argc, const char * const *argv, int &k,                      const int Min=-0x7fffff, const int Max=0x7ffffff);  float Parse_Float_Value(const int argc, const char * const *argv, int &k,                          const float Min=-1.e30f, const float Max=1.e30f);  void Parse_Options( int argc, char **argv );  int Process(int argc, char *argv[]);   // main entry call};#define ERROR for( ; 1; throw this )//////////////////////////////////////////////////////////void PASS_PARAM::Reset(){  Out_File        = 0;  In_File         = 0;  Verbose         = 1;  Target_Size     = 0;  Target_Percent  = 0.;  FPS             = 25.f;  Bit_Rate        = 0;  Hi_Amp_Percent  = 30;  Low_Amp_Percent = 10;  Min_Frame       = 0;  Max_Frame       =-1;  Nb_Frames       = 0;  Win_Size        = 20;  Log_Type        =-1;  KBoost_Percent  = 5;  Reg_Method      = 0;  Act_Limit       = 0.5f;  Frames          = 0;  Scenes          = 0;}void PASS_PARAM::Cleanup(){  if (Frames) free(Frames);  if (Scenes) free(Scenes);  Reset();}//////////////////////////////////////////////////////////// The main workvoid PASS_PARAM::PASS_FRAME::Accumulate(int nMin, int nMax, const PASS_FRAME Frames[]){  Bytes = 0;  mMV = 0.;  dMV = 0.;  for(int n=nMin; n<nMax; ++n)  {    Bytes += Frames[n].Bytes;    mMV   += Frames[n].mMV;    dMV   += Frames[n].dMV;  }}void PASS_PARAM::Compute_Windowed_Average(){  int n, nMin, nMax;  PASS_FRAME Avrg;  n = Min_Frame;  for(nMin=n; nMin>=0 && nMin>=n-Win_Size; --nMin)    if (Frames[nMin].Pic_Type==0)      break;  for(nMax=n+1; nMax<=Max_Frame && nMax<=n+Win_Size; ++nMax)    if (Frames[nMax].Pic_Type==0)      break;  Avrg.Accumulate(nMin, nMax, Frames);  while(1)  {    const int Nb_Samples = nMax - nMin;    Frames[n].Avrg     = Avrg.Bytes / Nb_Samples;    Frames[n].Avrg_mMV = Avrg.mMV   / Nb_Samples;    Frames[n].Avrg_dMV = Avrg.dMV   / Nb_Samples;//    printf( "%d %d %d %d %d\n", n, nMin, nMax, Frames[n].Bytes, Frames[n].Avrg );    if (n==Max_Frame) break;    if (n-Win_Size==nMin) {      Avrg.Bytes -= Frames[nMin].Bytes;      Avrg.mMV   -= Frames[nMin].mMV;      Avrg.dMV   -= Frames[nMin].dMV;      nMin++;    }    n++;    if (n+Win_Size==nMax)    {      if (nMax<=Max_Frame && Frames[nMax].Pic_Type!=0) {        Avrg.Bytes += Frames[nMax].Bytes;        Avrg.mMV   += Frames[nMax].mMV;        Avrg.dMV   += Frames[nMax].dMV;        nMax++;      }    }    else if (n==nMax) {      nMin = nMax;      for(nMax=nMax+1; nMax<=Max_Frame && nMax<=n+Win_Size; ++nMax)        if (Frames[nMax].Pic_Type==0)          break;      Avrg.Accumulate(nMin, nMax, Frames);    }      }}void PASS_PARAM::Regularize_Frames(){  int n;  int Locked_Size = 0, Rest_Size = 0;  float Scale = Target_Percent/100.f;  for(n=Min_Frame; n<=Max_Frame; ++n)  {    const int Type = Frames[n].Pic_Type;    double s;    if (Type==0) {      s = 1. + KBoost_Percent/100.;    }    else {      if (Reg_Method==0) {        const int Delta = Frames[n].Bytes - Frames[n].Avrg;        if (Delta>=0) s = 1. + Hi_Amp_Percent/100.;        else          s = 1. + Low_Amp_Percent/100.;      }      else if (Reg_Method==1) {        s = 1.;      }      else {        double Activity;        double mMV = Frames[n].Avrg_mMV + .01;        double dMV = Frames[n].Avrg_dMV + .01;        Activity = log(mMV) - Act_Limit*log(dMV);        if (Activity>0.)        {          s = 1. + Activity*Low_Amp_Percent/100.;        }        else {//          Activity = 1. - (Act_Limit*dMV)/mMV;          s = 1. - Activity*Hi_Amp_Percent/100.;        }        if (Verbose>2)          printf( "%d %f %f %f %f %f %f\n", n, Activity, (float)s,            Frames[n].Avrg_mMV, Frames[n].mMV,            Frames[n].Avrg_dMV, Frames[n].dMV );      }    }    int New_Bytes = (Type==0) ? Frames[n].Bytes : Frames[n].Avrg;    New_Bytes = (int)( s*Scale * New_Bytes );    if (New_Bytes<Pic_Min_Sizes[Type])    {      New_Bytes = Pic_Min_Sizes[Type];      Frames[n].New_Bytes = New_Bytes;      Locked_Size += New_Bytes;    }    else {      Frames[n].New_Bytes = -New_Bytes;   // negative value indicates "TODO later"      Rest_Size += New_Bytes;    }  }  Scale = 1.f * (Target_Size - Locked_Size) / Rest_Size;  Locked_Size = 0;  for(n=Min_Frame; n<=Max_Frame; ++n)  {    if (Frames[n].New_Bytes<0)      Frames[n].New_Bytes = (int)( -Frames[n].New_Bytes*Scale );    Frames[n].New_Txt_Bytes = (int)( Frames[n].Txt_Bytes * 1.*Frames[n].New_Bytes / Frames[n].Bytes );    Locked_Size += Frames[n].New_Bytes;  }  if (Verbose>0) {    printf( "Final size:     %d bytes  [underflow:%.4f%%]\n", Locked_Size, 100.f*Locked_Size/Target_Size-100.f );    printf( "Final Bitrate:  %.2f kbps\n", FPS*Locked_Size*8.f/1000.f / Nb_Frames );    printf( "\n" );  }}void PASS_PARAM::Setup_New_Quantizers(){  int n;  for(n=Min_Frame; n<=Max_Frame; ++n)  {    float New_Q = 0.;    double Amp = 1. * Frames[n].Bytes / Frames[n].New_Bytes;    if (Log_Type==0) {      New_Q = (float)( Frames[n].Q * Amp );      New_Q = (New_Q<1.1f) ? 1.1f : (New_Q>31.5f) ? 31.5f : New_Q;    }    else {      New_Q = (float)( Frames[n].Q * ( 1.0 + 0.112*log( Amp ) ) );      New_Q = (New_Q<0.1f) ? 0.1f : (New_Q>51.0f) ? 51.0f : New_Q;    }    Frames[n].Q = New_Q;  }}//////////////////////////////////////////////////////////// Read in-filevoid PASS_PARAM::Parse_In_File(){  int i, n, Nb, s;  PASS_FRAME F = {0};  PASS_SCENE *Scene;  FILE *f;  char *Mem, *Start;  f = In_File ? fopen(In_File, "r") : stdin;  if (f==0) ERROR fprintf( stderr, "Can't open in-file %s\n", In_File );  fseek(f, 0, SEEK_END);  const int Size = (int)ftell(f);  fseek(f, 0, SEEK_SET);    Mem = (char*)malloc(Size+1);  if (Mem==0) ERROR fprintf( stderr, "Malloc error for reading file (size=%d)\n", Size+1);  if (fread(Mem, Size, 1, f)!=1) {    free(Mem);    ERROR fprintf( stderr, "Error reading in-file!\n" );  }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品第13页| 国产成人精品影视| 成人性生交大合| 欧美日韩久久久一区| 国产欧美1区2区3区| 日本美女视频一区二区| 99精品国产热久久91蜜凸| 欧美精品一区二区三区在线播放 | 久久综合视频网| 亚洲成精国产精品女| 东方欧美亚洲色图在线| 日韩欧美一二三| 亚洲午夜精品在线| 91亚洲午夜精品久久久久久| 国产色爱av资源综合区| 久久精品国产免费| 91精品国产黑色紧身裤美女| 亚洲欧美日韩国产中文在线| 粉嫩av亚洲一区二区图片| 日韩欧美国产一区二区在线播放| 亚洲6080在线| 欧美视频在线不卡| 亚洲一区二区三区视频在线| 一本久久精品一区二区| 中文字幕色av一区二区三区| 岛国精品一区二区| 国产欧美日韩视频一区二区| 国产一区二区精品久久99| 日韩精品一区二区在线| 蜜臀va亚洲va欧美va天堂 | 国产一区二区视频在线| 欧美va日韩va| 精品午夜一区二区三区在线观看| 日韩视频永久免费| 激情综合一区二区三区| 久久嫩草精品久久久久| 成人性视频免费网站| 国产精品对白交换视频 | 一二三四区精品视频| 色成年激情久久综合| 亚洲一级在线观看| 5858s免费视频成人| 另类小说一区二区三区| 精品国内片67194| 国产suv精品一区二区883| 最新不卡av在线| 色婷婷激情综合| 日本不卡视频在线观看| 久久毛片高清国产| 91色在线porny| 亚洲国产va精品久久久不卡综合| 欧美一区二区三区日韩| 国产精品综合一区二区三区| 国产精品网站导航| 欧美日韩视频在线一区二区| 裸体在线国模精品偷拍| 欧美激情艳妇裸体舞| 色婷婷国产精品综合在线观看| 五月婷婷久久综合| 久久久综合网站| 在线影院国内精品| 久久不见久久见免费视频7| 日本一区二区综合亚洲| 欧美日韩视频专区在线播放| 精品一区二区三区在线观看国产 | 久久欧美一区二区| 99在线精品免费| 日韩国产精品91| 国产情人综合久久777777| 欧美色精品在线视频| 国产一区二区三区不卡在线观看| 亚洲女与黑人做爰| 精品久久久影院| 在线视频中文字幕一区二区| 国产资源在线一区| 亚洲高清三级视频| 中文字幕av一区二区三区| 欧美精品自拍偷拍动漫精品| 成人精品视频一区二区三区尤物| 亚洲成a人v欧美综合天堂下载 | 成人一区二区三区中文字幕| 亚洲aaa精品| 中文字幕日韩一区| 久久综合久久鬼色中文字| 欧美视频一区在线| 成人涩涩免费视频| 黄色资源网久久资源365| 一区二区在线看| 国产欧美综合色| 日韩美女一区二区三区四区| 91久久精品一区二区| 大尺度一区二区| 久久精品国产**网站演员| 亚洲国产wwwccc36天堂| 亚洲视频中文字幕| 中文字幕成人av| 26uuu久久综合| 欧美一区二区三区播放老司机 | 成人性视频网站| 国产夫妻精品视频| 九九视频精品免费| 奇米四色…亚洲| 天天操天天干天天综合网| 一区二区不卡在线播放| 1024成人网| 欧美韩国日本综合| 国产精品麻豆久久久| 国产精品私房写真福利视频| 久久综合九色综合欧美98| 欧美xxxx在线观看| 日韩欧美一二三区| 欧美成人精品二区三区99精品| 9191国产精品| 91精品国产色综合久久不卡电影 | 国产一区二区在线观看免费| 精品写真视频在线观看| 精品无码三级在线观看视频| 另类小说视频一区二区| 美国十次综合导航| 国产一区二区在线观看视频| 国产麻豆精品theporn| 国产精品一区专区| bt欧美亚洲午夜电影天堂| 成人av资源在线观看| 粉嫩av一区二区三区| 99精品欧美一区二区蜜桃免费 | 香港成人在线视频| 人人超碰91尤物精品国产| 蜜臀av一区二区在线免费观看| 九九**精品视频免费播放| 国产一区999| 99在线精品免费| 欧美视频在线一区| 欧美一区二视频| 久久嫩草精品久久久久| 国产精品热久久久久夜色精品三区| 中文字幕一区二区三区四区不卡| 一区二区视频免费在线观看| 午夜精品123| 国产精品主播直播| 色天天综合久久久久综合片| 欧美久久久久久久久久| 国产香蕉久久精品综合网| 亚洲欧美成人一区二区三区| 视频一区二区国产| 国产不卡在线播放| 欧美日韩久久一区二区| 国产性色一区二区| 亚洲一区日韩精品中文字幕| 蜜臀精品久久久久久蜜臀| aaa国产一区| 91精品国产欧美一区二区成人| 久久久久国产一区二区三区四区| 一区二区三区在线视频观看| 另类人妖一区二区av| 91污在线观看| 精品成人一区二区三区| 一区二区三区美女视频| 国精品**一区二区三区在线蜜桃| av激情综合网| 久久一夜天堂av一区二区三区| 亚洲在线一区二区三区| 国产成a人亚洲| 日韩一二三区视频| 亚洲黄色免费网站| 国产精品456| 日韩欧美一区在线观看| 亚洲激情综合网| 粉嫩在线一区二区三区视频| 欧美一卡二卡三卡| 亚洲精品福利视频网站| 国产福利一区在线| 日韩欧美黄色影院| 亚洲成人免费观看| 色婷婷综合视频在线观看| 久久久久免费观看| 激情综合网激情| 91精品国产aⅴ一区二区| 亚洲自拍偷拍九九九| 不卡在线观看av| 国产精品视频一区二区三区不卡| 精品影院一区二区久久久| 91精品国产黑色紧身裤美女| 亚洲成人第一页| 欧美性色综合网| 亚洲精品高清在线| 一本色道久久加勒比精品| 日韩理论片在线| 99国产精品久久久久久久久久久| 日本一区二区免费在线| 国产精品一区二区不卡| 久久久久99精品国产片| 国产专区综合网| 国产欧美精品一区aⅴ影院| 国内外成人在线视频| 欧美精品一区二区三区高清aⅴ| 精品一区二区在线免费观看| 久久综合一区二区| 国产成人欧美日韩在线电影| 久久久精品中文字幕麻豆发布|