huangjian_w
32444
|
2007/12/28 18:29:59 |
也许我的网络速度不行,总是传不上来代码。就用ftp传到临时上传区了。 地址:ftp://uploads@uploads.2ccc.com/视频编解码代码.rar 谁的网速快,就代我上传吧(或者版主给改个路径),以便于大家研究。 基本实现了压缩和解压,但是还点问题。需要大家共同来研究, 压缩的视频流,在C:\test.mp4,可用附带解码软件查看,这个压缩仅仅是数据 没有mp4的文件头,如果带上文件头就被通用播放器查看。
里面用到DC-DSP组件,盒子论坛上有,主要用他来实现从摄像头捕获图像,进行压缩,其实也可以用vfw来抓屏,进行压缩。有兴趣的朋友自己试试。 |
guanyueguan
32443
|
2007/12/28 15:45:05 |
就當作教學用吧,畢竟有需要而無時間的人(公司)基本是商業行為,我暫時還不想被應用在商業行為上,所以放棄了開源優化版本。優化版本也只是共享給好友而已,不是掐在手心。 放2個改進的EXE目的也是激發有意向的人動動手,自己去掌握這個過時的技術,不存在吊胃口和顯擺的意思。只是我也是過來人,明白其中的辛苦,現在指個方向,方便後來人。 |
boatboy
32442
|
2007/12/28 14:35:07 |
不是不思考,看了楼主的Blog,发现楼主在屏传上做了相当多的研究,而且也花了相当多的时间,对楼主的兴趣激发出来的能量感到惊讶!不过像我这样没有很多时间花到研究屏传技术的研究上的人很多,而往往在实际中又需要用到这样的东西。其实自己很早以前就写过屏传的程序,当然没有做如此之多的优化,而楼主几次以吊胃口的方式在2ccc上发表屏传大作实在让人看得有点不舒服,我只是认为交流就要坦诚,而不是把程序质量改低了来交流,或许楼主没想来交流,只是来教学吧。我是有一说一,丝毫没有对楼主生意见,毕竟大家的行为都是自由,贡献甚至获取都是自愿的。 |
guanyueguan
32439
|
2007/12/28 9:48:17 |
編程是需要思考的! 如果你不願意思考就不用去思考(沒有誰強迫你),我發布這個主要是針對開發人員,不是為了拼拼湊湊。 |
boatboy
32438
|
2007/12/28 9:18:18 |
使用xdiv库,真是敢想!我觉得这是一条非常优秀的思路。 楼主说“小变化”可能是没有理解视频的概念,用xdiv就不存在分块比较之类的算法了。 另外,希望楼主把优化和没优化的代码都发上来,因为没有人喜欢去猜没有谜底的谜语。 |
swgame
32436
|
2007/12/27 20:56:22 |
你的DGScreenSpy_0.1.3.rar 在笔记本上试了下,CPU占用在40-50%之间,感觉是不错。 |
guanyueguan
32428
|
2007/12/26 13:57:33 |
打包時忘記把0.1.3的EXE文件放進支, 在0.1.2的基礎上改進的0.1.3的EXE文件: DGScreenSpy_0.1.3.rar http://www.91files.com/?T8SHDID01OG6ID9SWU8H |
guanyueguan
32425
|
2007/12/26 11:32:02 |
1024*768*16的設定,30幀/秒,如果小變化CPU能控制在10%以內才可行。 |
huangjian_w
32423
|
2007/12/26 11:08:54 |
非常感谢wr960204,我也没任何介绍的资料,大家可以研究一下,应用成功,视频传输效率将大大提高,成功后我会发上源码。 |
huangjian_w
32421
|
2007/12/26 11:04:07 |
实现30帧/每秒,没有问题,如果大家要看Xvid源代码,可以在网上用Xivd搜,我发了几次都没有发上来。 |
wr960204
32419
|
2007/12/26 10:59:25 |
另外 http://blogimg.chinaunix.net/blog/upfile/070424110315.pdf 有XVID函数的详细介绍 |
huangjian_w
32418
|
2007/12/26 10:58:45 |
原始数据其实就是你的抓屏函数得到的bitmap,或者用 vfw的API函数从摄像头得到 的bitmap位图,你一秒钟抓30次(用定时器控制,每33毫秒抓一次)得到的位图自然 要在30毫秒内处理完毕,然后发送出去,否则对方收到一定会不连续。
至于性能,就目前我的笔记本而言,我用h.263(码率和比一般MPEG4差不多)压缩算法实现QQ摄像头网络视频传输,CPU不超过10%,可以达到每秒30%,很高的实时性。
如果我们可以用Xvid库实现编解码,那么做视频会议是很轻松的事情。 |
wr960204
32417
|
2007/12/26 10:53:27 |
Mpeg4这种压缩方式虽然体积小了,网络带宽节省了.但是压缩Mpeg4本身是十分耗费CPU的.可能得不偿失. |
ysq8101
32416
|
2007/12/26 10:51:01 |
MPEG4的库效率还不错的,不过没压缩这么大的没试过。摄像头的一般不会超过15k/s |
guanyueguan
32415
|
2007/12/26 10:16:19 |
我沒有了解MPEG4,所以也不明白它的工作方式: 1、原始數據幀如何獲取? 2、壓縮率與CPU消耗如何?
屏傳的關鍵不是壓縮!
其實這個程序效果並不怎麼樣(^_^我有意改差的),但是它隱藏了改進的方向,如果仔細分析的話是能夠發現的,只要改進好,和其它主流的程序會在同一個檔次的,當然該優化的地方也要優化才行,該用API的地方也得用API實現。 |
huangjian_w
32413
|
2007/12/26 9:49:09 |
如下代码是,编解码函数的调用,也许我输入参数有问题。想立即把来自摄像头的位图压缩为视频帧后,再解压显示出来,目前只研究到这个地方,还没有成功。 SpBmp := TBitmap.Create; SpBmp.PixelFormat := pf24bit; SampleGrabber.GetBitmap(SpBmp, pBuffer, BufferLen); //捕获原始bmp位图 //如果要直接显示 //Image.Picture.Graphic := SpBmp; yCount:=0; uCount:=0; vCount:=0; //转换RGB像素的位图矩阵,为YUV格式的矩阵 for Row := 0 to SpBmp.Height - 1 do begin BmpLineData := Spbmp.ScanLine[Row]; //获取每行像素数据指针 for Col:= 0 to SpBmp.Width -1 do begin YP[yCount] := Round(BmpLineData[Col].rgbtRed * 0.3 + BmpLineData[Col].rgbtGreen * 0.6 + BmpLineData[Col].rgbtBlue * 0.1); if Odd(Col) then //如果是偶数 begin UP[uCount]:= Round(BmpLineData[Col].rgbtBlue * 0.4 - BmpLineData[Col].rgbtRed * 0.1 - BmpLineData[Col].rgbtGreen * 0.3); VP[vCount]:= Round(BmpLineData[Col].rgbtBlue * 0.6 - BmpLineData[Col].rgbtRed * 0.5 - BmpLineData[Col].rgbtGreen * 0.1); Inc(uCount,1); Inc(vCount,1); end; Inc(yCount,1); end; end;
//图像压缩编码 xvid_encStats.version := 1 SHL 16 + 1 SHL 8 + 0; FillChar(FrameBuf,SizeOf(FrameBuf),0); xvid_encFrame.bitstream := @FrameBuf[0];
xvid_encFrame.input.plane[0] := @yp; //Y色度矩阵 //xvid_encFrame.input.plane[1] := @up; //U色差Cr矩阵 //xvid_encFrame.input.plane[2] := @vp; //V色差Cb矩阵 xvid_encFrame.input.stride[0] := SpBmp.Width; //Y矩阵每行字节数 //xvid_encFrame.input.stride[1] := SpBmp.Width div 2; //U矩阵每行字节数 //xvid_encFrame.input.stride[2] := SpBmp.Width div 2; //V矩阵每行字节数
xvid_encFrame.bframe_threshold :=0; //是否支持双向预测,PB模式
xvid_encFrame.coding_type := XVID_TYPE_IVOP; //I帧编码是关键帧,P帧编码是帧内预测
//开始压缩 Ret := xvid_encore(xvid_enc.handle, XVID_ENC_ENCODE, @xvid_encFrame, @xvid_encStats); //返回编码之后的字节 if Ret > 0 then begin //FrameBuf的数组中存在Ret个数据就是编码的数据 xvid_decFrame.bitstream := @FrameBuf; //解码数据流 xvid_decFrame.length := Ret; //解码数据流长度 xvid_decore(xVid_decode.handle , XVID_DEC_DECODE, @xvid_decFrame, @xvid_decStats); //xvid_decFrame.output.plane[0] //xvid_decFrame.output.plane[1] //xvid_decFrame.output.plane[2]
end else begin //mmo1.Lines.Add('编码失败'); end; |
huangjian_w
32412
|
2007/12/26 9:44:20 |
我这两天没事也正在研究怎么使用这个库,如果成功,那将比其它算法更高效和快速。它可以实现标准的MPEG4,甚至支持,最好的视频压缩算法(目前H.264)。 下面就是我研究的部分使用过程。但是还是没有成功,发出来大家共同研究。 在Tform的 private定义私有变量,供主窗体全局使用。 // XVID ENCODER xvid_gbl: xvid_gbl_init_t; xvid_enc: xvid_enc_create_t; xvid_encFrame: xvid_enc_frame_t; xvid_encStats: xvid_dec_stats_t; // XVID DECODER xVid_decode: xvid_dec_create_t; xvid_decFrame:xvid_dec_frame_t; xvid_decStats:xvid_dec_stats_t;
//如下代码供初始化编解码器使用 try //XVID库初始化操作 xvid_gbl.version := 1 SHL 16 + 1 SHL 8 + 0; //Version:1.1.0,最新版本 xvid_gbl.cpu_flags := 0; //0:自动检查CPU,XVID_CPU_FORCE:强制使用XVID指定特征的CPU xvid_gbl.debug := 0; //调试级别
//初始化编码器,得到编码器句柄 xvid_global(xvid_enc.handle, XVID_GBL_INIT, @xvid_gbl, nil);
//初始化解码器 xvid_global(xVid_decode.handle, XVID_GBL_INIT, @xvid_gbl, nil);
// XVID编码器初始化 xvid_enc.version := 1 SHL 16 + 1 SHL 8 + 0; //编码器参数 xvid_enc.global := 0; //全局标志 xvid_enc.width := 320; //压缩视频宽度 xvid_enc.height := 240; //压缩视频高度 xvid_enc.fbase := 25; //基本帧率/每秒 xvid_enc.fincr := 1; //帧率增长步长,0:可变步长,>1实际增长步长 xvid_enc.profile := XVID_PROFILE_AS_L4; //压缩级别,MPEG4-ASP最高压缩级别 xvid_enc.max_key_interval := 0; //最大关键帧间隔 xvid_enc.frame_drop_ratio := 0; //丢帧率;0~100 xvid_enc.max_bframes := 0; //是否采用B帧,一般采用I,P帧,如果1=PB帧
//创建编码器 xvid_encore(xvid_enc.handle, XVID_ENC_CREATE, @xvid_enc, nil);
//初始化压缩数据帧结构 xvid_encFrame.version := 1 SHL 16 + 1 SHL 8 + 0;
// --- VOL FLAGS xvid_encFrame.vol_flags := 0; xvid_encFrame.vol_flags := xvid_encFrame.vol_flags OR XVID_VOL_MPEGQUANT; //允许MPEG量化 xvid_encFrame.vol_flags := xvid_encFrame.vol_flags OR XVID_VOL_GMC; //允许GMC xvid_encFrame.vol_flags := xvid_encFrame.vol_flags OR XVID_VOL_QUARTERPEL; //采用1/4像素运算 // --- VOP FLAGS xvid_encFrame.vop_flags := xvid_encFrame.vop_flags OR XVID_VOP_CHROMAOPT; //允许色彩优化 //xvid_encFrame.vop_flags := xvid_encFrame.vop_flags OR XVID_VOP_HALFPEL; //允许半像素 xvid_encFrame.motion := 0; //运动标识 xvid_encFrame.quant := 8; //质量控制=量化参数,1~31,数值越小质量越高 //输入图像初始化 xvid_encFrame.input.csp := XVID_CSP_BGR OR XVID_CSP_VFLIP; //24bit真彩色位图编码 xvid_encFrame.input.stride[0] := xvid_enc.width; //每行多少个字节,一般为Width*3
// XVID解码器初始化 xVid_decode.version := 1 SHL 16 + 1 SHL 8 + 0; xVid_decode.width := 320; xVid_decode.height := 240;
//创建解码器 xvid_decore(xVid_decode.handle,XVID_DEC_CREATE,@xVid_decode, nil); //初始化解码数据帧结构 xvid_decFrame.version := 1 SHL 16 + 1 SHL 8 + 0; xvid_decFrame.brightness := 0; //亮度偏移 xvid_decFrame.general := XVID_LOWDELAY; //低延时 xvid_decFrame.output.csp := XVID_CSP_BGR OR XVID_CSP_VFLIP; xvid_decFrame.output.stride[0] := 320 * 240 * 3; xvid_decFrame.length := 0; // DECSTATS STRUCTURE INIT xvid_decStats.version := 1 SHL 16 + 1 SHL 8 + 0; except Exit; end; |
huangjian_w
32411
|
2007/12/26 9:36:47 |
感谢LZ,最近我在看MPEG4压缩算法。发现如果用xvid库可以实现实时视频压缩。 当然我们的屏幕传输实际也是一种视频格式,只是把屏幕捕获的RGB位图转换 为YUV格式就可以了。不知道LZ研究过没有?xvid库就一个xvidcore.dll,是 开源的MPEG4压缩算法。 unit lib_xvid;
interface
uses Windows;
const XVID_DLL = 'XVIDCORE.DLL'; XVID_GBL_INIT = 0; XVID_ERR_FAIL = -1; XVID_ERR_MEMORY = -2; //* memory allocation error */ XVID_ERR_FORMAT = -3; //* file format error */ XVID_ERR_VERSION = -4; //* structure version not supported */ XVID_ERR_END = -5; //* encoder only; end of stream reached */ XVID_ENC_CREATE = 0; XVID_ENC_DESTROY = 1; XVID_ENC_ENCODE = 2; XVID_DEC_CREATE = 0; XVID_DEC_DESTROY = 1; XVID_DEC_DECODE = 2; // FRAME TYPES XVID_TYPE_IVOP = 1; //* intra frame */ XVID_TYPE_PVOP = 2; //* predicted frame */ XVID_TYPE_BVOP = 3; //* bidirectionally encoded */ XVID_TYPE_SVOP = 4; //* predicted+sprite frame */
// DECODE COLORSPACE XVID_CSP_PLANAR = $00000001; // (1<< 0) 4:2:0 planar (==I420, except for pointers/strides) XVID_CSP_I420 = $00000002; // (1<< 1) 4:2:0 planar XVID_CSP_YV12 = $00000004; // (1<< 2) 4:2:0 planar XVID_CSP_YUY2 = $00000008; // (1<< 3) 4:2:2 packed XVID_CSP_UYVY = $00000010; // (1<< 4) 4:2:2 packed XVID_CSP_YVYU = $00000020; // (1<< 5) 4:2:2 packed XVID_CSP_BGRA = $00000040; // (1<< 6) 32-bit bgra packed XVID_CSP_ABGR = $00000080; // (1<< 7) 32-bit abgr packed XVID_CSP_RGBA = $00000100; // (1<< 8) 32-bit rgba packed XVID_CSP_BGR = $00000200; // (1<< 9) 24-bit bgr packed XVID_CSP_RGB555 = $00000400; // (1<<10) 16-bit rgb555 packed XVID_CSP_RGB565 = $00000800; // (1<<11) 16-bit rgb565 packed XVID_CSP_SLICE = $00001000; // (1<<12) decoder only: 4:2:0 planar, per slice rendering XVID_CSP_INTERNAL = $00002000; // (1<<13) decoder only: 4:2:0 planar, returns ptrs to internal buffers XVID_CSP_NULL = $00004000; // (1<<14) decoder only: dont output anything XVID_CSP_ARGB = $00008200; // (1<<15) 32-bit argb packed XVID_CSP_VFLIP = $80000000; // (1<<31) vertical flip mask // DECODE GENERAL FLAGS XVID_LOWDELAY = $0001; // (1<<0) /* lowdelay mode */ XVID_DISCONTINUITY = $0002; // (1<<1) /* indicates break in stream */ XVID_DEBLOCKY = $0004; // (1<<2) /* perform luma deblocking */ XVID_DEBLOCKUV = $0008; // (1<<3) /* perform chroma deblocking */ XVID_FILMEFFECT = $0010; // (1<<4) /* adds film grain */ XVID_DERINGUV = $0020; // (1<<5) /* perform chroma deringing, requires deblocking to work */ XVID_DERINGY = $0040; // (1<<6) /* perform luma deringing, requires deblocking to work */ XVID_DEC_FAST = $20000000; // (1<<29) /* disable postprocessing to decrease cpu usage *todo* */ XVID_DEC_DROP = $40000000; // (1<<30) /* drop bframes to decrease cpu usage *todo* */ XVID_DEC_PREROLL = $80000000; // (1<<31) /* decode as fast as you can, don't even show output *todo* */ // ENCODING PROFILES XVID_PROFILE_S_L0 = $08; //* simple */ XVID_PROFILE_S_L1 = $01; XVID_PROFILE_S_L2 = $02; XVID_PROFILE_S_L3 = $03; XVID_PROFILE_ARTS_L1 = $91; //* advanced realtime simple */ XVID_PROFILE_ARTS_L2 = $92; XVID_PROFILE_ARTS_L3 = $93; XVID_PROFILE_ARTS_L4 = $94; XVID_PROFILE_AS_L0 = $f0; //* advanced simple */ XVID_PROFILE_AS_L1 = $f1; XVID_PROFILE_AS_L2 = $f2; XVID_PROFILE_AS_L3 = $f3; XVID_PROFILE_AS_L4 = $f4; // ENCODING VOL FLAGS XVID_VOL_MPEGQUANT = $01; // (1<<0) /* enable MPEG type quantization */ XVID_VOL_EXTRASTATS = $02; // (1<<1) /* enable plane sse stats */ XVID_VOL_QUARTERPEL = $04; // (1<<2) /* enable quarterpel: frames will encoded as quarterpel */ XVID_VOL_GMC = $08; // (1<<3) /* enable GMC; frames will be checked for gmc suitability */ // ENCODING VOP FLAGS XVID_VOP_DEBUG = $0001; // (1<< 0) /* print debug messages in frames */ XVID_VOP_HALFPEL = $0002; // (1<< 1) /* use halfpel interpolation */ XVID_VOP_INTER4V = $0004; // (1<< 2) /* use 4 motion vectors per MB */ XVID_VOP_TRELLISQUANT = $0008; // (1<< 3) /* use trellis based R-D "optimal" quantization */ XVID_VOP_CHROMAOPT = $0010; // (1<< 4) /* enable chroma optimization pre-filter */ XVID_VOP_CARTOON = $0020; // (1<< 5) /* use 'cartoon mode' */ XVID_VOP_GREYSCALE = $0040; // (1<< 6) /* enable greyscale only mode (even for color input material chroma is ignored) */ XVID_VOP_HQACPRED = $0080; // (1<< 7) /* high quality ac prediction */ XVID_VOP_MODEDECISION_RD = $0100; // (1<< 8) /* enable DCT-ME and use it for mode decision */ XVID_VOP_FAST_MODEDECISION_RD = $1000; // (1<<12) /* use simplified R-D mode decision */ XVID_VOP_RD_BVOP = $2000; // (1<<13) /* enable rate-distortion mode decision in b-frames */
// ENCODING GLOBAL FLAGS XVID_GLOBAL_CLOSED_GOP = $02; //(1<<1) /* closed_gop: was DX50BVOP dx50 bvop compatibility */ XVID_GLOBAL_EXTRASTATS_ENABLE = $04; //(1<<2) XVID_GLOBAL_VOL_AT_IVOP = $08; //(1<<3) /* write vol at every ivop: WIN32/divx compatibility */ XVID_GLOBAL_FORCE_VOL = $10; //(1<<4) /* when vol-based parameters are changed, insert an ivop NOT recommended */
type
xvid_image_t = packed record csp: integer; // [in] colorspace; or with XVID_CSP_VFLIP to perform vertical flip */ plane: array[0..3] of pointer; // [in] image plane ptrs */ stride: array[0..3] of integer; // [in] image stride; "bytes per row"*/ end;
// ENCODER xvid_enc_create_t = packed record version: integer; profile: integer; //* [in] profile@level; refer to XVID_PROFILE_xxx */ width: integer; //* [in] frame dimensions; width, pixel units */ height: integer; //* [in] frame dimensions; height, pixel units */ num_zones: integer; //* [in:opt] number of bitrate zones */ xvid_enc_zone_t: pointer; //* ^^ zone array */ num_plugins: integer; //* [in:opt] number of plugins */ xvid_enc_plugin_t: pointer; //* ^^ plugin array */ num_threads: integer; //* [in:opt] number of threads */ max_bframes: integer; //* [in:opt] max sequential bframes (0=disable bframes) */ global: integer; //* [in:opt] global flags; controls encoding behavior */ //* --- vol-based stuff; included here for convenience */ fincr: integer; //* [in:opt] framerate increment; set to zero for variable framerate */ fbase: integer; //* [in] framerate base frame_duration = fincr/fbase seconds*/ //* ---------- */ //* --- vop-based; included here for convenience */ max_key_interval: integer; //* [in:opt] the maximum interval between key frames */ frame_drop_ratio: integer; //* [in:opt] frame dropping: 0=drop none... 100=drop all */ bquant_ratio: integer; //* [in:opt] bframe quantizer multipier/offeset; used to decide bframes quant when bquant==-1 */ bquant_offset: integer; //* bquant = (avg(past_ref_quant,future_ref_quant)*bquant_ratio + bquant_offset) / 100 */ min_quant: array[0..2] of integer;//* [in:opt] */ max_quant: array[0..2] of integer;//* [in:opt] */ //* ---------- */ handle: pointer; //* [out] encoder instance handle */ end;
xvid_enc_frame_t = packed record version: integer; //* VOL related stuff //* unless XVID_FORCEVOL is set, the encoder will not react to any changes //* here until the next VOL (keyframe). vol_flags: integer; //* [in] vol flags */ quant_intra_matrix: pointer; //* [in:opt] custom intra qmatrix */ quant_inter_matrix: pointer; //* [in:opt] custom inter qmatrix */ par: integer; //* [in:opt] pixel aspect ratio (refer to XVID_PAR_xxx above) */ par_width: integer; //* [in:opt] aspect ratio width */ par_height: integer; //* [in:opt] aspect ratio height */ //* Other fields that can change on a frame base */ fincr: integer; //* [in:opt] framerate increment, for variable framerate only */ vop_flags: integer; //* [in] (general)vop-based flags */ motion: integer; //* [in] ME options */ input: xvid_image_t; //* [in] input image (read from) */ coding_type: integer; //* [in:opt] coding type */ quant: integer; //* [in] frame quantizer; if <=0, automatic (ratecontrol) */ bframe_threshold: integer; bitstream: pointer; //* [in:opt] bitstream ptr (written to)*/ length: integer; //* [in:opt] bitstream length (bytes) */ out_flags: integer; //* [out] bitstream output flags */ end;
xvid_enc_stats_t = packed record version: integer; //* encoding parameters coding_type: integer; //* [out] coding type */ quant: integer; //* [out] frame quantizer */ vol_flags: integer; //* [out] vol flags (see above) */ vop_flags: integer; //* [out] vop flags (see above) */ //* bitrate */ length: integer; //* [out] frame length */ hlength: integer; //* [out] header length (bytes) */ kblks: integer; //* [out] number of blocks compressed as Intra */ mblks: integer; //* [out] number of blocks compressed as Inter */ ublks: integer; //* [out] number of blocks marked as not_coded */ sse_y: integer; //* [out] Y plane's sse */ sse_u: integer; //* [out] U plane's sse */ sse_v: integer; //* [out] V plane's sse */ end;
// DECODER
xvid_gbl_init_t = packed record version: integer; cpu_flags: dword; // [in:opt] zero = autodetect cpu; XVID_CPU_FORCE|{cpu features} = force cpu features */ debug: integer; // [in:opt] debug level */ end;
xvid_dec_create_t = packed record version: integer; width: integer; // [in:opt] image width */ height: integer; // [in:opt] image width */ handle: pointer; // [out] decore context handle */ end;
xvid_dec_frame_t = packed record version: integer; general: integer; // [in:opt] general flags */ bitstream: pointer; // [in] bitstream (read from)*/ length: integer; // [in] bitstream length */ output: xvid_image_t; // [in] output image (written to) */ brightness: integer; // [in] brightness offset (0=none) */ end;
vop_t = packed record general: integer; // [out] flags */ time_base: integer; // [out] time base */ time_increment: integer; // [out] time increment */ // XXX: external deblocking stuff */ qscale: ^integer; // [out] pointer to quantizer table */ qscale_stride: integer; // [out] quantizer scale stride */ end; vol_t = packed record general: integer; // [out] flags */ width: integer; // [out] width */ height: integer; // [out] height */ par: integer; // [out] pixel aspect ratio (refer to XVID_PAR_xxx above) */ par_width: integer; // [out] aspect ratio width [1..255] */ par_height: integer; // [out] aspect ratio height [1..255] */ end; xvid_dec_stats_t = packed record version: integer; frametype: integer; // [out] output data type */ vop: vop_t; vol: vol_t; end;
function xvid_global(hnd: pointer; opt: integer; param1: pointer; param2: pointer): integer; cdecl; external XVID_DLL; function xvid_decore(hnd: pointer; opt: integer; param1: pointer; param2: pointer): integer; cdecl; external XVID_DLL; function xvid_encore(hnd: pointer; opt: integer; param1: pointer; param2: pointer): integer; cdecl; external XVID_DLL;
implementation
end. |
register
32407
|
2007/12/26 0:18:33 |
虽然暂时没用上,但很感谢LZ! |