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

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

?? jfdctint.pas

?? 用pascal寫的jpeg codec, 測試過的
?? PAS
字號:
Unit JFDctInt;


{ This file contains a slow-but-accurate integer implementation of the
  forward DCT (Discrete Cosine Transform).

  A 2-D DCT can be done by 1-D DCT on each row followed by 1-D DCT
  on each column.  Direct algorithms are also available, but they are
  much more complex and seem not to be any faster when reduced to code.

  This implementation is based on an algorithm described in
    C. Loeffler, A. Ligtenberg and G. Moschytz, "Practical Fast 1-D DCT
    Algorithms with 11 Multiplications", Proc. Int'l. Conf. on Acoustics,
    Speech, and Signal Processing 1989 (ICASSP '89), pp. 988-991.
  The primary algorithm described there uses 11 multiplies and 29 adds.
  We use their alternate method with 12 multiplies and 32 adds.
  The advantage of this method is that no data path contains more than one
  multiplication; this allows a very simple and accurate implementation in
  scaled fixed-point arithmetic, with a minimal number of shifts. }

{ Original : jfdctint.c ; Copyright (C) 1991-1996, Thomas G. Lane. }

interface

{$I jconfig.inc}

uses
  jmorecfg,
  jinclude,
  jutils,
  jpeglib,
  jdct;		{ Private declarations for DCT subsystem }


{ Perform the forward DCT on one block of samples. }

{GLOBAL}
procedure jpeg_fdct_islow (var data : array of DCTELEM);

implementation

{ This module is specialized to the case DCTSIZE = 8. }

{$ifdef DCTSIZE != 8}
  Sorry, this code only copes with 8x8 DCTs. { deliberate syntax err }
{$endif}


{ The poop on this scaling stuff is as follows:

  Each 1-D DCT step produces outputs which are a factor of sqrt(N)
  larger than the true DCT outputs.  The final outputs are therefore
  a factor of N larger than desired; since N=8 this can be cured by
  a simple right shift at the end of the algorithm.  The advantage of
  this arrangement is that we save two multiplications per 1-D DCT,
  because the y0 and y4 outputs need not be divided by sqrt(N).
  In the IJG code, this factor of 8 is removed by the quantization step
  (in jcdctmgr.c), NOT in this module.

  We have to do addition and subtraction of the integer inputs, which
  is no problem, and multiplication by fractional constants, which is
  a problem to do in integer arithmetic.  We multiply all the constants
  by CONST_SCALE and convert them to integer constants (thus retaining
  CONST_BITS bits of precision in the constants).  After doing a
  multiplication we have to divide the product by CONST_SCALE, with proper
  rounding, to produce the correct output.  This division can be done
  cheaply as a right shift of CONST_BITS bits.  We postpone shifting
  as long as possible so that partial sums can be added together with
  full fractional precision.

  The outputs of the first pass are scaled up by PASS1_BITS bits so that
  they are represented to better-than-integral precision.  These outputs
  require BITS_IN_JSAMPLE + PASS1_BITS + 3 bits; this fits in a 16-bit word
  with the recommended scaling.  (For 12-bit sample data, the intermediate
  array is INT32 anyway.)

  To avoid overflow of the 32-bit intermediate results in pass 2, we must
  have BITS_IN_JSAMPLE + CONST_BITS + PASS1_BITS <= 26.  Error analysis
  shows that the values given below are the most effective. }

{$ifdef BITS_IN_JSAMPLE_IS_8}
const
  CONST_BITS = 13;
  PASS1_BITS = 2;
{$else}
const
  CONST_BITS = 13;
  PASS1_BITS = 1;	{ lose a little precision to avoid overflow }
{$endif}

const
  ONE   = INT32(1);
  CONST_SCALE = (ONE shl CONST_BITS);

const
  FIX_0_298631336 = INT32(Round(CONST_SCALE * 0.298631336));  {2446}
  FIX_0_390180644 = INT32(Round(CONST_SCALE * 0.390180644));  {3196}
  FIX_0_541196100 = INT32(Round(CONST_SCALE * 0.541196100));  {4433}
  FIX_0_765366865 = INT32(Round(CONST_SCALE * 0.765366865));  {6270}
  FIX_0_899976223 = INT32(Round(CONST_SCALE * 0.899976223));  {7373}
  FIX_1_175875602 = INT32(Round(CONST_SCALE * 1.175875602));  {9633}
  FIX_1_501321110 = INT32(Round(CONST_SCALE * 1.501321110));  {12299}
  FIX_1_847759065 = INT32(Round(CONST_SCALE * 1.847759065));  {15137}
  FIX_1_961570560 = INT32(Round(CONST_SCALE * 1.961570560));  {16069}
  FIX_2_053119869 = INT32(Round(CONST_SCALE * 2.053119869));  {16819}
  FIX_2_562915447 = INT32(Round(CONST_SCALE * 2.562915447));  {20995}
  FIX_3_072711026 = INT32(Round(CONST_SCALE * 3.072711026));  {25172}


{ Multiply an INT32 variable by an INT32 constant to yield an INT32 result.
  For 8-bit samples with the recommended scaling, all the variable
  and constant values involved are no more than 16 bits wide, so a
  16x16->32 bit multiply can be used instead of a full 32x32 multiply.
  For 12-bit samples, a full 32-bit multiplication will be needed. }

{$ifdef BITS_IN_JSAMPLE_IS_8}

   {MULTIPLY16C16(var,const)}
   function Multiply(X, Y: int): INT32;
   begin
     Multiply := int(X) * INT32(Y);
   end;

{$else}
#define MULTIPLY(var,const)  ((var) * (const))
{$endif}

{ Descale and correctly round an INT32 value that's scaled by N bits.
  We assume RIGHT_SHIFT rounds towards minus infinity, so adding
  the fudge factor is correct for either sign of X. }

function DESCALE(x : INT32; n : int) : INT32;
var
  shift_temp : INT32;
begin
{$ifdef RIGHT_SHIFT_IS_UNSIGNED}
  shift_temp := x + (ONE shl (n-1));
  if shift_temp < 0 then
    Descale :=  (shift_temp shr n) or ((not INT32(0)) shl (32-n))
  else
    Descale :=  (shift_temp shr n);
{$else}
  Descale := (x + (ONE shl (n-1)) shr n;
{$endif}
end;


{ Perform the forward DCT on one block of samples. }

{GLOBAL}
procedure jpeg_fdct_islow (var data : array of DCTELEM);
type
  PWorkspace = ^TWorkspace;
  TWorkspace = array [0..DCTSIZE2-1] of DCTELEM;
var
  tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7 : INT32;
  tmp10, tmp11, tmp12, tmp13 : INT32;
  z1, z2, z3, z4, z5 : INT32;
  dataptr : PWorkspace;
  ctr : int;
  {SHIFT_TEMPS}
begin

  { Pass 1: process rows. }
  { Note results are scaled up by sqrt(8) compared to a true DCT; }
  { furthermore, we scale the results by 2**PASS1_BITS. }

  dataptr := PWorkspace(@data);
  for ctr := DCTSIZE-1 downto 0 do
  begin
    tmp0 := dataptr^[0] + dataptr^[7];
    tmp7 := dataptr^[0] - dataptr^[7];
    tmp1 := dataptr^[1] + dataptr^[6];
    tmp6 := dataptr^[1] - dataptr^[6];
    tmp2 := dataptr^[2] + dataptr^[5];
    tmp5 := dataptr^[2] - dataptr^[5];
    tmp3 := dataptr^[3] + dataptr^[4];
    tmp4 := dataptr^[3] - dataptr^[4];

    { Even part per LL&M figure 1 --- note that published figure is faulty;
      rotator "sqrt(2)*c1" should be "sqrt(2)*c6".  }

    tmp10 := tmp0 + tmp3;
    tmp13 := tmp0 - tmp3;
    tmp11 := tmp1 + tmp2;
    tmp12 := tmp1 - tmp2;

    dataptr^[0] := DCTELEM ((tmp10 + tmp11) shl PASS1_BITS);
    dataptr^[4] := DCTELEM ((tmp10 - tmp11) shl PASS1_BITS);

    z1 := MULTIPLY(tmp12 + tmp13, FIX_0_541196100);
    dataptr^[2] := DCTELEM (DESCALE(z1 + MULTIPLY(tmp13, FIX_0_765366865),
				   CONST_BITS-PASS1_BITS));
    dataptr^[6] := DCTELEM (DESCALE(z1 + MULTIPLY(tmp12, - FIX_1_847759065),
				   CONST_BITS-PASS1_BITS));

    { Odd part per figure 8 --- note paper omits factor of sqrt(2).
      cK represents cos(K*pi/16).
      i0..i3 in the paper are tmp4..tmp7 here. }

    z1 := tmp4 + tmp7;
    z2 := tmp5 + tmp6;
    z3 := tmp4 + tmp6;
    z4 := tmp5 + tmp7;
    z5 := MULTIPLY(z3 + z4, FIX_1_175875602); { sqrt(2) * c3 }

    tmp4 := MULTIPLY(tmp4, FIX_0_298631336); { sqrt(2) * (-c1+c3+c5-c7) }
    tmp5 := MULTIPLY(tmp5, FIX_2_053119869); { sqrt(2) * ( c1+c3-c5+c7) }
    tmp6 := MULTIPLY(tmp6, FIX_3_072711026); { sqrt(2) * ( c1+c3+c5-c7) }
    tmp7 := MULTIPLY(tmp7, FIX_1_501321110); { sqrt(2) * ( c1+c3-c5-c7) }
    z1 := MULTIPLY(z1, - FIX_0_899976223); { sqrt(2) * (c7-c3) }
    z2 := MULTIPLY(z2, - FIX_2_562915447); { sqrt(2) * (-c1-c3) }
    z3 := MULTIPLY(z3, - FIX_1_961570560); { sqrt(2) * (-c3-c5) }
    z4 := MULTIPLY(z4, - FIX_0_390180644); { sqrt(2) * (c5-c3) }

    Inc(z3, z5);
    Inc(z4, z5);

    dataptr^[7] := DCTELEM(DESCALE(tmp4 + z1 + z3, CONST_BITS-PASS1_BITS));
    dataptr^[5] := DCTELEM(DESCALE(tmp5 + z2 + z4, CONST_BITS-PASS1_BITS));
    dataptr^[3] := DCTELEM(DESCALE(tmp6 + z2 + z3, CONST_BITS-PASS1_BITS));
    dataptr^[1] := DCTELEM(DESCALE(tmp7 + z1 + z4, CONST_BITS-PASS1_BITS));

    Inc(DCTELEMPTR(dataptr), DCTSIZE);	{ advance pointer to next row }
  end;

  { Pass 2: process columns.
    We remove the PASS1_BITS scaling, but leave the results scaled up
    by an overall factor of 8. }

  dataptr := PWorkspace(@data);
  for ctr := DCTSIZE-1 downto 0 do
  begin
    tmp0 := dataptr^[DCTSIZE*0] + dataptr^[DCTSIZE*7];
    tmp7 := dataptr^[DCTSIZE*0] - dataptr^[DCTSIZE*7];
    tmp1 := dataptr^[DCTSIZE*1] + dataptr^[DCTSIZE*6];
    tmp6 := dataptr^[DCTSIZE*1] - dataptr^[DCTSIZE*6];
    tmp2 := dataptr^[DCTSIZE*2] + dataptr^[DCTSIZE*5];
    tmp5 := dataptr^[DCTSIZE*2] - dataptr^[DCTSIZE*5];
    tmp3 := dataptr^[DCTSIZE*3] + dataptr^[DCTSIZE*4];
    tmp4 := dataptr^[DCTSIZE*3] - dataptr^[DCTSIZE*4];

    { Even part per LL&M figure 1 --- note that published figure is faulty;
      rotator "sqrt(2)*c1" should be "sqrt(2)*c6". }

    tmp10 := tmp0 + tmp3;
    tmp13 := tmp0 - tmp3;
    tmp11 := tmp1 + tmp2;
    tmp12 := tmp1 - tmp2;

    dataptr^[DCTSIZE*0] := DCTELEM (DESCALE(tmp10 + tmp11, PASS1_BITS));
    dataptr^[DCTSIZE*4] := DCTELEM (DESCALE(tmp10 - tmp11, PASS1_BITS));

    z1 := MULTIPLY(tmp12 + tmp13, FIX_0_541196100);
    dataptr^[DCTSIZE*2] := DCTELEM (DESCALE(z1 + MULTIPLY(tmp13, FIX_0_765366865),
					   CONST_BITS+PASS1_BITS));
    dataptr^[DCTSIZE*6] := DCTELEM (DESCALE(z1 + MULTIPLY(tmp12, - FIX_1_847759065),
					   CONST_BITS+PASS1_BITS));

    { Odd part per figure 8 --- note paper omits factor of sqrt(2).
      cK represents cos(K*pi/16).
      i0..i3 in the paper are tmp4..tmp7 here. }
    
    z1 := tmp4 + tmp7;
    z2 := tmp5 + tmp6;
    z3 := tmp4 + tmp6;
    z4 := tmp5 + tmp7;
    z5 := MULTIPLY(z3 + z4, FIX_1_175875602); { sqrt(2) * c3 }

    tmp4 := MULTIPLY(tmp4, FIX_0_298631336); { sqrt(2) * (-c1+c3+c5-c7) }
    tmp5 := MULTIPLY(tmp5, FIX_2_053119869); { sqrt(2) * ( c1+c3-c5+c7) }
    tmp6 := MULTIPLY(tmp6, FIX_3_072711026); { sqrt(2) * ( c1+c3+c5-c7) }
    tmp7 := MULTIPLY(tmp7, FIX_1_501321110); { sqrt(2) * ( c1+c3-c5-c7) }
    z1 := MULTIPLY(z1, - FIX_0_899976223); { sqrt(2) * (c7-c3) }
    z2 := MULTIPLY(z2, - FIX_2_562915447); { sqrt(2) * (-c1-c3) }
    z3 := MULTIPLY(z3, - FIX_1_961570560); { sqrt(2) * (-c3-c5) }
    z4 := MULTIPLY(z4, - FIX_0_390180644); { sqrt(2) * (c5-c3) }

    Inc(z3, z5);
    Inc(z4, z5);

    dataptr^[DCTSIZE*7] := DCTELEM (DESCALE(tmp4 + z1 + z3,
					   CONST_BITS+PASS1_BITS));
    dataptr^[DCTSIZE*5] := DCTELEM (DESCALE(tmp5 + z2 + z4,
					   CONST_BITS+PASS1_BITS));
    dataptr^[DCTSIZE*3] := DCTELEM (DESCALE(tmp6 + z2 + z3,
					   CONST_BITS+PASS1_BITS));
    dataptr^[DCTSIZE*1] := DCTELEM (DESCALE(tmp7 + z1 + z4,
					   CONST_BITS+PASS1_BITS));

    Inc(DCTELEMPTR(dataptr));	{ advance pointer to next column }
  end;
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产成人av| 日韩精品一区二区三区视频播放| 日韩视频免费直播| 麻豆精品一区二区综合av| 欧美一区二区三区啪啪| 青青草97国产精品免费观看无弹窗版 | 国产精品午夜春色av| 国产精品69久久久久水密桃| 国产日韩欧美精品一区| 成人av午夜影院| 日本不卡一区二区三区| 欧美日韩国产综合视频在线观看| 午夜精品久久久久久不卡8050| 欧美一区二区三区视频在线观看| 久久成人av少妇免费| 久久久精品人体av艺术| 91网站黄www| 久久99久国产精品黄毛片色诱| 精品国产精品一区二区夜夜嗨| 成人免费看的视频| 亚洲国产aⅴ天堂久久| 欧美精品一区二区三区视频| 不卡一卡二卡三乱码免费网站| 亚洲夂夂婷婷色拍ww47| 久久久久久久综合| 欧美日韩国产首页| 99久久国产综合色|国产精品| 亚洲动漫第一页| 久久九九久精品国产免费直播| 91传媒视频在线播放| 国产成人99久久亚洲综合精品| 亚洲国产日韩一区二区| 亚洲欧洲一区二区在线播放| 欧美精品九九99久久| 91精品福利视频| 51精品久久久久久久蜜臀| av在线一区二区三区| 国产成人精品www牛牛影视| 日本在线播放一区二区三区| 亚洲三级电影网站| 亚洲欧美一区二区视频| 欧美激情艳妇裸体舞| 欧美国产日韩亚洲一区| 久久先锋影音av鲁色资源 | 国产精品一区免费视频| 蜜乳av一区二区| 国产麻豆视频精品| 国产在线视频不卡二| 麻豆91精品视频| 国产福利一区二区三区视频在线 | 8v天堂国产在线一区二区| 欧美色综合网站| 欧美猛男gaygay网站| 欧美久久久久久蜜桃| 欧美一级高清大全免费观看| 欧美一区二区成人| 国产女同互慰高潮91漫画| 婷婷开心激情综合| 老司机精品视频导航| 国产麻豆精品一区二区| 91视频xxxx| 91精品国产91久久综合桃花| 精品福利二区三区| 亚洲日本一区二区| 蜜臀国产一区二区三区在线播放| 国产毛片一区二区| 欧美亚洲国产一区二区三区va| 精品国产一区二区三区久久影院| 久久影院电视剧免费观看| 日韩美女视频一区二区| 奇米影视在线99精品| 色婷婷久久久久swag精品 | 日韩在线一区二区| 国产激情一区二区三区四区| 色94色欧美sute亚洲线路一久 | av电影在线观看一区| 9191国产精品| 一区二区三区av电影| 国产精品18久久久| 69久久99精品久久久久婷婷| 自拍偷拍国产精品| 国产精品一区一区| 欧美高清在线一区| 精品伊人久久久久7777人| 欧美在线影院一区二区| 国产精品视频yy9299一区| 精品在线一区二区三区| 4438成人网| 91视视频在线观看入口直接观看www| 欧美精品tushy高清| 久久久久国色av免费看影院| 91天堂素人约啪| 一区二区三区成人在线视频 | 91精品国产综合久久精品app| 91精品国产综合久久精品图片| 欧美www视频| 亚洲私人黄色宅男| 日韩高清国产一区在线| 蜜桃av一区二区三区| 欧美精品第1页| 在线观看区一区二| 日韩欧美久久久| 国产精品进线69影院| 一区二区三区免费观看| 国产一区二区三区| 欧美伊人久久大香线蕉综合69| 日韩精品一区二区三区四区视频 | 国产成人av一区二区| 国产黑丝在线一区二区三区| 一本久久a久久免费精品不卡| 欧美日韩精品久久久| 亚洲国产精品av| 国内精品写真在线观看| 欧美性极品少妇| 国产精品久久久久久久久快鸭| 亚洲成av人片| 色伊人久久综合中文字幕| 2014亚洲片线观看视频免费| 亚洲一二三区不卡| av中文字幕在线不卡| 久久精品一区四区| 久久99精品一区二区三区三区| 欧美性猛片aaaaaaa做受| 国产精品久久毛片a| 国产精品18久久久久久久网站| 欧美一级片在线| 免费观看在线综合| 欧美va亚洲va在线观看蝴蝶网| 天天色天天爱天天射综合| 欧美妇女性影城| 视频一区中文字幕国产| 欧美日韩一区二区三区视频| 一区二区三区在线看| 在线一区二区三区四区五区| 中文幕一区二区三区久久蜜桃| 国产99精品国产| 1024成人网| 精品奇米国产一区二区三区| 亚洲大片在线观看| 日韩欧美一级片| 福利91精品一区二区三区| 亚洲日韩欧美一区二区在线| 欧美天天综合网| 久久99国产精品久久| 国产精品全国免费观看高清| 成人91在线观看| 日本亚洲视频在线| 国产精品亲子乱子伦xxxx裸| 欧美视频中文一区二区三区在线观看 | 91精品婷婷国产综合久久性色| 国产裸体歌舞团一区二区| 亚洲精品国产a| 国产亚洲欧美激情| 欧美日韩亚洲综合一区 | 国产精品麻豆99久久久久久| 精品污污网站免费看| 成人一区二区三区中文字幕| 亚洲国产成人av网| 亚洲日本va午夜在线影院| 日韩一区二区高清| 欧美日韩色一区| 色综合久久中文综合久久97 | 精品久久五月天| 欧美日本一道本在线视频| 99亚偷拍自图区亚洲| 欧美主播一区二区三区| 国产精品 欧美精品| 精品影视av免费| 国产精品羞羞答答xxdd| 久久激情五月婷婷| 久久精品国产**网站演员| 另类综合日韩欧美亚洲| 天堂va蜜桃一区二区三区| 午夜成人在线视频| 日韩国产在线观看一区| 亚洲一级二级在线| 亚洲777理论| 国内精品第一页| 国产aⅴ精品一区二区三区色成熟| 激情综合色播激情啊| 国产激情一区二区三区四区| 国产一区二区女| 色呦呦国产精品| 91精品国产综合久久久久久久| 555夜色666亚洲国产免| 欧美mv和日韩mv国产网站| 久久久99精品久久| 综合激情成人伊人| 天天av天天翘天天综合网| 免费一区二区视频| 粉嫩av一区二区三区粉嫩| 91蜜桃传媒精品久久久一区二区| 欧美日韩一区二区欧美激情| 精品国产一区久久| 夜夜亚洲天天久久| 高清在线成人网| 日韩一区二区麻豆国产| 中文字幕二三区不卡| 日韩国产一区二| 色视频一区二区|