aboutsummaryrefslogtreecommitdiffstats
path: root/mediaplugin/src/mediaplugins
diff options
context:
space:
mode:
authortobigun <tobigun@b956fd51-792f-4845-bead-9b4dfca2ff2c>2010-12-23 11:04:13 +0000
committertobigun <tobigun@b956fd51-792f-4845-bead-9b4dfca2ff2c>2010-12-23 11:04:13 +0000
commita35ea9616410d7c7dc8320aadca215442d51554a (patch)
tree1dc4838440358e33446871108a5f9539db3a122b /mediaplugin/src/mediaplugins
parent513b9fc615de45378ec2f9403106767204ae3a45 (diff)
downloadusdx-a35ea9616410d7c7dc8320aadca215442d51554a.tar.gz
usdx-a35ea9616410d7c7dc8320aadca215442d51554a.tar.xz
usdx-a35ea9616410d7c7dc8320aadca215442d51554a.zip
Path class implemented for full unicode support
git-svn-id: svn://svn.code.sf.net/p/ultrastardx/svn/branches/experimental@2770 b956fd51-792f-4845-bead-9b4dfca2ff2c
Diffstat (limited to 'mediaplugin/src/mediaplugins')
-rw-r--r--mediaplugin/src/mediaplugins/ffmpeg/ffmpeg_audio_decode.cpp4
-rw-r--r--mediaplugin/src/mediaplugins/ffmpeg/ffmpeg_audio_decode.h6
-rw-r--r--mediaplugin/src/mediaplugins/ffmpeg/ffmpeg_video_decode.cpp4
-rw-r--r--mediaplugin/src/mediaplugins/ffmpeg/ffmpeg_video_decode.h4
-rw-r--r--mediaplugin/src/mediaplugins/include/core/plugin_core.h11
-rw-r--r--mediaplugin/src/mediaplugins/include/core/util.h46
6 files changed, 48 insertions, 27 deletions
diff --git a/mediaplugin/src/mediaplugins/ffmpeg/ffmpeg_audio_decode.cpp b/mediaplugin/src/mediaplugins/ffmpeg/ffmpeg_audio_decode.cpp
index ce15f7a7..01dfdf1c 100644
--- a/mediaplugin/src/mediaplugins/ffmpeg/ffmpeg_audio_decode.cpp
+++ b/mediaplugin/src/mediaplugins/ffmpeg/ffmpeg_audio_decode.cpp
@@ -80,7 +80,7 @@ FFmpegAudioDecodeStream::FFmpegAudioDecodeStream() :
memset(&_audioPaketTemp, 0, sizeof(_audioPaketTemp));
}
-FFmpegAudioDecodeStream* FFmpegAudioDecodeStream::open(const IPath &filename) {
+FFmpegAudioDecodeStream* FFmpegAudioDecodeStream::open(const Path &filename) {
FFmpegAudioDecodeStream *stream = new FFmpegAudioDecodeStream();
if (!stream->_open(filename)) {
delete stream;
@@ -89,7 +89,7 @@ FFmpegAudioDecodeStream* FFmpegAudioDecodeStream::open(const IPath &filename) {
return stream;
}
-bool FFmpegAudioDecodeStream::_open(const IPath &filename) {
+bool FFmpegAudioDecodeStream::_open(const Path &filename) {
_filename = filename;
if (!filename.isFile()) {
logger.error("Audio-file does not exist: '" + filename.toNative() + "'", "UAudio_FFmpeg");
diff --git a/mediaplugin/src/mediaplugins/ffmpeg/ffmpeg_audio_decode.h b/mediaplugin/src/mediaplugins/ffmpeg/ffmpeg_audio_decode.h
index c0d1b288..93711dc5 100644
--- a/mediaplugin/src/mediaplugins/ffmpeg/ffmpeg_audio_decode.h
+++ b/mediaplugin/src/mediaplugins/ffmpeg/ffmpeg_audio_decode.h
@@ -87,7 +87,7 @@ private:
int _audioBufferSize;
DECLARE_ALIGNED(16, uint8_t, _audioBuffer[AUDIO_BUFFER_SIZE]);
- IPath _filename;
+ Path _filename;
private:
FFmpegAudioDecodeStream();
@@ -119,7 +119,7 @@ private:
int decodeFrame(uint8_t *buffer, int bufferSize);
void flushCodecBuffers();
- bool _open(const IPath &filename);
+ bool _open(const Path &filename);
void close();
public:
@@ -127,7 +127,7 @@ public:
close();
}
- static FFmpegAudioDecodeStream* open(const IPath &filename);
+ static FFmpegAudioDecodeStream* open(const Path &filename);
virtual double getLength();
diff --git a/mediaplugin/src/mediaplugins/ffmpeg/ffmpeg_video_decode.cpp b/mediaplugin/src/mediaplugins/ffmpeg/ffmpeg_video_decode.cpp
index ad34c7f3..4dbe6558 100644
--- a/mediaplugin/src/mediaplugins/ffmpeg/ffmpeg_video_decode.cpp
+++ b/mediaplugin/src/mediaplugins/ffmpeg/ffmpeg_video_decode.cpp
@@ -79,7 +79,7 @@ FFmpegVideoDecodeStream::FFmpegVideoDecodeStream() :
_frameTime(0),
_loopTime(0) {}
-FFmpegVideoDecodeStream* FFmpegVideoDecodeStream::open(const IPath &filename,
+FFmpegVideoDecodeStream* FFmpegVideoDecodeStream::open(const Path &filename,
videoFrameFormat_t format)
{
FFmpegVideoDecodeStream *stream = new FFmpegVideoDecodeStream();
@@ -90,7 +90,7 @@ FFmpegVideoDecodeStream* FFmpegVideoDecodeStream::open(const IPath &filename,
return stream;
}
-bool FFmpegVideoDecodeStream::_open(const IPath &filename, videoFrameFormat_t format) {
+bool FFmpegVideoDecodeStream::_open(const Path &filename, videoFrameFormat_t format) {
std::stringstream ss;
// use custom 'ufile' protocol for UTF-8 support
diff --git a/mediaplugin/src/mediaplugins/ffmpeg/ffmpeg_video_decode.h b/mediaplugin/src/mediaplugins/ffmpeg/ffmpeg_video_decode.h
index addf2a82..59a46267 100644
--- a/mediaplugin/src/mediaplugins/ffmpeg/ffmpeg_video_decode.h
+++ b/mediaplugin/src/mediaplugins/ffmpeg/ffmpeg_video_decode.h
@@ -71,7 +71,7 @@ private:
bool decodeFrame();
void synchronizeTime(AVFrame *frame, double &pts);
- bool _open(const IPath &filename, videoFrameFormat_t format);
+ bool _open(const Path &filename, videoFrameFormat_t format);
void close();
public:
@@ -79,7 +79,7 @@ public:
close();
}
- static FFmpegVideoDecodeStream* open(const IPath &filename, videoFrameFormat_t format);
+ static FFmpegVideoDecodeStream* open(const Path &filename, videoFrameFormat_t format);
virtual void setLoop(bool enable);
virtual bool getLoop();
diff --git a/mediaplugin/src/mediaplugins/include/core/plugin_core.h b/mediaplugin/src/mediaplugins/include/core/plugin_core.h
index 69cc7f19..0979b992 100644
--- a/mediaplugin/src/mediaplugins/include/core/plugin_core.h
+++ b/mediaplugin/src/mediaplugins/include/core/plugin_core.h
@@ -111,6 +111,9 @@ typedef struct{} thread_t;
typedef struct pluginCore_t {
int version;
+ void* PLUGIN_CALL (*memAlloc)(int size);
+ void PLUGIN_CALL (*memFree)(void* ptr);
+
void PLUGIN_CALL (*log)(int level, const char *msg, const char *context);
uint32_t PLUGIN_CALL (*ticksMillis)();
@@ -121,6 +124,14 @@ typedef struct pluginCore_t {
int64_t PLUGIN_CALL (*fileSeek)(fileStream_t *stream, int64_t pos, int whence);
int64_t PLUGIN_CALL (*fileSize)(fileStream_t *stream);
+ // Note: result string must be freed with memFree()
+ const char* PLUGIN_CALL (*pathToNative)(const char *path);
+ // Note: result string must be freed with memFree()
+ const char* PLUGIN_CALL (*pathToUTF8)(const char *path, BOOL useNativeDelim);
+ // Note: result string must be freed with memFree()
+ wchar_t* PLUGIN_CALL (*pathToWide)(const char *path, BOOL useNativeDelim);
+ BOOL PLUGIN_CALL (*pathIsFile)(const char *path);
+
thread_t* PLUGIN_CALL (*threadCreate)(int (PLUGIN_CALL *fn)(void *), void *data);
uint32_t PLUGIN_CALL (*threadCurrentID)();
uint32_t PLUGIN_CALL (*threadGetID)(thread_t *thread);
diff --git a/mediaplugin/src/mediaplugins/include/core/util.h b/mediaplugin/src/mediaplugins/include/core/util.h
index ba7ae2a4..6b402774 100644
--- a/mediaplugin/src/mediaplugins/include/core/util.h
+++ b/mediaplugin/src/mediaplugins/include/core/util.h
@@ -99,35 +99,45 @@ public:
//AudioFormatInfo copy();
};
-class IPath {
+class Path {
private:
std::string _filename;
public:
- IPath(const char *filename) :
- _filename(filename)
- {
- // TODO
- }
+ Path(const char *filename) :
+ _filename(filename) {}
- IPath(std::string filename) :
- _filename(filename)
- {
- // TODO
- }
+ Path(std::string filename) :
+ _filename(filename) {}
std::string toNative() const {
- // TODO
- return _filename;
+ const char* cstr = pluginCore->pathToNative(_filename.c_str());
+ std::string result(cstr);
+ pluginCore->memFree((void*)cstr);
+ return result;
+ }
+
+ std::string toUTF8(bool useNativeDelim = true) const {
+ const char* cstr = pluginCore->pathToUTF8(_filename.c_str(),
+ useNativeDelim ? TRUE : FALSE);
+ std::string result(cstr);
+ pluginCore->memFree((void*)cstr);
+ return result;
}
- std::string toUTF8() const {
- // TODO
- return _filename;
+// TODO: wchar_t sizes differ on Windows (2 byte)/Linux (4 byte).
+// USDX uses the Pascal WideChar type which is 2 bytes in size.
+#ifdef _WIN32
+ std::wstring toWide(bool useNativeDelim = true) const {
+ const wchar_t* cstr = pluginCore->pathToWide(_filename.c_str(),
+ useNativeDelim ? TRUE : FALSE);
+ std::wstring result(cstr);
+ pluginCore->memFree((void*)cstr);
+ return result;
}
+#endif
bool isFile() const {
- // TODO
- return true;
+ return pluginCore->pathIsFile(_filename.c_str());
}
};