42 #include "s60videoplayersession.h" |
42 #include "s60videoplayersession.h" |
43 #include "s60videowidget.h" |
43 #include "s60videowidget.h" |
44 #include "s60mediaplayerservice.h" |
44 #include "s60mediaplayerservice.h" |
45 #include "s60videooverlay.h" |
45 #include "s60videooverlay.h" |
46 |
46 |
47 #include <QtCore/private/qcore_symbian_p.h> // For qt_TRect2QRect |
|
48 #include <QtCore/qdebug.h> |
47 #include <QtCore/qdebug.h> |
49 #include <QtGui/qwidget.h> |
48 #include <QtGui/qwidget.h> |
50 #include <QtCore/qtimer.h> |
49 #include <QtCore/qtimer.h> |
51 #include <QApplication> |
50 #include <QApplication> |
52 |
51 |
53 #include <coecntrl.h> |
52 #include <coecntrl.h> |
54 #include <coemain.h> // For CCoeEnv |
53 #include <coemain.h> // For CCoeEnv |
55 #include <w32std.h> |
54 #include <w32std.h> |
56 #include <mmf/common/mmfcontrollerframeworkbase.h> |
55 #include <mmf/common/mmfcontrollerframeworkbase.h> |
57 |
56 |
|
57 #include <AudioOutput.h> |
|
58 #include <MAudioOutputObserver.h> |
58 |
59 |
59 S60VideoPlayerSession::S60VideoPlayerSession(QMediaService *service) |
60 S60VideoPlayerSession::S60VideoPlayerSession(QMediaService *service) |
60 : S60MediaPlayerSession(service) |
61 : S60MediaPlayerSession(service) |
61 , m_player(0) |
62 , m_player(0) |
62 , m_rect(0, 0, 0, 0) |
63 , m_rect(0, 0, 0, 0) |
82 *m_window, |
84 *m_window, |
83 m_rect, |
85 m_rect, |
84 m_rect)); |
86 m_rect)); |
85 m_dsaActive = true; |
87 m_dsaActive = true; |
86 m_player->RegisterForVideoLoadingNotification(*this); |
88 m_player->RegisterForVideoLoadingNotification(*this); |
87 #if !defined(HAS_NO_AUDIOROUTING) |
|
88 //QT_TRAP_THROWING(m_audioOutput = CAudioOutput::NewL(*m_player)); |
|
89 //QT_TRAP_THROWING(m_audioOutput->RegisterObserverL(*this)); |
|
90 #endif |
|
91 } |
89 } |
92 |
90 |
93 S60VideoPlayerSession::~S60VideoPlayerSession() |
91 S60VideoPlayerSession::~S60VideoPlayerSession() |
94 { |
92 { |
95 #if !defined(HAS_NO_AUDIOROUTING) |
93 #if !defined(HAS_NO_AUDIOROUTING_IN_VIDEOPLAYER) |
96 if (m_audioOutput) |
94 if (m_audioOutput) |
97 m_audioOutput->UnregisterObserver(*this); |
95 m_audioOutput->UnregisterObserver(*this); |
98 delete m_audioOutput; |
96 delete m_audioOutput; |
99 #endif |
97 #endif |
100 m_player->Close(); |
98 m_player->Close(); |
101 delete m_player; |
99 delete m_player; |
102 } |
100 } |
103 |
101 |
104 void S60VideoPlayerSession::doLoadL(const TDesC &path) |
102 void S60VideoPlayerSession::doLoadL(const TDesC &path) |
105 { |
103 { |
|
104 // m_audioOutput needs to be reinitialized after MapcInitComplete |
|
105 if (m_audioOutput) |
|
106 m_audioOutput->UnregisterObserver(*this); |
|
107 delete m_audioOutput; |
|
108 m_audioOutput = NULL; |
|
109 |
106 m_player->OpenFileL(path); |
110 m_player->OpenFileL(path); |
107 } |
111 } |
108 |
112 |
109 void S60VideoPlayerSession::doLoadUrlL(const TDesC &path) |
113 void S60VideoPlayerSession::doLoadUrlL(const TDesC &path) |
110 { |
114 { |
|
115 // m_audioOutput needs to be reinitialized after MapcInitComplete |
|
116 if (m_audioOutput) |
|
117 m_audioOutput->UnregisterObserver(*this); |
|
118 delete m_audioOutput; |
|
119 m_audioOutput = NULL; |
|
120 |
111 m_player->OpenUrlL(path); |
121 m_player->OpenUrlL(path); |
112 } |
122 } |
113 |
123 |
114 int S60VideoPlayerSession::doGetBufferStatusL() const |
124 int S60VideoPlayerSession::doGetBufferStatusL() const |
115 { |
125 { |
116 int progress = 0; |
126 int progress = 0; |
117 m_player->GetVideoLoadingProgressL(progress); |
127 m_player->GetVideoLoadingProgressL(progress); |
118 return progress; |
128 return progress; |
119 } |
129 } |
120 |
130 |
121 qint64 S60VideoPlayerSession::doGetDurationL() const |
131 qint64 S60VideoPlayerSession::doGetDurationL() const |
244 |
254 |
245 QPair<qreal, qreal> S60VideoPlayerSession::scaleFactor() |
255 QPair<qreal, qreal> S60VideoPlayerSession::scaleFactor() |
246 { |
256 { |
247 QSize scaled = m_originalSize; |
257 QSize scaled = m_originalSize; |
248 if (m_aspectRatioMode == Qt::IgnoreAspectRatio) |
258 if (m_aspectRatioMode == Qt::IgnoreAspectRatio) |
249 scaled.scale(qt_TRect2QRect(m_rect).size(), Qt::IgnoreAspectRatio); |
259 scaled.scale(TRect2QRect(m_rect).size(), Qt::IgnoreAspectRatio); |
250 else if(m_aspectRatioMode == Qt::KeepAspectRatio) |
260 else if(m_aspectRatioMode == Qt::KeepAspectRatio) |
251 scaled.scale(qt_TRect2QRect(m_rect).size(), Qt::KeepAspectRatio); |
261 scaled.scale(TRect2QRect(m_rect).size(), Qt::KeepAspectRatio); |
252 |
262 |
253 qreal width = qreal(scaled.width()) / qreal(m_originalSize.width()) * qreal(100); |
263 qreal width = qreal(scaled.width()) / qreal(m_originalSize.width()) * qreal(100); |
254 qreal height = qreal(scaled.height()) / qreal(m_originalSize.height()) * qreal(100); |
264 qreal height = qreal(scaled.height()) / qreal(m_originalSize.height()) * qreal(100); |
255 |
265 |
256 return QPair<qreal, qreal>(width, height); |
266 return QPair<qreal, qreal>(width, height); |
300 m_originalSize = QSize(originalSize.iWidth, originalSize.iHeight); |
310 m_originalSize = QSize(originalSize.iWidth, originalSize.iHeight); |
301 m_player->SetScaleFactorL(scaleFactor().first, scaleFactor().second, true)); |
311 m_player->SetScaleFactorL(scaleFactor().first, scaleFactor().second, true)); |
302 |
312 |
303 setError(err); |
313 setError(err); |
304 m_dsaActive = true; |
314 m_dsaActive = true; |
|
315 #if !defined(HAS_NO_AUDIOROUTING_IN_VIDEOPLAYER) |
|
316 TRAP(err, |
|
317 m_audioOutput = CAudioOutput::NewL(*m_player); |
|
318 m_audioOutput->RegisterObserverL(*this); |
|
319 ); |
|
320 setActiveEndpoint(m_audioEndpoint); |
|
321 setError(err); |
|
322 #endif |
305 loaded(); |
323 loaded(); |
306 } |
324 } |
307 |
325 |
308 void S60VideoPlayerSession::MvpuoFrameReady(CFbsBitmap &aFrame, TInt aError) |
326 void S60VideoPlayerSession::MvpuoFrameReady(CFbsBitmap &aFrame, TInt aError) |
309 { |
327 { |
381 void S60VideoPlayerSession::MvloLoadingComplete() |
399 void S60VideoPlayerSession::MvloLoadingComplete() |
382 { |
400 { |
383 buffered(); |
401 buffered(); |
384 } |
402 } |
385 |
403 |
|
404 void S60VideoPlayerSession::doSetAudioEndpoint(const QString& audioEndpoint) |
|
405 { |
|
406 m_audioEndpoint = audioEndpoint; |
|
407 } |
|
408 |
386 QString S60VideoPlayerSession::activeEndpoint() const |
409 QString S60VideoPlayerSession::activeEndpoint() const |
387 { |
410 { |
388 QString outputName; |
411 QString outputName = QString("Default"); |
389 #if !defined(HAS_NO_AUDIOROUTING) |
412 #if !defined(HAS_NO_AUDIOROUTING_IN_VIDEOPLAYER) |
390 if (m_audioOutput) { |
413 if (m_audioOutput) { |
391 CAudioOutput::TAudioOutputPreference output = m_audioOutput->AudioOutput(); |
414 CAudioOutput::TAudioOutputPreference output = m_audioOutput->AudioOutput(); |
392 outputName = qStringFromTAudioOutputPreference(output); |
415 outputName = qStringFromTAudioOutputPreference(output); |
393 } |
416 } |
394 #endif |
417 #endif |
395 return outputName; |
418 return outputName; |
396 } |
419 } |
397 |
420 |
398 QString S60VideoPlayerSession::defaultEndpoint() const |
421 QString S60VideoPlayerSession::defaultEndpoint() const |
399 { |
422 { |
400 QString outputName; |
423 QString outputName = QString("Default"); |
401 #if !defined(HAS_NO_AUDIOROUTING) |
424 #if !defined(HAS_NO_AUDIOROUTING_IN_VIDEOPLAYER) |
402 if (m_audioOutput) { |
425 if (m_audioOutput) { |
403 CAudioOutput::TAudioOutputPreference output = m_audioOutput->DefaultAudioOutput(); |
426 CAudioOutput::TAudioOutputPreference output = m_audioOutput->DefaultAudioOutput(); |
404 outputName = qStringFromTAudioOutputPreference(output); |
427 outputName = qStringFromTAudioOutputPreference(output); |
405 } |
428 } |
|
429 #endif |
406 return outputName; |
430 return outputName; |
407 #endif |
|
408 return QString("Default"); |
|
409 } |
431 } |
410 |
432 |
411 void S60VideoPlayerSession::setActiveEndpoint(const QString& name) |
433 void S60VideoPlayerSession::setActiveEndpoint(const QString& name) |
412 { |
434 { |
413 CAudioOutput::TAudioOutputPreference output = CAudioOutput::ENoPreference; |
435 CAudioOutput::TAudioOutputPreference output = CAudioOutput::ENoPreference; |
420 output = CAudioOutput::ENoOutput; |
442 output = CAudioOutput::ENoOutput; |
421 else if (name == QString("Earphone")) |
443 else if (name == QString("Earphone")) |
422 output = CAudioOutput::EPrivate; |
444 output = CAudioOutput::EPrivate; |
423 else if (name == QString("Speaker")) |
445 else if (name == QString("Speaker")) |
424 output = CAudioOutput::EPublic; |
446 output = CAudioOutput::EPublic; |
425 #if !defined(HAS_NO_AUDIOROUTING) |
447 #if !defined(HAS_NO_AUDIOROUTING_IN_VIDEOPLAYER) |
426 if (m_audioOutput) { |
448 if (m_audioOutput) { |
427 TRAPD(err, m_audioOutput->SetAudioOutputL(output)); |
449 TRAPD(err, m_audioOutput->SetAudioOutputL(output)); |
428 setError(err); |
450 setError(err); |
|
451 |
|
452 if (m_audioEndpoint != name) { |
|
453 m_audioEndpoint = name; |
|
454 emit activeEndpointChanged(name); |
|
455 } |
429 } |
456 } |
430 #endif |
457 #endif |
431 } |
458 } |
432 |
459 |
433 void S60VideoPlayerSession::DefaultAudioOutputChanged( CAudioOutput& aAudioOutput, |
460 void S60VideoPlayerSession::DefaultAudioOutputChanged( CAudioOutput& aAudioOutput, |
434 CAudioOutput::TAudioOutputPreference aNewDefault ) |
461 CAudioOutput::TAudioOutputPreference aNewDefault ) |
435 { |
462 { |
436 #if !defined(HAS_NO_AUDIOROUTING) |
463 // Emit already implemented in setActiveEndpoint function |
437 if (m_audioOutput) { |
464 Q_UNUSED(aAudioOutput) |
438 CAudioOutput::TAudioOutputPreference output = m_audioOutput->AudioOutput(); |
465 Q_UNUSED(aNewDefault) |
439 if (output == CAudioOutput::ENoPreference) { |
|
440 QString name; |
|
441 if (output == CAudioOutput::EAll) |
|
442 name = QString("All"); |
|
443 else if (output == CAudioOutput::ENoOutput) |
|
444 name = QString("None"); |
|
445 else if (output == CAudioOutput::EPrivate) |
|
446 name = QString("Earphone"); |
|
447 else if (output == CAudioOutput::EPublic) |
|
448 name = QString("Speaker"); |
|
449 if (!name.isEmpty()) |
|
450 emit activeEndpointChanged(name); |
|
451 } |
|
452 } |
|
453 #endif |
|
454 } |
466 } |
455 |
467 |
456 QString S60VideoPlayerSession::qStringFromTAudioOutputPreference(CAudioOutput::TAudioOutputPreference output) const |
468 QString S60VideoPlayerSession::qStringFromTAudioOutputPreference(CAudioOutput::TAudioOutputPreference output) const |
457 { |
469 { |
458 if (output == CAudioOutput::ENoPreference) |
470 if (output == CAudioOutput::ENoPreference) |
459 return QString("Default"); |
471 return QString("Default"); |
460 else if (output == CAudioOutput::EAll) |
472 else if (output == CAudioOutput::EAll) |
461 return QString("All"); |
473 return QString("All"); |
462 else if (output == CAudioOutput::ENoOutput) |
474 else if (output == CAudioOutput::ENoOutput) |
463 return QString("None"); |
475 return QString("None"); |
464 else if (output == CAudioOutput::EPrivate) |
476 else if (output == CAudioOutput::EPrivate) |
465 return QString("Earphone"); |
477 return QString("Earphone"); |
466 else if (output == CAudioOutput::EPublic) |
478 else if (output == CAudioOutput::EPublic) |
467 return QString("Speaker"); |
479 return QString("Speaker"); |
468 return QString(); |
480 return QString("Default"); |
469 } |
481 } |