aboutsummaryrefslogtreecommitdiffstats
path: root/mediaplugin/src/media/UAudioDecoder_FFmpeg.pas
diff options
context:
space:
mode:
Diffstat (limited to 'mediaplugin/src/media/UAudioDecoder_FFmpeg.pas')
-rw-r--r--mediaplugin/src/media/UAudioDecoder_FFmpeg.pas83
1 files changed, 40 insertions, 43 deletions
diff --git a/mediaplugin/src/media/UAudioDecoder_FFmpeg.pas b/mediaplugin/src/media/UAudioDecoder_FFmpeg.pas
index 2865a7d8..6047cdd6 100644
--- a/mediaplugin/src/media/UAudioDecoder_FFmpeg.pas
+++ b/mediaplugin/src/media/UAudioDecoder_FFmpeg.pas
@@ -44,28 +44,45 @@ interface
{$I switches.inc}
+uses
+ UMediaPlugin,
+ UMusic,
+ UPath;
+
+type
+ TAudioDecoder_FFmpeg = 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,
- UMediaPlugin,
- UMusic,
UIni,
UMain,
- ULog,
- UPath;
+ ULog;
type
TFFmpegDecodeStream = class(TAudioDecodeStream)
private
+ fAudioDecoderInfo: PAudioDecoderInfo;
fFilename: IPath;
fStream: PAudioDecodeStream;
fFormatInfo: TAudioFormatInfo;
public
- constructor Create();
+ constructor Create(Info: PAudioDecoderInfo);
destructor Destroy(); override;
function Open(const Filename: IPath): boolean;
@@ -83,28 +100,12 @@ type
function ReadData(Buffer: PByteArray; BufferSize: integer): integer; override;
end;
-type
- TAudioDecoder_FFmpeg = class(TInterfacedObject, IAudioDecoder)
- private
- fPluginInfo: PMediaPluginInfo;
- public
- constructor Create();
-
- function GetName: string;
-
- function InitializeDecoder(): boolean;
- function FinalizeDecoder(): boolean;
- function Open(const Filename: IPath): TAudioDecodeStream;
- end;
-
-var
- AudioDecoderInfo: PAudioDecoderInfo;
-
{ TFFmpegDecodeStream }
-constructor TFFmpegDecodeStream.Create();
+constructor TFFmpegDecodeStream.Create(Info: PAudioDecoderInfo);
begin
inherited Create();
+ fAudioDecoderInfo := Info;
fFilename := PATH_NONE;
end;
@@ -125,13 +126,13 @@ begin
Close();
- fStream := AudioDecoderInfo.open(PChar(Filename.ToUTF8()));
+ fStream := fAudioDecoderInfo.open(PChar(Filename.ToUTF8()));
if (fStream = nil) then
Exit;
fFilename := Filename;
- AudioDecoderInfo.getAudioFormatInfo(fStream, Info);
+ fAudioDecoderInfo.getAudioFormatInfo(fStream, Info);
fFormatInfo := TAudioFormatInfo.Create(
Info.channels,
Info.sampleRate,
@@ -146,14 +147,14 @@ begin
Self.fFilename := PATH_NONE;
if (fStream <> nil) then
begin
- AudioDecoderInfo.close(fStream);
+ fAudioDecoderInfo.close(fStream);
fStream := nil;
end;
end;
function TFFmpegDecodeStream.GetLength(): real;
begin
- Result := AudioDecoderInfo.getLength(fStream);
+ Result := fAudioDecoderInfo.getLength(fStream);
end;
function TFFmpegDecodeStream.GetAudioFormatInfo(): TAudioFormatInfo;
@@ -163,46 +164,46 @@ end;
function TFFmpegDecodeStream.IsEOF(): boolean;
begin
- Result := AudioDecoderInfo.isEOF(fStream);
+ Result := fAudioDecoderInfo.isEOF(fStream);
end;
function TFFmpegDecodeStream.IsError(): boolean;
begin
- Result := AudioDecoderInfo.isError(fStream);
+ Result := fAudioDecoderInfo.isError(fStream);
end;
function TFFmpegDecodeStream.GetPosition(): real;
begin
- Result := AudioDecoderInfo.getPosition(fStream);
+ Result := fAudioDecoderInfo.getPosition(fStream);
end;
procedure TFFmpegDecodeStream.SetPosition(Time: real);
begin
- AudioDecoderInfo.setPosition(fStream, Time);
+ fAudioDecoderInfo.setPosition(fStream, Time);
end;
function TFFmpegDecodeStream.GetLoop(): boolean;
begin
- Result := AudioDecoderInfo.getLoop(fStream);
+ Result := fAudioDecoderInfo.getLoop(fStream);
end;
procedure TFFmpegDecodeStream.SetLoop(Enabled: boolean);
begin
- AudioDecoderInfo.setLoop(fStream, Enabled);
+ fAudioDecoderInfo.setLoop(fStream, Enabled);
end;
function TFFmpegDecodeStream.ReadData(Buffer: PByteArray; BufferSize: integer): integer;
begin
- Result := AudioDecoderInfo.readData(fStream, PCUint8(Buffer), BufferSize);
+ Result := fAudioDecoderInfo.readData(fStream, PCUint8(Buffer), BufferSize);
end;
{ TAudioDecoder_FFmpeg }
-constructor TAudioDecoder_FFmpeg.Create();
+constructor TAudioDecoder_FFmpeg.Create(Info: PMediaPluginInfo);
begin
inherited Create();
- fPluginInfo := Plugin_register(MediaPluginCore);
+ fPluginInfo := Info;
end;
function TAudioDecoder_FFmpeg.GetName: String;
@@ -212,14 +213,13 @@ end;
function TAudioDecoder_FFmpeg.InitializeDecoder: boolean;
begin
- fPluginInfo.initialize();
- AudioDecoderInfo := fPluginInfo.audioDecoder;
+ //fPluginInfo.initialize();
Result := true;
end;
function TAudioDecoder_FFmpeg.FinalizeDecoder(): boolean;
begin
- fPluginInfo.finalize();
+ //fPluginInfo.finalize();
Result := true;
end;
@@ -229,7 +229,7 @@ var
begin
Result := nil;
- Stream := TFFmpegDecodeStream.Create();
+ Stream := TFFmpegDecodeStream.Create(fPluginInfo.audioDecoder);
if (not Stream.Open(Filename)) then
begin
Stream.Free;
@@ -239,7 +239,4 @@ begin
Result := Stream;
end;
-initialization
- MediaManager.Add(TAudioDecoder_FFmpeg.Create);
-
end.