aboutsummaryrefslogtreecommitdiffstats
path: root/mediaplugin/src/plugins
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--mediaplugin/src/plugins/media/ffmpeg/ffmpeg_core.cpp48
-rw-r--r--mediaplugin/src/plugins/media/ffmpeg/ffmpeg_core.h4
2 files changed, 29 insertions, 23 deletions
diff --git a/mediaplugin/src/plugins/media/ffmpeg/ffmpeg_core.cpp b/mediaplugin/src/plugins/media/ffmpeg/ffmpeg_core.cpp
index 6f48c199..7e55802b 100644
--- a/mediaplugin/src/plugins/media/ffmpeg/ffmpeg_core.cpp
+++ b/mediaplugin/src/plugins/media/ffmpeg/ffmpeg_core.cpp
@@ -28,16 +28,10 @@
const uint8_t* STATUS_PACKET = (uint8_t*)"STATUS_PACKET";
-static int CDECL ffmpegStreamOpen(URLContext *h, const char *filename, int flags);
-static int CDECL ffmpegStreamRead(URLContext *h, uint8_t *buf, int size);
-static int CDECL ffmpegStreamWrite(URLContext *h, const unsigned char *buf, int size);
-static int64_t CDECL ffmpegStreamSeek(URLContext *h, int64_t pos, int whence);
-static int CDECL ffmpegStreamClose(URLContext *h);
-
#define UNICODE_PROTOCOL_NAME "ufile"
#define UNICODE_PROTOCOL_PREFIX UNICODE_PROTOCOL_NAME ":"
-std::string hexVerToStr(unsigned version) {
+std::string MediaCore_FFmpeg::hexVerToStr(unsigned version) {
unsigned major = (version >> 16) & 0xFF;
unsigned minor = (version >> 8) & 0xFF;
unsigned release = version & 0xFF;
@@ -46,7 +40,7 @@ std::string hexVerToStr(unsigned version) {
return s.str();
}
-void checkVersions() {
+void MediaCore_FFmpeg::checkVersions() {
unsigned libVersion;
unsigned headerVersion;
@@ -96,16 +90,7 @@ void checkVersions() {
MediaCore_FFmpeg::MediaCore_FFmpeg() {
checkVersions();
-
- memset(&utf8FileProtocol, 0, sizeof(URLProtocol));
- utf8FileProtocol.name = UNICODE_PROTOCOL_NAME;
- utf8FileProtocol.url_open = ffmpegStreamOpen;
- utf8FileProtocol.url_read = ffmpegStreamRead;
- utf8FileProtocol.url_write = ffmpegStreamWrite;
- utf8FileProtocol.url_seek = ffmpegStreamSeek;
- utf8FileProtocol.url_close = ffmpegStreamClose;
-
- av_register_protocol2(&utf8FileProtocol, sizeof(URLProtocol));
+ registerUTF8FileProtocol();
}
MediaCore_FFmpeg::~MediaCore_FFmpeg() {
@@ -204,7 +189,7 @@ bool MediaCore_FFmpeg::convertFFmpegToAudioFormat(SampleFormat ffmpegFormat, aud
* http://www.mail-archive.com/libav-user@mplayerhq.hu/msg02460.html
*/
-int CDECL ffmpegStreamOpen(URLContext *h, const char *filename, int flags) {
+static int CDECL ffmpegStreamOpen(URLContext *h, const char *filename, int flags) {
// check for protocol prefix ("ufile:") and strip it
const std::string protPrefix(UNICODE_PROTOCOL_PREFIX);
std::string utf8Filename(filename);
@@ -230,17 +215,22 @@ int CDECL ffmpegStreamOpen(URLContext *h, const char *filename, int flags) {
return 0;
}
-int CDECL ffmpegStreamRead(URLContext *h, uint8_t *buf, int size) {
+static int CDECL ffmpegStreamRead(URLContext *h, uint8_t *buf, int size) {
fileStream_t *stream = (fileStream_t*)h->priv_data;
return pluginCore->fileRead(stream, buf, size);
}
-int CDECL ffmpegStreamWrite(URLContext *h, const uint8_t *buf, int size) {
+#if LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT(52,68,0)
+static int CDECL ffmpegStreamWrite(URLContext *h, const unsigned char *buf, int size)
+#else
+static int CDECL ffmpegStreamWrite(URLContext *h, unsigned char *buf, int size)
+#endif
+{
fileStream_t *stream = (fileStream_t*)h->priv_data;
return pluginCore->fileWrite(stream, buf, size);
}
-int64_t CDECL ffmpegStreamSeek(URLContext *h, int64_t pos, int whence) {
+static int64_t CDECL ffmpegStreamSeek(URLContext *h, int64_t pos, int whence) {
fileStream_t *stream = (fileStream_t*)h->priv_data;
switch (whence) {
case AVSEEK_SIZE:
@@ -250,12 +240,24 @@ int64_t CDECL ffmpegStreamSeek(URLContext *h, int64_t pos, int whence) {
}
}
-int CDECL ffmpegStreamClose(URLContext *h) {
+static int CDECL ffmpegStreamClose(URLContext *h) {
fileStream_t *stream = (fileStream_t*)h->priv_data;
pluginCore->fileClose(stream);
return 0;
}
+void MediaCore_FFmpeg::registerUTF8FileProtocol() {
+ memset(&utf8FileProtocol, 0, sizeof(URLProtocol));
+ utf8FileProtocol.name = UNICODE_PROTOCOL_NAME;
+ utf8FileProtocol.url_open = ffmpegStreamOpen;
+ utf8FileProtocol.url_read = ffmpegStreamRead;
+ utf8FileProtocol.url_write = ffmpegStreamWrite;
+ utf8FileProtocol.url_seek = ffmpegStreamSeek;
+ utf8FileProtocol.url_close = ffmpegStreamClose;
+
+ av_register_protocol2(&utf8FileProtocol, sizeof(URLProtocol));
+}
+
/* PacketQueue */
PacketQueue::PacketQueue() :
diff --git a/mediaplugin/src/plugins/media/ffmpeg/ffmpeg_core.h b/mediaplugin/src/plugins/media/ffmpeg/ffmpeg_core.h
index 9b55d5e4..e55b6a96 100644
--- a/mediaplugin/src/plugins/media/ffmpeg/ffmpeg_core.h
+++ b/mediaplugin/src/plugins/media/ffmpeg/ffmpeg_core.h
@@ -83,6 +83,10 @@ class MediaCore_FFmpeg {
private:
URLProtocol utf8FileProtocol;
Mutex _codecLock;
+
+ std::string hexVerToStr(unsigned version);
+ void checkVersions();
+ void registerUTF8FileProtocol();
public:
MediaCore_FFmpeg();
~MediaCore_FFmpeg();