|
a/libupnpp/control/mediarenderer.cxx |
|
b/libupnpp/control/mediarenderer.cxx |
|
... |
|
... |
36 |
namespace UPnPClient {
|
36 |
namespace UPnPClient {
|
37 |
|
37 |
|
38 |
const string
|
38 |
const string
|
39 |
MediaRenderer::DType("urn:schemas-upnp-org:device:MediaRenderer:1");
|
39 |
MediaRenderer::DType("urn:schemas-upnp-org:device:MediaRenderer:1");
|
40 |
|
40 |
|
|
|
41 |
class MediaRenderer::Internal {
|
|
|
42 |
public:
|
|
|
43 |
STD_WEAK_PTR<RenderingControl> rdc;
|
|
|
44 |
STD_WEAK_PTR<AVTransport> avt;
|
|
|
45 |
STD_WEAK_PTR<OHProduct> ohpr;
|
|
|
46 |
STD_WEAK_PTR<OHPlaylist> ohpl;
|
|
|
47 |
STD_WEAK_PTR<OHTime> ohtm;
|
|
|
48 |
STD_WEAK_PTR<OHVolume> ohvl;
|
|
|
49 |
STD_WEAK_PTR<OHReceiver> ohrc;
|
|
|
50 |
};
|
|
|
51 |
|
41 |
// We don't include a version in comparisons, as we are satisfied with
|
52 |
// We don't include a version in comparisons, as we are satisfied with
|
42 |
// version 1
|
53 |
// version 1
|
43 |
bool MediaRenderer::isMRDevice(const string& st)
|
54 |
bool MediaRenderer::isMRDevice(const string& st)
|
44 |
{
|
55 |
{
|
45 |
const string::size_type sz(DType.size()-2);
|
56 |
const string::size_type sz(DType.size()-2);
|
|
... |
|
... |
82 |
}
|
93 |
}
|
83 |
|
94 |
|
84 |
MediaRenderer::MediaRenderer(const UPnPDeviceDesc& desc)
|
95 |
MediaRenderer::MediaRenderer(const UPnPDeviceDesc& desc)
|
85 |
: Device(desc)
|
96 |
: Device(desc)
|
86 |
{
|
97 |
{
|
|
|
98 |
if ((m = new Internal()) == 0) {
|
|
|
99 |
LOGERR("MediaRenderer::MediaRenderer: out of memory" << endl);
|
|
|
100 |
return;
|
|
|
101 |
}
|
|
|
102 |
}
|
|
|
103 |
|
|
|
104 |
MediaRenderer::~MediaRenderer()
|
|
|
105 |
{
|
|
|
106 |
delete m;
|
87 |
}
|
107 |
}
|
88 |
|
108 |
|
89 |
bool MediaRenderer::hasOpenHome()
|
109 |
bool MediaRenderer::hasOpenHome()
|
90 |
{
|
110 |
{
|
91 |
return ohpr() ? true : false;
|
111 |
return ohpr() ? true : false;
|
|
... |
|
... |
94 |
RDCH MediaRenderer::rdc()
|
114 |
RDCH MediaRenderer::rdc()
|
95 |
{
|
115 |
{
|
96 |
if (desc() == 0)
|
116 |
if (desc() == 0)
|
97 |
return RDCH();
|
117 |
return RDCH();
|
98 |
|
118 |
|
99 |
RDCH rdcl = m_rdc.lock();
|
119 |
RDCH rdcl = m->rdc.lock();
|
100 |
if (rdcl)
|
120 |
if (rdcl)
|
101 |
return rdcl;
|
121 |
return rdcl;
|
102 |
for (vector<UPnPServiceDesc>::const_iterator it = desc()->services.begin();
|
122 |
for (vector<UPnPServiceDesc>::const_iterator it = desc()->services.begin();
|
103 |
it != desc()->services.end();it++) {
|
123 |
it != desc()->services.end();it++) {
|
104 |
if (RenderingControl::isRDCService(it->serviceType)) {
|
124 |
if (RenderingControl::isRDCService(it->serviceType)) {
|
|
... |
|
... |
106 |
break;
|
126 |
break;
|
107 |
}
|
127 |
}
|
108 |
}
|
128 |
}
|
109 |
if (!rdcl)
|
129 |
if (!rdcl)
|
110 |
LOGDEB("MediaRenderer: RenderingControl service not found" << endl);
|
130 |
LOGDEB("MediaRenderer: RenderingControl service not found" << endl);
|
111 |
m_rdc = rdcl;
|
131 |
m->rdc = rdcl;
|
112 |
return rdcl;
|
132 |
return rdcl;
|
113 |
}
|
133 |
}
|
114 |
|
134 |
|
115 |
AVTH MediaRenderer::avt()
|
135 |
AVTH MediaRenderer::avt()
|
116 |
{
|
136 |
{
|
117 |
AVTH avtl = m_avt.lock();
|
137 |
AVTH avtl = m->avt.lock();
|
118 |
if (avtl)
|
138 |
if (avtl)
|
119 |
return avtl;
|
139 |
return avtl;
|
120 |
for (vector<UPnPServiceDesc>::const_iterator it = desc()->services.begin();
|
140 |
for (vector<UPnPServiceDesc>::const_iterator it = desc()->services.begin();
|
121 |
it != desc()->services.end();it++) {
|
141 |
it != desc()->services.end();it++) {
|
122 |
if (AVTransport::isAVTService(it->serviceType)) {
|
142 |
if (AVTransport::isAVTService(it->serviceType)) {
|
|
... |
|
... |
124 |
break;
|
144 |
break;
|
125 |
}
|
145 |
}
|
126 |
}
|
146 |
}
|
127 |
if (!avtl)
|
147 |
if (!avtl)
|
128 |
LOGDEB("MediaRenderer: AVTransport service not found" << endl);
|
148 |
LOGDEB("MediaRenderer: AVTransport service not found" << endl);
|
129 |
m_avt = avtl;
|
149 |
m->avt = avtl;
|
130 |
return avtl;
|
150 |
return avtl;
|
131 |
}
|
151 |
}
|
132 |
|
152 |
|
133 |
OHPRH MediaRenderer::ohpr()
|
153 |
OHPRH MediaRenderer::ohpr()
|
134 |
{
|
154 |
{
|
135 |
OHPRH ohprl = m_ohpr.lock();
|
155 |
OHPRH ohprl = m->ohpr.lock();
|
136 |
if (ohprl)
|
156 |
if (ohprl)
|
137 |
return ohprl;
|
157 |
return ohprl;
|
138 |
for (vector<UPnPServiceDesc>::const_iterator it = desc()->services.begin();
|
158 |
for (vector<UPnPServiceDesc>::const_iterator it = desc()->services.begin();
|
139 |
it != desc()->services.end();it++) {
|
159 |
it != desc()->services.end();it++) {
|
140 |
if (OHProduct::isOHPrService(it->serviceType)) {
|
160 |
if (OHProduct::isOHPrService(it->serviceType)) {
|
|
... |
|
... |
142 |
break;
|
162 |
break;
|
143 |
}
|
163 |
}
|
144 |
}
|
164 |
}
|
145 |
if (!ohprl)
|
165 |
if (!ohprl)
|
146 |
LOGDEB("MediaRenderer: OHProduct service not found" << endl);
|
166 |
LOGDEB("MediaRenderer: OHProduct service not found" << endl);
|
147 |
m_ohpr = ohprl;
|
167 |
m->ohpr = ohprl;
|
148 |
return ohprl;
|
168 |
return ohprl;
|
149 |
}
|
169 |
}
|
150 |
|
170 |
|
151 |
OHPLH MediaRenderer::ohpl()
|
171 |
OHPLH MediaRenderer::ohpl()
|
152 |
{
|
172 |
{
|
153 |
OHPLH ohpll = m_ohpl.lock();
|
173 |
OHPLH ohpll = m->ohpl.lock();
|
154 |
if (ohpll)
|
174 |
if (ohpll)
|
155 |
return ohpll;
|
175 |
return ohpll;
|
156 |
for (vector<UPnPServiceDesc>::const_iterator it = desc()->services.begin();
|
176 |
for (vector<UPnPServiceDesc>::const_iterator it = desc()->services.begin();
|
157 |
it != desc()->services.end();it++) {
|
177 |
it != desc()->services.end();it++) {
|
158 |
if (OHPlaylist::isOHPlService(it->serviceType)) {
|
178 |
if (OHPlaylist::isOHPlService(it->serviceType)) {
|
|
... |
|
... |
160 |
break;
|
180 |
break;
|
161 |
}
|
181 |
}
|
162 |
}
|
182 |
}
|
163 |
if (!ohpll)
|
183 |
if (!ohpll)
|
164 |
LOGDEB("MediaRenderer: OHPlaylist service not found" << endl);
|
184 |
LOGDEB("MediaRenderer: OHPlaylist service not found" << endl);
|
165 |
m_ohpl = ohpll;
|
185 |
m->ohpl = ohpll;
|
166 |
return ohpll;
|
186 |
return ohpll;
|
167 |
}
|
187 |
}
|
168 |
|
188 |
|
|
|
189 |
OHRCH MediaRenderer::ohrc()
|
|
|
190 |
{
|
|
|
191 |
OHRCH ohrcl = m->ohrc.lock();
|
|
|
192 |
if (ohrcl)
|
|
|
193 |
return ohrcl;
|
|
|
194 |
for (vector<UPnPServiceDesc>::const_iterator it = desc()->services.begin();
|
|
|
195 |
it != desc()->services.end();it++) {
|
|
|
196 |
if (OHReceiver::isOHRcService(it->serviceType)) {
|
|
|
197 |
ohrcl = OHRCH(new OHReceiver(*desc(), *it));
|
|
|
198 |
break;
|
|
|
199 |
}
|
|
|
200 |
}
|
|
|
201 |
if (!ohrcl)
|
|
|
202 |
LOGDEB("MediaRenderer: OHReceiver service not found" << endl);
|
|
|
203 |
m->ohrc = ohrcl;
|
|
|
204 |
return ohrcl;
|
|
|
205 |
}
|
|
|
206 |
|
169 |
OHTMH MediaRenderer::ohtm()
|
207 |
OHTMH MediaRenderer::ohtm()
|
170 |
{
|
208 |
{
|
171 |
OHTMH ohtml = m_ohtm.lock();
|
209 |
OHTMH ohtml = m->ohtm.lock();
|
172 |
if (ohtml)
|
210 |
if (ohtml)
|
173 |
return ohtml;
|
211 |
return ohtml;
|
174 |
for (vector<UPnPServiceDesc>::const_iterator it = desc()->services.begin();
|
212 |
for (vector<UPnPServiceDesc>::const_iterator it = desc()->services.begin();
|
175 |
it != desc()->services.end();it++) {
|
213 |
it != desc()->services.end();it++) {
|
176 |
if (OHTime::isOHTMService(it->serviceType)) {
|
214 |
if (OHTime::isOHTMService(it->serviceType)) {
|
|
... |
|
... |
178 |
break;
|
216 |
break;
|
179 |
}
|
217 |
}
|
180 |
}
|
218 |
}
|
181 |
if (!ohtml)
|
219 |
if (!ohtml)
|
182 |
LOGDEB("MediaRenderer: OHTime service not found" << endl);
|
220 |
LOGDEB("MediaRenderer: OHTime service not found" << endl);
|
183 |
m_ohtm = ohtml;
|
221 |
m->ohtm = ohtml;
|
184 |
return ohtml;
|
222 |
return ohtml;
|
185 |
}
|
223 |
}
|
186 |
|
224 |
|
187 |
OHVLH MediaRenderer::ohvl()
|
225 |
OHVLH MediaRenderer::ohvl()
|
188 |
{
|
226 |
{
|
189 |
OHVLH ohvll = m_ohvl.lock();
|
227 |
OHVLH ohvll = m->ohvl.lock();
|
190 |
if (ohvll)
|
228 |
if (ohvll)
|
191 |
return ohvll;
|
229 |
return ohvll;
|
192 |
for (vector<UPnPServiceDesc>::const_iterator it = desc()->services.begin();
|
230 |
for (vector<UPnPServiceDesc>::const_iterator it = desc()->services.begin();
|
193 |
it != desc()->services.end();it++) {
|
231 |
it != desc()->services.end();it++) {
|
194 |
if (OHVolume::isOHVLService(it->serviceType)) {
|
232 |
if (OHVolume::isOHVLService(it->serviceType)) {
|
|
... |
|
... |
196 |
break;
|
234 |
break;
|
197 |
}
|
235 |
}
|
198 |
}
|
236 |
}
|
199 |
if (!ohvll)
|
237 |
if (!ohvll)
|
200 |
LOGDEB("MediaRenderer: OHVolume service not found" << endl);
|
238 |
LOGDEB("MediaRenderer: OHVolume service not found" << endl);
|
201 |
m_ohvl = ohvll;
|
239 |
m->ohvl = ohvll;
|
202 |
return ohvll;
|
240 |
return ohvll;
|
203 |
}
|
241 |
}
|
204 |
|
242 |
|
205 |
}
|
243 |
}
|