aboutsummaryrefslogtreecommitdiffstats
path: root/mediaplugin/src/media/UMediaPlugin.pas
diff options
context:
space:
mode:
authortobigun <tobigun@b956fd51-792f-4845-bead-9b4dfca2ff2c>2010-10-19 20:52:24 +0000
committertobigun <tobigun@b956fd51-792f-4845-bead-9b4dfca2ff2c>2010-10-19 20:52:24 +0000
commit8913873e901f64846217bfa30c9bc04e1a0ac420 (patch)
tree650e6dba795b7c67e95d6438761e7aa64882a7dd /mediaplugin/src/media/UMediaPlugin.pas
parentcd5942b0d8f714bd3869004f0dba71c312b0d822 (diff)
downloadusdx-8913873e901f64846217bfa30c9bc04e1a0ac420.tar.gz
usdx-8913873e901f64846217bfa30c9bc04e1a0ac420.tar.xz
usdx-8913873e901f64846217bfa30c9bc04e1a0ac420.zip
audio code replaced by (yet pseudo-)plugin
git-svn-id: svn://svn.code.sf.net/p/ultrastardx/svn/branches/experimental@2687 b956fd51-792f-4845-bead-9b4dfca2ff2c
Diffstat (limited to 'mediaplugin/src/media/UMediaPlugin.pas')
-rw-r--r--mediaplugin/src/media/UMediaPlugin.pas132
1 files changed, 132 insertions, 0 deletions
diff --git a/mediaplugin/src/media/UMediaPlugin.pas b/mediaplugin/src/media/UMediaPlugin.pas
new file mode 100644
index 00000000..097a28f2
--- /dev/null
+++ b/mediaplugin/src/media/UMediaPlugin.pas
@@ -0,0 +1,132 @@
+{* 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 UMediaPlugin;
+
+interface
+
+{$IFDEF FPC}
+ {$MODE DELPHI }
+ {$PACKENUM 4} (* use 4-byte enums *)
+ {$PACKRECORDS C} (* C/C++-compatible record packing *)
+{$ELSE}
+ {$MINENUMSIZE 4} (* use 4-byte enums *)
+{$ENDIF}
+
+uses
+ ctypes;
+
+type
+ PMediaPluginCore = ^TMediaPluginCore;
+ TMediaPluginCore = record
+ log: procedure(level: cint; msg: PChar; context: PChar); cdecl;
+ end;
+
+ PDecodeStream = Pointer;
+
+ PCAudioFormatInfo = ^TCAudioFormatInfo;
+ TCAudioFormatInfo = record
+ sampleRate: double;
+ channels: cuint8;
+ format: cint;
+ end;
+
+const
+{$IFDEF MSWINDOWS}
+ ffmpegPlugin = 'ffmpeg_playback.dll';
+{$ENDIF}
+{$IFDEF LINUX}
+ ffmpegPlugin = 'ffmpeg_playback';
+{$ENDIF}
+{$IFDEF DARWIN}
+ ffmpegPlugin = 'ffmpeg_playback.dylib';
+ {$linklib ffmpegPlugin}
+{$ENDIF}
+
+function Plugin_initialize(core: PMediaPluginCore): cbool;
+ cdecl; external ffmpegPlugin;
+
+function DecodeStream_open(filename: PAnsiChar): PDecodeStream;
+ cdecl; external ffmpegPlugin;
+procedure DecodeStream_close(stream: PDecodeStream);
+ cdecl; external ffmpegPlugin;
+function DecodeStream_getLength(stream: PDecodeStream): double;
+ cdecl; external ffmpegPlugin;
+procedure DecodeStream_getAudioFormatInfo(stream: PDecodeStream; var info: TCAudioFormatInfo);
+ cdecl; external ffmpegPlugin;
+function DecodeStream_getPosition(stream: PDecodeStream): double;
+ cdecl; external ffmpegPlugin;
+procedure DecodeStream_setPosition(stream: PDecodeStream; time: double);
+ cdecl; external ffmpegPlugin;
+function DecodeStream_getLoop(stream: PDecodeStream): cbool;
+ cdecl; external ffmpegPlugin;
+procedure DecodeStream_setLoop(stream: PDecodeStream; enabled: cbool);
+ cdecl; external ffmpegPlugin;
+function DecodeStream_isEOF(stream: PDecodeStream): cbool;
+ cdecl; external ffmpegPlugin;
+function DecodeStream_isError(stream: PDecodeStream): cbool;
+ cdecl; external ffmpegPlugin;
+function DecodeStream_readData(stream: PDecodeStream; buffer: PCUint8; bufferSize: cint): cint;
+ cdecl; external ffmpegPlugin;
+
+function MediaPluginCore: PMediaPluginCore;
+
+implementation
+
+uses
+ ULog;
+
+var
+ MediaPluginCore_Instance: TMediaPluginCore;
+
+const
+ DebugLogLevels: array[0 .. 5] of integer = (
+ LOG_LEVEL_DEBUG,
+ LOG_LEVEL_INFO,
+ LOG_LEVEL_STATUS,
+ LOG_LEVEL_WARN,
+ LOG_LEVEL_ERROR,
+ LOG_LEVEL_CRITICAL
+ );
+
+procedure LogFunc(level: cint; msg: PChar; context: PChar); cdecl;
+begin
+ Log.LogMsg(msg, context, DebugLogLevels[level]);
+end;
+
+function MediaPluginCore: PMediaPluginCore;
+begin
+ Result := @MediaPluginCore_Instance;
+end;
+
+procedure InitializeMediaPluginCore;
+begin
+ MediaPluginCore.log := LogFunc;
+end;
+
+initialization
+ InitializeMediaPluginCore;
+
+end.