X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=AirTV-Qt%2Fraopservice.cpp;h=1c3519dbeb567a0876f796e88b65b825cc77d1f5;hb=23ab90afeb29b103194a86d963be6f26af880d9c;hp=79472c1f0b047f43ed158c85db7fcc243add5f0f;hpb=2340bcd3ce772d058bbeddcadd7a8301f7b18747;p=deb_shairplay.git diff --git a/AirTV-Qt/raopservice.cpp b/AirTV-Qt/raopservice.cpp index 79472c1..1c3519d 100644 --- a/AirTV-Qt/raopservice.cpp +++ b/AirTV-Qt/raopservice.cpp @@ -1,16 +1,32 @@ +/** + * Copyright (C) 2011-2012 Juho Vähä-Herttua + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + */ + #include "raopservice.h" #include #include -static void -audio_init(void *cls, void **session, int bits, int channels, int samplerate) +static void* +audio_init(void *cls, int bits, int channels, int samplerate) { + void *session; QMetaObject::invokeMethod((QObject*)cls, "audioInit", Qt::BlockingQueuedConnection, - Q_ARG(void*, (void*)session), + Q_ARG(void*, (void*)&session), Q_ARG(int, bits), Q_ARG(int, channels), Q_ARG(int, samplerate)); + return session; } static void @@ -65,7 +81,6 @@ RaopService::~RaopService() bool RaopService::init() { - const char hwaddr[] = { 0x48, 0x5d, 0x60, 0x7c, 0xee, 0x22 }; raop_callbacks_t raop_cbs; int error; @@ -92,12 +107,12 @@ bool RaopService::init() QByteArray array = file.read(file.size()); array.append('\0'); - m_raop = raop_init(&raop_cbs, array.data(), hwaddr, sizeof(hwaddr)); + m_raop = raop_init(&raop_cbs, array.data()); if (!m_raop) { return false; } - m_dnssd = dnssd_init(hwaddr, sizeof(hwaddr), &error); + m_dnssd = dnssd_init(&error); if (!m_dnssd) { raop_destroy(m_raop); m_raop = NULL; @@ -109,17 +124,19 @@ bool RaopService::init() bool RaopService::start(const QString & name, quint16 port) { + const char hwaddr[] = { 0x48, 0x5d, 0x60, 0x7c, 0xee, 0x22 }; + if (!m_raop || !m_dnssd || m_thread.isRunning()) { return false; } m_thread.start(); - if (raop_start(m_raop, &port) < 0) { + if (raop_start(m_raop, &port, hwaddr, sizeof(hwaddr), NULL) < 0) { m_thread.quit(); m_thread.wait(); return false; } - if (dnssd_register_raop(m_dnssd, name.toUtf8(), port) < 0) { + if (dnssd_register_raop(m_dnssd, name.toUtf8(), port, hwaddr, sizeof(hwaddr), 0) < 0) { raop_stop(m_raop); m_thread.quit(); m_thread.wait();