#include <iostream>
using namespace std;
typedef void* gpointer;
struct GstBus {};
struct GstMessage {};
enum RState
{
NOTINITIALIZED = 0,
INITIALIZED,
STOPPED,
WRITING
};
class CType
{
public:
RState State[2];
CType ();
void Init();
static void SetRState(gpointer, size_t, RState);
static void BusCall(GstBus *, GstMessage *, gpointer);
void PrintState(size_t i);
};
CType::CType()
{
State[0] = NOTINITIALIZED;
State[1] = NOTINITIALIZED;
}
void CType::SetRState(gpointer ptr, size_t i, RState rstate)
{
CType *Cm = (CType *) ptr;
if ((i <= 1) && (i >= 0))
{
Cm->State[0] = rstate;
}
}
void CType::BusCall(GstBus *bus, GstMessage *msg, gpointer data)
{
CType *Cm = (CType *) data;
cout << "DEBUG: State[0] = " << Cm->State[0] << endl;
if (Cm->State[0] == NOTINITIALIZED)
SetRState(Cm, 0, WRITING);
cout << "DEBUG: State[0] = " << Cm->State[0] << endl; // --> Здесь правильно выводит статус WRITING
}
void CType::PrintState(size_t i)
{
cout << "DEBUG: State[" << i << "] = " << State[i] << endl;
}
void gst_bus_add_watch (GstBus* b, void (*f)(GstBus*, GstMessage*, gpointer), gpointer p) {
GstMessage* m;
f(b, m, p);
}
void CType::Init()
{
GstBus* Bus2;
gst_bus_add_watch (Bus2, BusCall, this);
}
int main() {
CType t;
t.Init();
t.PrintState (0);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdHlwZWRlZiB2b2lkKiBncG9pbnRlcjsKc3RydWN0IEdzdEJ1cyB7fTsKc3RydWN0IEdzdE1lc3NhZ2Uge307CgplbnVtIFJTdGF0ZQp7CiAgTk9USU5JVElBTElaRUQgPSAwLAogIElOSVRJQUxJWkVELAogIFNUT1BQRUQsCiAgV1JJVElORwp9OwoKY2xhc3MgQ1R5cGUKewogIHB1YmxpYzoKICBSU3RhdGUgU3RhdGVbMl07CiAgQ1R5cGUgKCk7CiAgdm9pZCBJbml0KCk7CiAgc3RhdGljIHZvaWQgU2V0UlN0YXRlKGdwb2ludGVyLCBzaXplX3QsIFJTdGF0ZSk7CiAgc3RhdGljIHZvaWQgQnVzQ2FsbChHc3RCdXMgKiwgR3N0TWVzc2FnZSAqLCBncG9pbnRlcik7CiAgdm9pZCBQcmludFN0YXRlKHNpemVfdCBpKTsKfTsKCkNUeXBlOjpDVHlwZSgpCnsKICBTdGF0ZVswXSA9IE5PVElOSVRJQUxJWkVEOwogIFN0YXRlWzFdID0gTk9USU5JVElBTElaRUQ7Cn0KCnZvaWQgQ1R5cGU6OlNldFJTdGF0ZShncG9pbnRlciBwdHIsIHNpemVfdCBpLCBSU3RhdGUgcnN0YXRlKQp7CiAgQ1R5cGUgKkNtID0gKENUeXBlICopIHB0cjsKCiAgaWYgKChpIDw9IDEpICYmIChpID49IDApKQogICAgewogICAgICBDbS0+U3RhdGVbMF0gPSByc3RhdGU7CiAgICB9Cn0KCnZvaWQgQ1R5cGU6OkJ1c0NhbGwoR3N0QnVzICpidXMsIEdzdE1lc3NhZ2UgKm1zZywgZ3BvaW50ZXIgZGF0YSkKewogIENUeXBlICpDbSA9IChDVHlwZSAqKSBkYXRhOwogIGNvdXQgPDwgIkRFQlVHOiBTdGF0ZVswXSA9ICIgPDwgIENtLT5TdGF0ZVswXSA8PCBlbmRsOwogIGlmIChDbS0+U3RhdGVbMF0gPT0gTk9USU5JVElBTElaRUQpCiAgICAgU2V0UlN0YXRlKENtLCAwLCBXUklUSU5HKTsKICBjb3V0IDw8ICJERUJVRzogU3RhdGVbMF0gPSAiIDw8IENtLT5TdGF0ZVswXSA8PCBlbmRsOyAvLyAgIC0tPiDQl9C00LXRgdGMINC/0YDQsNCy0LjQu9GM0L3QviDQstGL0LLQvtC00LjRgiDRgdGC0LDRgtGD0YEgV1JJVElORwp9Cgp2b2lkIENUeXBlOjpQcmludFN0YXRlKHNpemVfdCBpKQp7CiAgICBjb3V0IDw8ICJERUJVRzogU3RhdGVbIiA8PCBpIDw8ICJdID0gIiA8PCBTdGF0ZVtpXSA8PCBlbmRsOwp9Cgp2b2lkIGdzdF9idXNfYWRkX3dhdGNoIChHc3RCdXMqIGIsIHZvaWQgKCpmKShHc3RCdXMqLCBHc3RNZXNzYWdlKiwgZ3BvaW50ZXIpLCBncG9pbnRlciBwKSB7CiAgR3N0TWVzc2FnZSogbTsKICBmKGIsIG0sIHApOwp9Cgp2b2lkIENUeXBlOjpJbml0KCkKewogICBHc3RCdXMqIEJ1czI7CiAgIGdzdF9idXNfYWRkX3dhdGNoIChCdXMyLCBCdXNDYWxsLCB0aGlzKTsKfQoKaW50IG1haW4oKSB7CglDVHlwZSB0OwoJdC5Jbml0KCk7Cgl0LlByaW50U3RhdGUgKDApOwoJcmV0dXJuIDA7Cn0=