diff options
author | tobigun <tobigun@b956fd51-792f-4845-bead-9b4dfca2ff2c> | 2010-12-23 11:04:13 +0000 |
---|---|---|
committer | tobigun <tobigun@b956fd51-792f-4845-bead-9b4dfca2ff2c> | 2010-12-23 11:04:13 +0000 |
commit | a35ea9616410d7c7dc8320aadca215442d51554a (patch) | |
tree | 1dc4838440358e33446871108a5f9539db3a122b /mediaplugin/src/mediaplugins | |
parent | 513b9fc615de45378ec2f9403106767204ae3a45 (diff) | |
download | usdx-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')
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()); } }; |