From 23ecb0a01dad716af22476851ac383cb904d0aaa Mon Sep 17 00:00:00 2001 From: tobigun Date: Sat, 30 Oct 2010 07:46:35 +0000 Subject: audio/video decoder filenames adjusted git-svn-id: svn://svn.code.sf.net/p/ultrastardx/svn/branches/experimental@2697 b956fd51-792f-4845-bead-9b4dfca2ff2c --- mediaplugin/src/media/UAudioDecoderPlugin.pas | 242 +++++++++++++++++++++++++ mediaplugin/src/media/UAudioDecoder_FFmpeg.pas | 242 ------------------------- mediaplugin/src/media/UMediaPlugin.pas | 4 +- mediaplugin/src/media/UVideoDecoderPlugin.pas | 215 ++++++++++++++++++++++ mediaplugin/src/media/UVideoDecoder_FFmpeg.pas | 215 ---------------------- mediaplugin/src/ultrastardx.dpr | 7 +- 6 files changed, 462 insertions(+), 463 deletions(-) create mode 100644 mediaplugin/src/media/UAudioDecoderPlugin.pas delete mode 100644 mediaplugin/src/media/UAudioDecoder_FFmpeg.pas create mode 100644 mediaplugin/src/media/UVideoDecoderPlugin.pas delete mode 100644 mediaplugin/src/media/UVideoDecoder_FFmpeg.pas diff --git a/mediaplugin/src/media/UAudioDecoderPlugin.pas b/mediaplugin/src/media/UAudioDecoderPlugin.pas new file mode 100644 index 00000000..8298cf17 --- /dev/null +++ b/mediaplugin/src/media/UAudioDecoderPlugin.pas @@ -0,0 +1,242 @@ +{* UltraStar Deluxe - Karaoke Game + * + * UltraStar Deluxe is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * 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; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + *} + +unit UAudioDecoderPlugin; + +(******************************************************************************* + * + * This unit is primarily based upon - + * http://www.dranger.com/ffmpeg/ffmpegtutorial_all.html + * + * and tutorial03.c + * + * http://www.inb.uni-luebeck.de/~boehme/using_libavcodec.html + * + *******************************************************************************) + +interface + +{$IFDEF FPC} + {$MODE Delphi} +{$ENDIF} + +{$I switches.inc} + +uses + UMediaPlugin, + UMusic, + UPath; + +type + TAudioDecoderPlugin = class(TInterfacedObject, IAudioDecoder) + private + fPluginInfo: PMediaPluginInfo; + public + constructor Create(Info: PMediaPluginInfo); + + function GetName: string; + + function InitializeDecoder(): boolean; + function FinalizeDecoder(): boolean; + function Open(const Filename: IPath): TAudioDecodeStream; + end; + +implementation + +uses + ctypes, + Classes, + SysUtils, + UIni, + UMain, + ULog; + +type + TPluginAudioDecodeStream = class(TAudioDecodeStream) + private + fAudioDecoderInfo: PAudioDecoderInfo; + fFilename: IPath; + fStream: PAudioDecodeStream; + fFormatInfo: TAudioFormatInfo; + + public + constructor Create(Info: PAudioDecoderInfo); + destructor Destroy(); override; + + function Open(const Filename: IPath): boolean; + procedure Close(); override; + + function GetLength(): real; override; + function GetAudioFormatInfo(): TAudioFormatInfo; override; + function GetPosition: real; override; + procedure SetPosition(Time: real); override; + function GetLoop(): boolean; override; + procedure SetLoop(Enabled: boolean); override; + function IsEOF(): boolean; override; + function IsError(): boolean; override; + + function ReadData(Buffer: PByteArray; BufferSize: integer): integer; override; + end; + +{ TPluginAudioDecodeStream } + +constructor TPluginAudioDecodeStream.Create(Info: PAudioDecoderInfo); +begin + inherited Create(); + fAudioDecoderInfo := Info; + fFilename := PATH_NONE; +end; + +{* + * Frees the decode-stream data. + *} +destructor TPluginAudioDecodeStream.Destroy(); +begin + Close(); + inherited; +end; + +function TPluginAudioDecodeStream.Open(const Filename: IPath): boolean; +var + Info: TCAudioFormatInfo; +begin + Result := false; + + Close(); + + fStream := fAudioDecoderInfo.open(PChar(Filename.ToUTF8())); + if (fStream = nil) then + Exit; + + fFilename := Filename; + + fAudioDecoderInfo.getAudioFormatInfo(fStream, Info); + fFormatInfo := TAudioFormatInfo.Create( + Info.channels, + Info.sampleRate, + TAudioSampleFormat(Info.format) + ); + + Result := true; +end; + +procedure TPluginAudioDecodeStream.Close(); +begin + Self.fFilename := PATH_NONE; + if (fStream <> nil) then + begin + fAudioDecoderInfo.close(fStream); + fStream := nil; + end; +end; + +function TPluginAudioDecodeStream.GetLength(): real; +begin + Result := fAudioDecoderInfo.getLength(fStream); +end; + +function TPluginAudioDecodeStream.GetAudioFormatInfo(): TAudioFormatInfo; +begin + Result := fFormatInfo; +end; + +function TPluginAudioDecodeStream.IsEOF(): boolean; +begin + Result := fAudioDecoderInfo.isEOF(fStream); +end; + +function TPluginAudioDecodeStream.IsError(): boolean; +begin + Result := fAudioDecoderInfo.isError(fStream); +end; + +function TPluginAudioDecodeStream.GetPosition(): real; +begin + Result := fAudioDecoderInfo.getPosition(fStream); +end; + +procedure TPluginAudioDecodeStream.SetPosition(Time: real); +begin + fAudioDecoderInfo.setPosition(fStream, Time); +end; + +function TPluginAudioDecodeStream.GetLoop(): boolean; +begin + Result := fAudioDecoderInfo.getLoop(fStream); +end; + +procedure TPluginAudioDecodeStream.SetLoop(Enabled: boolean); +begin + fAudioDecoderInfo.setLoop(fStream, Enabled); +end; + +function TPluginAudioDecodeStream.ReadData(Buffer: PByteArray; BufferSize: integer): integer; +begin + Result := fAudioDecoderInfo.readData(fStream, PCUint8(Buffer), BufferSize); +end; + + +{ TAudioDecoderPlugin } + +constructor TAudioDecoderPlugin.Create(Info: PMediaPluginInfo); +begin + inherited Create(); + fPluginInfo := Info; +end; + +function TAudioDecoderPlugin.GetName: String; +begin + Result := 'Plugin:AudioDecoder:' + fPluginInfo.name; +end; + +function TAudioDecoderPlugin.InitializeDecoder: boolean; +begin + //fPluginInfo.initialize(); + Result := true; +end; + +function TAudioDecoderPlugin.FinalizeDecoder(): boolean; +begin + //fPluginInfo.finalize(); + Result := true; +end; + +function TAudioDecoderPlugin.Open(const Filename: IPath): TAudioDecodeStream; +var + Stream: TPluginAudioDecodeStream; +begin + Result := nil; + + Stream := TPluginAudioDecodeStream.Create(fPluginInfo.audioDecoder); + if (not Stream.Open(Filename)) then + begin + Stream.Free; + Exit; + end; + + Result := Stream; +end; + +end. diff --git a/mediaplugin/src/media/UAudioDecoder_FFmpeg.pas b/mediaplugin/src/media/UAudioDecoder_FFmpeg.pas deleted file mode 100644 index 96d1e9e9..00000000 --- a/mediaplugin/src/media/UAudioDecoder_FFmpeg.pas +++ /dev/null @@ -1,242 +0,0 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - *} - -unit UAudioDecoder_FFmpeg; - -(******************************************************************************* - * - * This unit is primarily based upon - - * http://www.dranger.com/ffmpeg/ffmpegtutorial_all.html - * - * and tutorial03.c - * - * http://www.inb.uni-luebeck.de/~boehme/using_libavcodec.html - * - *******************************************************************************) - -interface - -{$IFDEF FPC} - {$MODE Delphi} -{$ENDIF} - -{$I switches.inc} - -uses - UMediaPlugin, - UMusic, - UPath; - -type - TAudioDecoderPlugin = class(TInterfacedObject, IAudioDecoder) - private - fPluginInfo: PMediaPluginInfo; - public - constructor Create(Info: PMediaPluginInfo); - - function GetName: string; - - function InitializeDecoder(): boolean; - function FinalizeDecoder(): boolean; - function Open(const Filename: IPath): TAudioDecodeStream; - end; - -implementation - -uses - ctypes, - Classes, - SysUtils, - UIni, - UMain, - ULog; - -type - TPluginAudioDecodeStream = class(TAudioDecodeStream) - private - fAudioDecoderInfo: PAudioDecoderInfo; - fFilename: IPath; - fStream: PAudioDecodeStream; - fFormatInfo: TAudioFormatInfo; - - public - constructor Create(Info: PAudioDecoderInfo); - destructor Destroy(); override; - - function Open(const Filename: IPath): boolean; - procedure Close(); override; - - function GetLength(): real; override; - function GetAudioFormatInfo(): TAudioFormatInfo; override; - function GetPosition: real; override; - procedure SetPosition(Time: real); override; - function GetLoop(): boolean; override; - procedure SetLoop(Enabled: boolean); override; - function IsEOF(): boolean; override; - function IsError(): boolean; override; - - function ReadData(Buffer: PByteArray; BufferSize: integer): integer; override; - end; - -{ TPluginAudioDecodeStream } - -constructor TPluginAudioDecodeStream.Create(Info: PAudioDecoderInfo); -begin - inherited Create(); - fAudioDecoderInfo := Info; - fFilename := PATH_NONE; -end; - -{* - * Frees the decode-stream data. - *} -destructor TPluginAudioDecodeStream.Destroy(); -begin - Close(); - inherited; -end; - -function TPluginAudioDecodeStream.Open(const Filename: IPath): boolean; -var - Info: TCAudioFormatInfo; -begin - Result := false; - - Close(); - - fStream := fAudioDecoderInfo.open(PChar(Filename.ToUTF8())); - if (fStream = nil) then - Exit; - - fFilename := Filename; - - fAudioDecoderInfo.getAudioFormatInfo(fStream, Info); - fFormatInfo := TAudioFormatInfo.Create( - Info.channels, - Info.sampleRate, - TAudioSampleFormat(Info.format) - ); - - Result := true; -end; - -procedure TPluginAudioDecodeStream.Close(); -begin - Self.fFilename := PATH_NONE; - if (fStream <> nil) then - begin - fAudioDecoderInfo.close(fStream); - fStream := nil; - end; -end; - -function TPluginAudioDecodeStream.GetLength(): real; -begin - Result := fAudioDecoderInfo.getLength(fStream); -end; - -function TPluginAudioDecodeStream.GetAudioFormatInfo(): TAudioFormatInfo; -begin - Result := fFormatInfo; -end; - -function TPluginAudioDecodeStream.IsEOF(): boolean; -begin - Result := fAudioDecoderInfo.isEOF(fStream); -end; - -function TPluginAudioDecodeStream.IsError(): boolean; -begin - Result := fAudioDecoderInfo.isError(fStream); -end; - -function TPluginAudioDecodeStream.GetPosition(): real; -begin - Result := fAudioDecoderInfo.getPosition(fStream); -end; - -procedure TPluginAudioDecodeStream.SetPosition(Time: real); -begin - fAudioDecoderInfo.setPosition(fStream, Time); -end; - -function TPluginAudioDecodeStream.GetLoop(): boolean; -begin - Result := fAudioDecoderInfo.getLoop(fStream); -end; - -procedure TPluginAudioDecodeStream.SetLoop(Enabled: boolean); -begin - fAudioDecoderInfo.setLoop(fStream, Enabled); -end; - -function TPluginAudioDecodeStream.ReadData(Buffer: PByteArray; BufferSize: integer): integer; -begin - Result := fAudioDecoderInfo.readData(fStream, PCUint8(Buffer), BufferSize); -end; - - -{ TAudioDecoderPlugin } - -constructor TAudioDecoderPlugin.Create(Info: PMediaPluginInfo); -begin - inherited Create(); - fPluginInfo := Info; -end; - -function TAudioDecoderPlugin.GetName: String; -begin - Result := 'Plugin:AudioDecoder:' + fPluginInfo.name; -end; - -function TAudioDecoderPlugin.InitializeDecoder: boolean; -begin - //fPluginInfo.initialize(); - Result := true; -end; - -function TAudioDecoderPlugin.FinalizeDecoder(): boolean; -begin - //fPluginInfo.finalize(); - Result := true; -end; - -function TAudioDecoderPlugin.Open(const Filename: IPath): TAudioDecodeStream; -var - Stream: TPluginAudioDecodeStream; -begin - Result := nil; - - Stream := TPluginAudioDecodeStream.Create(fPluginInfo.audioDecoder); - if (not Stream.Open(Filename)) then - begin - Stream.Free; - Exit; - end; - - Result := Stream; -end; - -end. diff --git a/mediaplugin/src/media/UMediaPlugin.pas b/mediaplugin/src/media/UMediaPlugin.pas index 0fa72852..9f3c8160 100644 --- a/mediaplugin/src/media/UMediaPlugin.pas +++ b/mediaplugin/src/media/UMediaPlugin.pas @@ -157,8 +157,8 @@ uses UPath, UPathUtils, ULog, - UAudioDecoder_FFmpeg, - UVideoDecoder_FFmpeg; + UAudioDecoderPlugin, + UVideoDecoderPlugin; var MediaPluginCore_Instance: TMediaPluginCore; diff --git a/mediaplugin/src/media/UVideoDecoderPlugin.pas b/mediaplugin/src/media/UVideoDecoderPlugin.pas new file mode 100644 index 00000000..684b6031 --- /dev/null +++ b/mediaplugin/src/media/UVideoDecoderPlugin.pas @@ -0,0 +1,215 @@ +{* UltraStar Deluxe - Karaoke Game + * + * UltraStar Deluxe is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * 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; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + *} + +unit UVideoDecoderPlugin; + +interface + +{$IFDEF FPC} + {$MODE Delphi} +{$ENDIF} + +{$I switches.inc} + +uses + UMediaPlugin, + UMusic, + UPath; + +type + TVideoDecoderPlugin = class( TInterfacedObject, IVideoDecoder ) + private + fPluginInfo: PMediaPluginInfo; + public + constructor Create(Info: PMediaPluginInfo); + + function GetName: String; + + function InitializeDecoder(): boolean; + function FinalizeDecoder: boolean; + + function Open(const FileName: IPath): TVideoDecodeStream; + end; + +implementation + +uses + SysUtils, + Math, + ctypes, + UCommon, + UConfig, + ULog; + +type + TPluginVideoDecodeStream = class (TVideoDecodeStream) + private + fVideoDecoderInfo: PVideoDecoderInfo; + fFilename: IPath; + fStream: PVideoDecodeStream; + + public + constructor Create(Info: PVideoDecoderInfo); + destructor Destroy; override; + + function Open(const FileName: IPath): boolean; override; + procedure Close; override; + + procedure SetLoop(Enable: boolean); override; + function GetLoop(): boolean; override; + + procedure SetPosition(Time: real); override; + function GetPosition: real; override; + + function GetFrameWidth(): integer; override; + function GetFrameHeight(): integer; override; + + function GetFrameAspect(): real; override; + function GetFrame(Time: Extended): PByteArray; override; + end; + +{ TVideoDecoderPlugin } + +constructor TVideoDecoderPlugin.Create(Info: PMediaPluginInfo); +begin + inherited Create(); + fPluginInfo := Info; +end; + +function TVideoDecoderPlugin.GetName: String; +begin + Result := 'Plugin:VideoDecoder:' + fPluginInfo.name; +end; + +function TVideoDecoderPlugin.InitializeDecoder(): boolean; +begin + //fPluginInfo.initialize(); + Result := true; +end; + +function TVideoDecoderPlugin.FinalizeDecoder(): boolean; +begin + //fPluginInfo.finalize(); + Result := true; +end; + +function TVideoDecoderPlugin.Open(const FileName : IPath): TVideoDecodeStream; +var + Stream: TPluginVideoDecodeStream; +begin + Result := nil; + + Stream := TPluginVideoDecodeStream.Create(fPluginInfo.videoDecoder); + if (not Stream.Open(FileName)) then + begin + Stream.Free; + Exit; + end; + + Result := Stream +end; + + +{ TPluginVideoDecodeStream } + +constructor TPluginVideoDecodeStream.Create(Info: PVideoDecoderInfo); +begin + inherited Create(); + fVideoDecoderInfo := Info; + fFilename := PATH_NONE; +end; + +destructor TPluginVideoDecodeStream.Destroy; +begin + Close(); + inherited; +end; + +function TPluginVideoDecodeStream.Open(const FileName: IPath): boolean; +begin + Result := false; + + Close(); + + fStream := fVideoDecoderInfo.open(PChar(Filename.ToUTF8())); + if (fStream = nil) then + Exit; + + fFilename := Filename; + + Result := true; +end; + +procedure TPluginVideoDecodeStream.Close; +begin + Self.fFilename := PATH_NONE; + if (fStream <> nil) then + begin + fVideoDecoderInfo.close(fStream); + fStream := nil; + end; +end; + +function TPluginVideoDecodeStream.GetFrame(Time: Extended): PByteArray; +begin + Result := PByteArray(fVideoDecoderInfo.getFrame(fStream, Time)); +end; + +procedure TPluginVideoDecodeStream.SetLoop(Enable: boolean); +begin + fVideoDecoderInfo.setLoop(fStream, Enable); +end; + +function TPluginVideoDecodeStream.GetLoop(): boolean; +begin + Result := fVideoDecoderInfo.getLoop(fStream); +end; + +procedure TPluginVideoDecodeStream.SetPosition(Time: real); +begin + fVideoDecoderInfo.setPosition(fStream, Time); +end; + +function TPluginVideoDecodeStream.GetPosition: real; +begin + Result := fVideoDecoderInfo.getPosition(fStream); +end; + +function TPluginVideoDecodeStream.GetFrameWidth(): integer; +begin + Result := fVideoDecoderInfo.getFrameWidth(fStream); +end; + +function TPluginVideoDecodeStream.GetFrameHeight(): integer; +begin + Result := fVideoDecoderInfo.getFrameHeight(fStream); +end; + +function TPluginVideoDecodeStream.GetFrameAspect(): real; +begin + Result := fVideoDecoderInfo.getFrameAspect(fStream); +end; + +end. diff --git a/mediaplugin/src/media/UVideoDecoder_FFmpeg.pas b/mediaplugin/src/media/UVideoDecoder_FFmpeg.pas deleted file mode 100644 index 073bef9c..00000000 --- a/mediaplugin/src/media/UVideoDecoder_FFmpeg.pas +++ /dev/null @@ -1,215 +0,0 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - *} - -unit UVideoDecoder_FFmpeg; - -interface - -{$IFDEF FPC} - {$MODE Delphi} -{$ENDIF} - -{$I switches.inc} - -uses - UMediaPlugin, - UMusic, - UPath; - -type - TVideoDecoderPlugin = class( TInterfacedObject, IVideoDecoder ) - private - fPluginInfo: PMediaPluginInfo; - public - constructor Create(Info: PMediaPluginInfo); - - function GetName: String; - - function InitializeDecoder(): boolean; - function FinalizeDecoder: boolean; - - function Open(const FileName: IPath): TVideoDecodeStream; - end; - -implementation - -uses - SysUtils, - Math, - ctypes, - UCommon, - UConfig, - ULog; - -type - TPluginVideoDecodeStream = class (TVideoDecodeStream) - private - fVideoDecoderInfo: PVideoDecoderInfo; - fFilename: IPath; - fStream: PVideoDecodeStream; - - public - constructor Create(Info: PVideoDecoderInfo); - destructor Destroy; override; - - function Open(const FileName: IPath): boolean; override; - procedure Close; override; - - procedure SetLoop(Enable: boolean); override; - function GetLoop(): boolean; override; - - procedure SetPosition(Time: real); override; - function GetPosition: real; override; - - function GetFrameWidth(): integer; override; - function GetFrameHeight(): integer; override; - - function GetFrameAspect(): real; override; - function GetFrame(Time: Extended): PByteArray; override; - end; - -{ TVideoDecoderPlugin } - -constructor TVideoDecoderPlugin.Create(Info: PMediaPluginInfo); -begin - inherited Create(); - fPluginInfo := Info; -end; - -function TVideoDecoderPlugin.GetName: String; -begin - Result := 'Plugin:VideoDecoder:' + fPluginInfo.name; -end; - -function TVideoDecoderPlugin.InitializeDecoder(): boolean; -begin - //fPluginInfo.initialize(); - Result := true; -end; - -function TVideoDecoderPlugin.FinalizeDecoder(): boolean; -begin - //fPluginInfo.finalize(); - Result := true; -end; - -function TVideoDecoderPlugin.Open(const FileName : IPath): TVideoDecodeStream; -var - Stream: TPluginVideoDecodeStream; -begin - Result := nil; - - Stream := TPluginVideoDecodeStream.Create(fPluginInfo.videoDecoder); - if (not Stream.Open(FileName)) then - begin - Stream.Free; - Exit; - end; - - Result := Stream -end; - - -{ TPluginVideoDecodeStream } - -constructor TPluginVideoDecodeStream.Create(Info: PVideoDecoderInfo); -begin - inherited Create(); - fVideoDecoderInfo := Info; - fFilename := PATH_NONE; -end; - -destructor TPluginVideoDecodeStream.Destroy; -begin - Close(); - inherited; -end; - -function TPluginVideoDecodeStream.Open(const FileName: IPath): boolean; -begin - Result := false; - - Close(); - - fStream := fVideoDecoderInfo.open(PChar(Filename.ToUTF8())); - if (fStream = nil) then - Exit; - - fFilename := Filename; - - Result := true; -end; - -procedure TPluginVideoDecodeStream.Close; -begin - Self.fFilename := PATH_NONE; - if (fStream <> nil) then - begin - fVideoDecoderInfo.close(fStream); - fStream := nil; - end; -end; - -function TPluginVideoDecodeStream.GetFrame(Time: Extended): PByteArray; -begin - Result := PByteArray(fVideoDecoderInfo.getFrame(fStream, Time)); -end; - -procedure TPluginVideoDecodeStream.SetLoop(Enable: boolean); -begin - fVideoDecoderInfo.setLoop(fStream, Enable); -end; - -function TPluginVideoDecodeStream.GetLoop(): boolean; -begin - Result := fVideoDecoderInfo.getLoop(fStream); -end; - -procedure TPluginVideoDecodeStream.SetPosition(Time: real); -begin - fVideoDecoderInfo.setPosition(fStream, Time); -end; - -function TPluginVideoDecodeStream.GetPosition: real; -begin - Result := fVideoDecoderInfo.getPosition(fStream); -end; - -function TPluginVideoDecodeStream.GetFrameWidth(): integer; -begin - Result := fVideoDecoderInfo.getFrameWidth(fStream); -end; - -function TPluginVideoDecodeStream.GetFrameHeight(): integer; -begin - Result := fVideoDecoderInfo.getFrameHeight(fStream); -end; - -function TPluginVideoDecodeStream.GetFrameAspect(): real; -begin - Result := fVideoDecoderInfo.getFrameAspect(fStream); -end; - -end. diff --git a/mediaplugin/src/ultrastardx.dpr b/mediaplugin/src/ultrastardx.dpr index aafb88b0..26ff65d5 100644 --- a/mediaplugin/src/ultrastardx.dpr +++ b/mediaplugin/src/ultrastardx.dpr @@ -254,11 +254,10 @@ uses //****************************** UMediaPlugin in 'media\UMediaPlugin.pas', - UVideo in 'media\UVideo.pas', + UVideoDecoderPlugin in 'media\UVideoDecoderPlugin.pas', + UAudioDecoderPlugin in 'media\UAudioDecoderPlugin.pas', - // TODO: load dynamically - UVideoDecoder_FFmpeg in 'media\UVideoDecoder_FFmpeg.pas', - UAudioDecoder_FFmpeg in 'media\UAudioDecoder_FFmpeg.pas', + UVideo in 'media\UVideo.pas', {$IFDEF UseProjectM} // must be after UVideo, so it will not be the default video module -- cgit v1.2.3