⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 buffer_misc.~pas

📁 xvid库调用来压缩视频编码实例
💻 ~PAS
字号:
// MP4Cam2AVI - .MP4 to .AVI converter
// Copyright (C) 2004-2007 Oleg Mikheev, graywolf2004@mail.ru
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// Any non-GPL usage of this software or parts of this software is strictly
// forbidden.

unit Buffer_Misc;

interface

uses
  Windows, Math, SysUtils, StrUtils;

{$UNDEF UNICODE}

type
  PBuffer = ^TBuffer;
  TBuffer = array of char;

  TChunk = record
    Data: TBuffer;
    Size: integer;
    WavSize: integer;
    Pref: string[4];
    FrameType: char;
    Flags: integer;
    FB: integer;
  end;
  TLowPassFilter = class
  private
    M: integer;
    NonOdd: byte;
    Gam: real;
    G, b, c: array of real;
    y: array of array[0..2] of real;
    x: array[0..2] of real;
  public
    constructor Create(CutOff, Pwr, SampleRate: integer; Aps: real);
    function Pass(Inp: integer):integer;
  end;
  TSplineFilter = class
    InSamples, InSamplesDone: int64;
    OutSamples, OutSamplesDone: int64;
    InSR, SR: integer;
  private
    y: array[0..2] of real;
    a: array[1..3] of real;
    a1, Ratio: real;
    LFilter: TLowPassFilter;
  public
    constructor Create(InSampleRate, SampleRate: integer);
    procedure Input(x: integer);
    function Output: integer;
  end;
  TReSampleBox = class
    InSampleRate, SamplesRate: integer;
    Channels: integer;
    RFilters: array of TSplineFilter;
  private
    ReSampleRatio: real;
  public
    constructor Create(Chann, InSampleRate, SampleRate: integer);
    function Pass(var InChunk: TChunk): TChunk;
  end;

function DwordToStr(d: integer):string;
function StrToDword(s: string):integer;
function HexNum(c: char):byte;
function DwordReverse(var d: integer):integer;
function WordReverse(var d: smallint):smallint;
procedure HexStringToBuffer(var buf: TBuffer; s: string; StartPos: integer);
function BufferToDwordRev(var buf: TBuffer; index: integer):integer;
function BufferToDword(var buf: TBuffer; index: integer):integer;
function BufferToWordRev(var buf: TBuffer; index: integer):smallint;
function BufferToWord(var buf: TBuffer; index: integer):smallint;
function BufferToByte(var buf: TBuffer; index: integer):byte;
function BufferToString(var buf: TBuffer; index: integer; count: integer):string;
procedure BufferShiftRight(var buf: TBuffer; count: integer);
procedure BufferShiftLeft(var buf: TBuffer; count: integer; RealSize: integer);
procedure BufferRemoveBytes(var buf: TBuffer; StartPoint, EndPoint, RealSize: integer);
procedure BufferWriteBuffer(var bufTo, bufFrom: TBuffer; index: integer; count: integer; indTo: integer);
procedure BufferWriteString(var buf: TBuffer; s: string; index: integer);
procedure BufferWriteDword(var buf: TBuffer; d: integer; index: integer);
procedure BufferWriteWord(var buf: TBuffer; d: smallint; index: integer);
procedure BufferWriteWordRev(var buf: TBuffer; d: smallint; index: integer);
procedure BufferWriteDwordRev(var buf: TBuffer; d: integer; index: integer);
procedure BufferWriteByte(var buf: TBuffer; b: byte; index: integer);
procedure BufferWriteEntireBuffer(var bufTo, bufFrom: TBuffer; indTo: integer);
function BufferSearchString(var buf: TBuffer; str: string; offs: integer): integer;
function BufferSearchStringRev(var buf: TBuffer; str: string; offs: integer): integer;
function BufferSearchDword(var buf: TBuffer; d: integer; offs: integer): integer;
procedure BufferWriteZeroBuffer(var buf: TBuffer; index, count: integer);
procedure ReChannelWavChunk(var Chunk: TChunk; InChannels, Channels: integer);

procedure IMA_ADPCMDecode(srcChunk: TChunk; var dstChunk: TChunk; Channels: integer; ADPCMFrameSize: integer);
procedure MS_ADPCMDecode(srcChunk: TChunk; var dstChunk: TChunk; Channels: integer; ADPCMFrameSize: integer);
procedure QT_ADPCMDecode(srcChunk: TChunk; var dstChunk: TChunk; Channels: integer);

function CmdParamExists(s: string): boolean;
function GetCmdParamVal(name: string): string;

// ADPCM DECODE

const
  IMA_ADPCMStepTable: array[0..88] of integer =
    (7, 8, 9, 10, 11, 12, 13, 14, 16, 17,
     19, 21, 23, 25, 28, 31, 34, 37, 41, 45,
     50, 55, 60, 66, 73, 80, 88, 97, 107, 118,
     130, 143, 157, 173, 190, 209, 230, 253, 279, 307,
     337, 371, 408, 449, 494, 544, 598, 658, 724, 796,
     876, 963, 1060, 1166, 1282, 1411, 1552, 1707, 1878, 2066,
     2272, 2499, 2749, 3024, 3327, 3660, 4026, 4428, 4871, 5358,
     5894, 6484, 7132, 7845, 8630, 9493, 10442, 11487, 12635, 13899,
     15289, 16818, 18500, 20350, 22385, 24623, 27086, 29794, 32767);
  IMA_ADPCMIndexTable: array[0..7] of integer = (-1, -1, -1, -1, 2, 4, 6, 8);

  MS_AdapTable: array[0..15] of integer = (230, 230, 230, 230, 307, 409, 512, 614,
                                           768, 614, 512, 409, 307, 230, 230, 230);
  MS_Coeff1: array[0..6] of integer = (256, 512, 0, 192, 240, 460,  392);
  MS_Coeff2: array[0..6] of integer = (0,  -256, 0, 64,  0,  -208, -232);

var
  CStepIndex, CPredictor, BlockPredictor, MSDelta, Sample1, Sample2, Coeff1, Coeff2 : integer;


implementation

uses
  Main;

constructor TLowPassFilter.Create(CutOff, Pwr, SampleRate: integer; Aps: real);
var dt, fs, ws, wdp, wds, wdc: real;
    De: real;
    i: integer;
    a: array of real;
begin
  dt := 1 / SampleRate;
  De := Aps * Sqrt(2/Aps - 1) / (1 - Aps);
  fs := CutOff;
  ws := fs * 2 * PI;
  wds := 2 * tan(ws * dt / 2) / dt;
  wdp := wds * Power(De / (sqrt(1/sqr(Aps) - 1)), 1/Pwr);
  // 欣廖依盘 C 着彝厶

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -