FFVCL - Delphi FFmpeg VCL Components [CCAVC - CodeCoolie Audio Video Components] ********************************************************************************* 2011.03.07 Encoder 3.9 & Player 3.0 [Common] * 在 FFUtils 单元新增函数 MixAudio() * 几个小的改进 [Decoder] * 新属性 Deinterlace * 新函数/方法 ReadAudio() [Encoder] * 新事件 OnBeforeFindStreamInfo * 新属性 Paused [Player] * 支持多实例 * 函数/方法 LoadAVLib() 中新增参数 AAutoLoadSDL * 新函数/方法 SDLLibLoaded(), LoadSDLLib() 以及 UnloadSDLLib() [Demos] * 新 AudioMixer 示例 * 新 MultiPlayer 示例 * 新 PicturesTransitions2Video 示例 [DLLs] * 没变化 ********************************************************************************* 2011.01.25 Encoder 3.8a & Player 2.8a [FFLoader] * 避免 range checking 错误 [Encoder] * 新属性 HaltOnInvalidOption * 修正无效参数导致的死循环 [DLLs] * 没变化 ********************************************************************************* 2011.01.22 Encoder 3.8 & Player 2.8 [Common] * 支持亮度和对比度调节 * 支持色调和饱和度调节 [Encoder] * 完美支持多任务编码, 不会出现线程锁问题 * 几个小的改进 [Player] * 新属性 Deinterlace * 新属性 CheckIOEOF 和 CheckIOERR * 新属性 AutoAdjustFrameRate 和 ForceFrameRate * 新事件 OnBeforeFindStreamInfo * 几个小的改进 [Demos] * 新 Video2Gif 示例 * 新 OutputFormat 示例 * 新 DecoderWaveInputEncoder 示例 * 改进 Player 示例 * 改进 Pictures2Video 示例 [DLLs] * FFmpeg DLLs 基于官方近期代码编译(ffmpeg svn-r26400) * 本版本与之前的 FFmpeg DLLs 版本不兼容 ********************************************************************************* 2010.12.06 Encoder 3.7 & Player 2.7 [Common] * 几个小的改进 [Decoder] * 支持解码音频 [Encoder] * 移除 CropXXX 选项, 使用 crop filter * 公开几个 TCustomFFmpeg 的属性: Converting, LastErrMsg, Terminated, TotalOutputDuration [EventStreamAdapter] * OnReadEvent 和 OnWriteEvent: 在 Delphi 6 IDE 不能处理无类型参数, 因此改为 PByte 类型 [DLLs] * FFmpeg DLLs 基于官方近期代码编译(ffmpeg svn-r25789) * 本版本与之前的 FFmpeg DLLs 版本不兼容 ********************************************************************************* 2010.10.30 Encoder 3.6a & Player 2.6a [Common] * 修正 Delphi 6 下注册码崩溃问题 (仅 DCU 版) * 修正潜在的 AV_TIME_BASE 相关计算溢出 [Decoder] * 修正注册码校验错误 (仅 DCU 版) [Encoder] * 修正 Windows 7 下内存堆问题 (filters priv_size 没有初始化) [Player] * 修正 DirectDraw 模式下崩溃问题 [FrameInput] * 修正错误的帧速预设值 [WaveInput] * 将 timebase 从 sample_rate 改为 1000000 [VFWCapture] * 如果打开失败, 则列出所有 VFW 设备 [Demos] * ConverterDemo/DecoderDemo: Delphi 2009 或以上版本中 TrackBar.Max 值可大于 $7FFF * 运行时检查 libfaac 是否可用 [DLLs] * 没变化 ********************************************************************************* 2010.10.05 Encoder 3.6 & Player 2.6 * 支持 Delphi XE/2011 * 新组件 TPacketInputAdapter * 几个小的改进 * FFmpeg DLLs 基于官方近期代码编译(ffmpeg svn-r25245) * 本版本与之前的 FFmpeg DLLs 版本不兼容 ********************************************************************************* 2010.08.21 Encoder 3.5 & Player 2.5 [Version] * Encoder 版本号从 3.3 改为 3.5, 用以表明该版本与之前的版本不兼容 * Player 版本号从 2.3 改为 2.5, 用以表明该版本与之前的版本不兼容 [LicenseKey] * DCU 版采用新的简单的注册码 [重命名] * TAVProbe 组件改为 TFFDecoder, AVProbe 单元改为 FFDecode * TFFmpegVCL 组件改为 TFFEncoder, FFmpegVCL 单元改为 FFEncode * TFFmpegLoader 组件改为 TFFLoader, FFmpegLoader 单元改为 FFLoad * FFmpegLogger 单元改为 FFLog [Encoder] * 新 OnAudioHook 事件和新 AudioHook 输出选项 * FFBaseComponent 单元新增函数 ParseParameters() 用于解析 FFmpeg 命令行参数为 FFVCL 选项 ExtOptions * FileFormat 输出选项改为 ForceFormat * OnCustomHook 事件改为 OnVideoInputHook 并将 CustomHook 输出选项改为 VideoInputHook * 新 OnVideoOutputHook 事件以及新 VideoOutputHook 输出选项 * OnVideoInputHook 和 OnVideoOutputHook 事件的主要区别是 OnVideoInputHook 接收到的视频帧尺寸是输入视频的原始尺寸, OnVideoOutputHook 接收到的视频帧尺寸是最终输出视频的尺寸, 如果转换时没有改变视频帧尺寸, 则二者接收到的视频帧尺寸相同, 均是输入视频的原始尺寸 * 新属性 VideoHookBitsPixel 用于设置 Hook 事件接收到的 Bitmap 的 PixelFormat [WaveInputAdapter] * 新 WaveInputAdapter 组件提供直接输入 PCM Wave 数据的接口 [WaveOutputAdapter] * 新 WaveOutputAdapter 组件提供直接输出 PCM Wave 数据的接口 [FrameInput] * 事件返回值从 Boolean 类型改为 Integer 类型 [Player] * Format 属性改为 ForceFormat * OnHook 事件改为 OnVideoHook 并新增参数 AUpdate 用于指明是否应用 Hook * Hook 属性改为 VideoHook * 新 OnAudioHook 事件以及新 AudioHook 属性 * 新属性 VideoHookBitsPixel 用于设置 Hook 事件接收到的 Bitmap 的 PixelFormat [Decoder] * 新属性 BitmapBitsPixel 用于设置解码后 Bitmap 的 PixelFormat [DLLs] * 没变化 ********************************************************************************* 2010.07.08 Converter 3.3 & Player 2.3 [支持 HTML5 视频] * VP8 编码器 * WebM 视频格式 [Converter] * 几个小的改动 [Player] * 新属性 Seeking * Seek() 方法新增参数 AWaitForSeekEnd * 几个小的改动 [DLLs] * FFmpeg DLLs 基于官方近期代码编译(ffmpeg svn-r24040) * FFmpeg svn-r24040 比 ffmpeg 0.6(svn-r23863) 版本高 * 本版本与之前的 FFmpeg DLLs 版本不兼容 ********************************************************************************* 2010.06.15 Converter 3.2b & Player 2.2b [Converter] * 移除 PadXXX 选项, 请使用 pad filter * 几个小的改动 [Player] * 几个小的改动 [DLLs] * FFmpeg DLLs 基于官方近期代码编译(ffmpeg svn-r23486) * 本版本与之前的 FFmpeg DLLs 版本兼容 ********************************************************************************* 2010.04.18 Converter 3.2a & Player 2.2a [Converter] * 新属性 Terminated 和 Working * 修正拷贝元数据时死循环问题 [Player] * 以暂停参数打开文件时更新 PlayState 属性为 psPause [DLLs] * FFmpeg DLLs 基于官方近期代码编译(ffmpeg svn-r22866) * 本版本与之前的 FFmpeg DLLs 版本兼容 ********************************************************************************* 2010.03.26 Converter 3.2 & Player 2.2 [Converter] * 移除 Video Hook 功能 * 移除选项 UseMaxRecordingTime * 捕捉转换线程中的异常 * 新输出选项 InputSync: 同步读取输入源 * 其他小的改进和 BUG 修正 [Player] * 支持 Video Filters * 支持 DVDSUB 字幕 * 捕捉播放线程中的异常 * 终止播放时避免死锁 * 提高稳定性! * 提高性能! * 其他小的改进和 BUG 修正 * 因稳定性和性能都有所显著改进, 版本号直接从 2.0 升为 2.2 [ScreenCapture] * 修正调用 GetObject() Windows API 时一个令人费解的问题 (只在 Delphi 6, 7, 2005 出现) [VFWCapture] * 新的 VFW 捕捉插件, 可用于捕捉摄像头视频 [DLLs] * FFmpeg DLLs 基于官方近期代码编译(ffmpeg svn-r22626) * 因 FFmpeg 更新, 本版本与之前的 FFmpeg DLLs 版本不兼容 ********************************************************************************* 2010.02.10 Converter 3.1 & Player 2.0 [AVProbe] * 新方法: DecodeNextKeyFrame(), DecodePreviousFrame(), DecodePreviousKeyFrame() [Converter] * 修正合并模式下错误的 fps 信息 * 修正 VideoHook 帧画面抖动 * 其他小的改进和 BUG 修正 [Player] * 公开属性 AudioDriver 和 VideoDriver * 支持 DirectDraw 视频驱动: 支持平滑/抗锯齿 * 暂停时候也可以立即显示 Seek 结果 * 新属性 Paused * 新属性 PlayState * Open() 方法新增参数 APaused * 改进多线程稳定性 * 避免 Seek 时候不正确的长时间延时 * 其他小的改进和 BUG 修正 [DLLs] * 使用 Windows msvcrt.dll 代替 myutil.dll * FFmpeg DLLs 基于官方近期代码编译(ffmpeg svn-r21650, 保留 video hooks) * 因 FFmpeg 更新, 本版本与之前的 FFmpeg DLLs 版本不兼容 ********************************************************************************* 2009.12.24 Converter 3.0 & Player 1.4 * 请 FFVCL 2.x 用户注意 2.x 与 3.0 的接口不一致, 3.0 版不兼容 2.x 版. 升级中如遇到问题, 请先参考 Demo 程序。 * Changelog 只是简要说明, 更多信息请参考接口文档(DCU版) 以及 Demo 程序。 [FFVCL - FFmpegVCL(Converter)] [Options] * 新增选项 UseMaxRecordingTime * 将 TimeStart 和 TimeLength 的类型从 Integer 改为 Int64 (毫秒改为微秒) * 移除 TimeStart64 和 TimeLength64 选项 * 移除 VideoHookPTSs 选项 [Methods] * 新方法 Exchange() * 将 AddInputFile() 改为 AddTask() * 将 ClearInputFiles() 改为 ClearTasks() * 将 RemoveInputFile() 改为 RemoveTask() * 将 StartConvert() 改为 Start() * 将 BreakConverting() 改为 Stop() * 将 PauseConverting() 改为 Pause() * 将 ResumeConverting() 改为 Resume() [Events] * 移除 OnBeforeHook 事件 * 改动 OnCustomHook 事件参数 * 改动 OnPreviewBitmap 事件参数 * 改动 OnTerminate 事件参数 * 改动 OnProgress 事件参数 [Properties] * 新属性 TriggerEventInMainThread * 新属性 OutputFiles * 将 AVFileInfo 改为 AVProbes * 将 FilesCount 改为 TasksCount * 数组类型的属性从一维改为二维 [Others] * 其他小的改进和 BUG 修正 [AVProbe] * 将 AVProbe 类从 class(TObject) 改为 class(TComponent) * 新方法 Seek(), Decode(), CopyToBitmap 替换相应旧方法 * 新属性 FrameInfo 替换相应旧属性 * 改进定位准确性以及解码视频帧的性能 [FFLogger] * 新属性 TriggerEventInMainThread * 其他小的改进和 BUG 修正 [I/O add-ons] [FrameInput] * 新增的帧输入类型 - YUV * 其他小的改进 [FrameOutput] * 帧输出功能 * 支持的帧输出类型 - RGB, MJPEG, H264, YUV [WaveCapture] * 通过声卡进行录音, 作为音频输入源 [ScreenCapture] * 其他小的改进 [FFPlayer] * 新属性 TriggerEventInMainThread * 其他小的改进和 BUG 修正 [DLLs] * FFmpeg DLLs 基于官方近期代码编译(ffmpeg svn-r20880, 保留 video hooks) * 因 FFmpeg 更新, 本版本与之前的 FFmpeg DLLs 版本不兼容 ********************************************************************************* 2009.09.30 Converter 2.5 & Player 1.3 * 支持 Delphi 2010 * 支持解码 Windows Media Audio Pro * 支持帧输入 (请参考 demo) * 支持屏幕录像 (请参考 demo) * 支持 libx264 preset (请参考 demo) * 新组件 FFLogger (请参考 demo) * 移除 FFmpegVCL 和 FFPlayer 的 OnLog 事件 * 移除 FFmpegVCL 的 LogLevel 属性 * 几个小的改进 * 几个 BUG 修正 * FFmpeg DLLs 基于官方最新代码编译(ffmpeg svn-r20090, 保留 video hooks) * 因 FFmpeg 更新, 本版本与之前的 FFmpeg DLLs 版本不兼容 ********************************************************************************* 2009.08.22 Converter 2.4a & Player 1.2d * 修正合并超过 2 个文件时的 pts 错误 (Converter) * 修正捕获某些 av_log 时的死循环 (Player) ********************************************************************************* 2009.08.16 Converter 2.4 & Player 1.2c * 支持视频合并: 将多个不同格式的文件, 合并为一个文件 * FFPlayer 也可以捕获 av_log() 信息 * 大量重构: FFmpeg.pas 的 av_encode() 函数 * 几个小的改进 * 几个 BUG 修正 ********************************************************************************* 2009.07.27 Converter 2.3c & Player 1.2b * 动态库路径支持 Unicode * 输入输出文件名支持 Unicode * FFPlayer 增加新属性 AspectRatio (Player 1.2b) * TAVProbe 增加新函数 SeekAndReadFramePicture() * 几个小的改进 * 几个 BUG 修正 ********************************************************************************* 2009.07.11 Converter 2.3b & Player 1.2a Converter 2.3b * StartConvert(0) 在所有任务完成后才返回 Player 1.2a * 增加 VerticalFlip 属性, 即垂直翻转画面 * TAVProbe 增加属性 ReadFrameSuccess * 几个小的改进 * 几个 BUG 修正 ********************************************************************************* 2009.05.30 Converter 2.3a & Player 1.2 Converter 2.3a * 增加 TimeStart64 和 TimeLength64 选项来代表微秒精度 Player 1.2 * 增加 OnHook 事件 * 增强检测文件末尾 * 几个小的改进 ********************************************************************************* 2009.04.09 Player 1.1 * 增加 PlayTime 属性, 当播放到 PlayTime 时, 根据 RepeatType 属性循环播放或停止播放 * 增加 CurrentFrame 函数, 返回 Bitmap 格式的当前视频截图 * 更新 Stop 方法, 修正 PlayState 事件和 Position 事件中调用 Stop 方法的 BUG * 增加 AudioVolume 属性, 调节音量范围(0-128) * 增加 Mute 属性 * 修正打开某些文件失败后不能再打开其他文件的 BUG ********************************************************************************* 2009.03.25 Converter 2.3 & Player 1.0 * 支持转换预览位图事件接口. (property OnPreviewBitmap: TPreviewBitmapEvent) * 新的帮助类 TFFmpegLoader 用于加载动态库. * 新组件 TFFplay 用于播放媒体文件. (不是免费的) * 合并 FFVCLdsgn_Dx 和 FFVCLrtl_Dx 为 FFmpeg_Dx. * 几个小的改进... * FFmpeg DLLs 基于官方最新代码编译(ffmpeg 0.5). * 因 FFmpeg 更新, 本版本与之前的 FFmpeg DLLs 版本不兼容 ********************************************************************************* 2008.12.18 Version 2.2c * 支持转换预览. ********************************************************************************* 2008.12.08 Version 2.2b * 名字从 CCAVC 改为 FFVCL. * 支持 Delphi 2009. * 没别的变动. ********************************************************************************* 2008.10.09 Version 2.2a * 运行时刻包漏掉了 Stream I/O Protocol 的相关单元. (EventStreamAdapter.dcu and StreamProtocol.dcu) * 没别的变动. ********************************************************************************* 2008.09.28 Version 2.2 * 新特性: 支持 Stream I/O Protocol, 即支持输入输出流. * 新组件 TEventStreamAdapter 用于关联输入输出流事件. * BUG 修正: 避免因 filter 导致的 crop & pad 处理错误. * FFmpeg DLLs 基于官方最新代码编译(SVN-r15442). * 因 FFmpeg 更新, 本版本与之前的 FFmpeg DLLs 版本不兼容 ********************************************************************************* 2008.09.09 Version 2.1a * 改进: 当采样像素宽高比不可用时, 自动计算假定值. * BUG 修正: 输出文件大小为零时, 没有正常释放句柄以及删除. * BUG 修正: Video Filters 申请内存大小错误, SizeOf() 参数错误地使用了结构体指针类型. ********************************************************************************* 2008.09.05 Version 2.1 * 支持 Video Filters 选项 * 新增属性 AVFileInfo(TAVProbe) * LoadLibrary -> LoadLibraryEx 请参考 Dynamic-Link Library Search Order http://msdn2.microsoft.com/en-us/library/ms682586.aspx * XviD 编码速度提升 * FFmpeg DLLs 基于官方最新代码编译(SVN-r15216) * 因 FFmpeg 更新, 本次代码与之前的 FFmpeg DLLs 版本不兼容 ********************************************************************************* 2008.08.24 Version 2.0b 1. 改进内容 * 增加 AudioTag 和 VideoTag 输出选项 2. BUG 修正: StartTime 选项溢出 3. 演示程序 BUG 修正: 剪切片段时设置起止时间的 BUG ********************************************************************************* 2008.08.05 Version 2.0a 0. 2.0 释放的太匆忙了:( 1. 改进内容 * 采用全局 Codec 锁, 以便支持创建多个控件实例. 2. BUG 修正: 在线程中不能捕捉到异常. * 因为在线程中不能捕捉到异常, 所以应该手工处理异常. 注意: OnTerminate 事件参数变了, 用以传递异常信息. ********************************************************************************* 2008.08.01 Version 2.0 Final 0. 本次属大版本升级, 改动较大, 因此给您带来的不便请谅解. 1. 改进内容 * 封装新类 TAVProbe 用于获取输入文件的详细信息、以及视频帧预览功能 * 支持标准外部 Video Hook 动态库, 并对标准 Video Hook 进行了增强, 详见 TOutputOptions 的 成员 BeforeHook 和 VideoHookPTSs 的注释, 以及 BeforeHookEvent 的注释 * 提供 OnCustomHook 事件, 不需要外部 Video Hook 动态库, 即可实现同样功能, 更简单易用, 更 灵活强大, 详见 TOutputOptions 的成员 CustomHook 的注释, 以及 CustomHookEvent 的注释 * 移除属性 AudioChannels, AudioSampleRate, FrameHeight, FrameWidth, FrameAspectRatio, FramePixFmt, FrameRate, 改为使用 AVProbe 获取更详尽的信息 * 修正多个文件转换时, 调用 BreakConverting 不能正常触发 OnTerminated 事件的 BUG * 修正截取片段的BUG, 将 TimeStart 选项由 TOutputOptions 的成员改为 TInputOptions 的成员 * 支持指定输入流和输出流的映射 2. 代码改动 * 核心类 TCustomFFmpegHlpr 改名为 TCustomFFmpeg, 源文件单元名称由 FFmpegHlpr.pas 改为 FFmpeg.pas * FFmpeg 库头文件的单元名加前缀 lib, 如 avcodec.pas 改为 libavcodec.pas 3. 提供 Delphi 写的 Video Hook 动态库源代码 4. FFmpeg DLLs 基于官方最新代码编译(SVN-r14494) 代码日期 2008.08.01 5. 因 FFmpeg 更新, 本次代码与之前的 FFmpeg DLLs 版本不兼容 ********************************************************************************* 2008.06.09 Version 1.0 Final 1. 改进内容 * 基本实现 TOutputOptions.ExtOptions 的功能 * 增加属性 property FFmpegHlprs[Index: Integer]: TFFmpegHlpr; 从而可以获得 TCustomFFmpegHlpr 的属性, 即可获得输入文件的部分信息 property AudioChannels: Integer; property AudioSampleRate: Integer; property FrameHeight: Integer; property FrameWidth: Integer; property FrameAspectRatio: Single; property FramePixFmt: TAVPixelFormat; property FrameRate: TAVRational; * 将 procedure InitInputOptions(P: PInputOptions) 名字改为 InitOutputOptions(P: POutputOptions) * 增加 procedure InitInputOptions(P: PInputOptions) * 重命名 TPixelFormat 为 TAVPixelFormat, 以避免和 Delphi 的 Graphics.pas 中的 TPixelFormat 冲突 * 默认不支持 RealVideo DLL 解码功能, 如需要, 可定义工程编译指示字 REAL_DLL 即可 默认 RealVideo34Codec 属性不可用, LoadAVLib 方法中的 ALoadRealDLL 参数不可用 * 增加 LicenseDefines.inc 编译指示字包含文件, 用以影响 CCAVCLicense.pas 文件, 实现组件注册保护等 默认情况下, 这些代码不起作用, 完全不会影响到你的代码和程序 2. 核心代码 * CCAVConverter.pas 代码内部调整稍大 * FFmpegHlpr.pas 代码内部调整稍大 3. FFmpeg DLL 使用官方最新代码编译 代码日期 2008.06.09 4. 因 FFmpeg 更新, 本次代码与之前的 FFmpeg DLL 版本不兼容 目录 Src\FFmpeg_20080520 下的代码与旧版本兼容, 但建议升级, 旧版本不再维护 ********************************************************************************* 2008.05.20 Version 1.0 RC4 1. 改进内容 * 封装 av_log_callback, 统一由事件 OnLog 输出 * 属性 VerboseLevel 名称改为 LogLevel, 类型由 Integer 改为枚举 TLogLevel * 事件 OnLog 参数 ALogLevel 类型由 Integer 改为枚举 TLogLevel * 增加属性 InputOptions 和 OutputOptions, 用于功能扩展, 目前尚未进行测试 * 增加几个输出选项, 详见源码内 TOutputOptions 结构体定义以及注释 2. 核心代码 * avcodec.pas 添加 CodecID: CODEC_ID_PCM_DVD * CCRVCodec.pas 添加 RVTransform 调用时可能产生的异常处理 * CCAVConverter.pas 代码内部调整稍大 接口部分(属性, 事件, 等)做了调整, 见 1. 改进内容 将 TFFmpegHlpr 部分成员移至父类 TCustomFFmpegHlpr 内 * FFmpegHlpr.pas 添加由 TFFmpegHlpr 类转来的部分成员至 TCustomFFmpegHlpr 内 原数字形式的 log level 替换为对应常量 3. TOutputOptions 说明 输出选项都添加了注释, 不过是 FFmpeg 自己的注释, 需要自己去学习 FFmpeg 各种参数, 我现在也不是很了解 特别地, 增加了 ExtOptions 字符串选项, 便于灵活扩展, 格式定义如下: name1=value1#13#10 name2=value2#13#10 .....=......#13#10 其中 name 和 value 对应于 FFmpeg 命令行参数和值, 实例如 pix_fmt=yuv422p 4. FFmpeg DLL 使用官方最新代码编译 代码日期 2008.05.20 ********************************************************************************* 2008.05.11 Version 1.0 RC3 1. 主要调整了一下目录结构 工程文件放到了单独的子目录 Packages 里了 (由此带来的麻烦请谅解) 2. 核心代码 * AVUtilHlpr.pas 添加了一个函数指针 av_log_default_callback: Tav_log_default_callbackProc; (对于 FFmpeg 动态库的调用,全部采用动态加载,动态取得API入口地址的方式,如果有特殊需要,可参考头文件,自行加入未载入的API函数) * CCAVConverter.pas Bug Fix: 从基础类TCustomFFmpegHlpr派生的TFFmpegHlpr类,个别保护成员重复声明(如Faudio_volume),这是个Bug,将导致不能有效设置实际参数。 改进: 为了输出DLL封装库,对基础类TCustomAVConverter的部分成员(过程)进行了调整,从私有转为保护。 其他小的改动。 * FFmpegHlpr.pas 加了部分Demo DLL限制代码。 其他小的改动。 3. Demo 工程也一并附加在内了 Demo 程序也做了小改进,并加入码率参数。 (组件实际上已经封装了FFmpeg绝大部分常用参数,只是 Demo 程序没有全部展示,此部分请在自己的程序内自行完善) 4. 对于 FFmpeg 自身,以及容器和编码解码器的知识,我目前也知之甚少,互相交流,共同提高:) 组件的相关文档会尽快制作,请见谅。 ********************************************************************************* 2008.05.07 Version 1.0 RC2 ********************************************************************************* 2008.04.30 Version 1.0 RC1 ********************************************************************************* http://www.CCAVC.com