|
|
956ec70 |
diff -Nur audacious-plugins-fedora-2.1-orig/src/musepack/libmpc.cxx audacious-plugins-fedora-2.1-musepack/src/musepack/libmpc.cxx
|
|
|
956ec70 |
--- audacious-plugins-fedora-2.1-orig/src/musepack/libmpc.cxx 2009-07-07 00:40:36.000000000 +0200
|
|
|
efe8268 |
+++ audacious-plugins-fedora-2.1-musepack/src/musepack/libmpc.cxx 2009-11-30 11:49:47.000000000 +0100
|
|
|
4e8f14f |
@@ -48,8 +48,7 @@
|
|
|
1ef2bed |
static MpcDecoder mpcDecoder = {0};
|
|
|
1ef2bed |
static TrackInfo track = {0};
|
|
|
1ef2bed |
|
|
|
1ef2bed |
-static GThread *threadHandle;
|
|
|
4e8f14f |
-static GStaticMutex threadMutex = G_STATIC_MUTEX_INIT;
|
|
|
4e8f14f |
+/* static GStaticMutex threadMutex = G_STATIC_MUTEX_INIT; */
|
|
|
1ef2bed |
|
|
|
1ef2bed |
/*
|
|
|
4e8f14f |
* VFS callback implementation, adapted from mpc_reader.c.
|
|
|
efe8268 |
@@ -301,24 +300,16 @@
|
|
|
1ef2bed |
mpcDecoder.isAlive = true;
|
|
|
1ef2bed |
mpcDecoder.isOutput = false;
|
|
|
1ef2bed |
mpcDecoder.isPause = false;
|
|
|
1ef2bed |
- threadHandle = g_thread_self();
|
|
|
62a66f2 |
- data->set_pb_ready(data);
|
|
|
1ef2bed |
decodeStream(data);
|
|
|
956ec70 |
+ data->playing = FALSE;
|
|
|
1ef2bed |
}
|
|
|
956ec70 |
|
|
|
1ef2bed |
static void mpcStop(InputPlayback *data)
|
|
|
1ef2bed |
{
|
|
|
efe8268 |
+ data->playing = FALSE;
|
|
|
efe8268 |
+ mpcDecoder.isPause = false;
|
|
|
efe8268 |
+ mpcDecoder.offset = -1;
|
|
|
1ef2bed |
setAlive(false);
|
|
|
1ef2bed |
- if (threadHandle)
|
|
|
1ef2bed |
- {
|
|
|
1ef2bed |
- g_thread_join(threadHandle);
|
|
|
efe8268 |
- if (mpcDecoder.isOutput)
|
|
|
efe8268 |
- {
|
|
|
efe8268 |
- data->output->buffer_free();
|
|
|
efe8268 |
- data->output->close_audio();
|
|
|
efe8268 |
- mpcDecoder.isOutput = false;
|
|
|
efe8268 |
- }
|
|
|
1ef2bed |
- }
|
|
|
1ef2bed |
}
|
|
|
1ef2bed |
|
|
|
1ef2bed |
static void mpcPause(InputPlayback *data, short p_Pause)
|
|
|
efe8268 |
@@ -823,7 +814,9 @@
|
|
|
4e8f14f |
lockRelease();
|
|
|
4e8f14f |
|
|
|
4e8f14f |
gint counter = 2 * track.sampleFreq / 3;
|
|
|
4e8f14f |
- while (isAlive())
|
|
|
62a66f2 |
+ data->playing = TRUE;
|
|
|
62a66f2 |
+ data->set_pb_ready(data);
|
|
|
4e8f14f |
+ while (isAlive() && data->playing)
|
|
|
4e8f14f |
{
|
|
|
4e8f14f |
if (getOffset() != -1)
|
|
|
4e8f14f |
{
|
|
|
efe8268 |
@@ -832,18 +825,19 @@
|
|
|
4e8f14f |
}
|
|
|
1ef2bed |
|
|
|
1ef2bed |
lockAcquire();
|
|
|
4e8f14f |
- short iPlaying = data->output->buffer_playing()? 1 : 0;
|
|
|
1ef2bed |
- gint iFree = data->output->buffer_free();
|
|
|
1ef2bed |
- if (!mpcDecoder.isPause && iFree >= ((1152 * 4) << iPlaying))
|
|
|
1ef2bed |
+ if (!mpcDecoder.isPause)
|
|
|
1ef2bed |
{
|
|
|
4e8f14f |
- unsigned status = processBuffer(data, sampleBuffer, xmmsBuffer, decoder);
|
|
|
4e8f14f |
- if (status == (unsigned) (-1))
|
|
|
4e8f14f |
+ guint status = processBuffer(data, sampleBuffer, xmmsBuffer, decoder);
|
|
|
4e8f14f |
+ if (status == (guint)(-1))
|
|
|
4e8f14f |
{
|
|
|
4e8f14f |
mpcDecoder.isError = g_strdup_printf("[xmms-musepack] error from internal decoder on %s", filename);
|
|
|
efe8268 |
- return endThread(filename, input, true);
|
|
|
efe8268 |
+ break;
|
|
|
efe8268 |
+ }
|
|
|
4e8f14f |
+ if (status == 0) {
|
|
|
4e8f14f |
+ data->eof = TRUE;
|
|
|
4e8f14f |
+ data->playing = FALSE;
|
|
|
efe8268 |
+ break;
|
|
|
efe8268 |
}
|
|
|
efe8268 |
- if (status == 0 && iPlaying == 0)
|
|
|
efe8268 |
- return endThread(filename, input, true);
|
|
|
4e8f14f |
|
|
|
1ef2bed |
lockRelease();
|
|
|
4e8f14f |
|
|
|
efe8268 |
@@ -863,16 +857,22 @@
|
|
|
efe8268 |
g_usleep(10000);
|
|
|
efe8268 |
}
|
|
|
efe8268 |
}
|
|
|
efe8268 |
+ data->output->buffer_free();
|
|
|
efe8268 |
+ data->output->close_audio();
|
|
|
efe8268 |
+ mpcDecoder.isOutput = false;
|
|
|
1ef2bed |
return endThread(filename, input, false);
|
|
|
4e8f14f |
}
|
|
|
4e8f14f |
|
|
|
4e8f14f |
-static int processBuffer(InputPlayback *playback,
|
|
|
4e8f14f |
+static guint processBuffer(InputPlayback *playback,
|
|
|
4e8f14f |
MPC_SAMPLE_FORMAT* sampleBuffer, char* xmmsBuffer, mpc_decoder& decoder)
|
|
|
4e8f14f |
{
|
|
|
4e8f14f |
mpc_uint32_t vbrAcc = 0;
|
|
|
4e8f14f |
mpc_uint32_t vbrUpd = 0;
|
|
|
4e8f14f |
|
|
|
4e8f14f |
- unsigned status = mpc_decoder_decode(&decoder, sampleBuffer, &vbrAcc, &vbrUpd);
|
|
|
4e8f14f |
+ guint status = mpc_decoder_decode(&decoder, sampleBuffer, &vbrAcc, &vbrUpd);
|
|
|
62a66f2 |
+ if (status == (guint)(-1)) {
|
|
|
62a66f2 |
+ return status;
|
|
|
62a66f2 |
+ }
|
|
|
4e8f14f |
copyBuffer(sampleBuffer, xmmsBuffer, status);
|
|
|
4e8f14f |
|
|
|
4e8f14f |
if (pluginConfig.dynamicBitrate)
|
|
|
62a66f2 |
@@ -911,12 +911,12 @@
|
|
|
1ef2bed |
|
|
|
1ef2bed |
inline static void lockAcquire()
|
|
|
1ef2bed |
{
|
|
|
1ef2bed |
- g_static_mutex_lock(&threadMutex);
|
|
|
1ef2bed |
+ /* g_static_mutex_lock(&threadMutex); */
|
|
|
1ef2bed |
}
|
|
|
1ef2bed |
|
|
|
1ef2bed |
inline static void lockRelease()
|
|
|
1ef2bed |
{
|
|
|
1ef2bed |
- g_static_mutex_unlock(&threadMutex);
|
|
|
1ef2bed |
+ /* g_static_mutex_unlock(&threadMutex); */
|
|
|
1ef2bed |
}
|
|
|
1ef2bed |
|
|
|
1ef2bed |
inline static bool isAlive()
|
|
|
4e8f14f |
diff -Nur audacious-plugins-fedora-2.1-orig/src/musepack/libmpc.h audacious-plugins-fedora-2.1-musepack/src/musepack/libmpc.h
|
|
|
4e8f14f |
--- audacious-plugins-fedora-2.1-orig/src/musepack/libmpc.h 2009-07-07 00:40:36.000000000 +0200
|
|
|
62a66f2 |
+++ audacious-plugins-fedora-2.1-musepack/src/musepack/libmpc.h 2009-11-17 22:43:37.323774131 +0100
|
|
|
4e8f14f |
@@ -123,7 +123,7 @@
|
|
|
4e8f14f |
static void lockAcquire();
|
|
|
4e8f14f |
static void lockRelease();
|
|
|
4e8f14f |
static void* decodeStream(InputPlayback*);
|
|
|
4e8f14f |
-static int processBuffer(InputPlayback*, MPC_SAMPLE_FORMAT*, char*, mpc_decoder&);
|
|
|
4e8f14f |
+static guint processBuffer(InputPlayback*, MPC_SAMPLE_FORMAT*, char*, mpc_decoder&);
|
|
|
4e8f14f |
//static void* endThread(char*, FILE*, bool);
|
|
|
4e8f14f |
static bool isAlive();
|
|
|
4e8f14f |
static void setAlive(bool);
|