00001
00002
00003
00004
00005
00006
00007 #include <algorithm>
00008 using namespace std;
00009
00010 #include <QCoreApplication>
00011
00012 #include "output.h"
00013 #include "visual.h"
00014
00015 class QObject;
00016
00017 QEvent::Type OutputEvent::Playing =
00018 (QEvent::Type) QEvent::registerEventType();
00019 QEvent::Type OutputEvent::Buffering =
00020 (QEvent::Type) QEvent::registerEventType();
00021 QEvent::Type OutputEvent::Info =
00022 (QEvent::Type) QEvent::registerEventType();
00023 QEvent::Type OutputEvent::Paused =
00024 (QEvent::Type) QEvent::registerEventType();
00025 QEvent::Type OutputEvent::Stopped =
00026 (QEvent::Type) QEvent::registerEventType();
00027 QEvent::Type OutputEvent::Error =
00028 (QEvent::Type) QEvent::registerEventType();
00029
00030 OutputListeners::OutputListeners()
00031 {
00032 bufsize=0;
00033 }
00034
00035
00036 OutputListeners::~OutputListeners()
00037 {
00038 }
00039
00040
00041 void OutputListeners::error(const QString &e)
00042 {
00043 OutputEvent event(e);
00044 dispatch(event);
00045 }
00046
00047 void OutputListeners::addVisual(MythTV::Visual *v)
00048 {
00049 Visuals::iterator it = std::find(visuals.begin(), visuals.end(), v);
00050 if (it == visuals.end())
00051 visuals.push_back(v);
00052 }
00053
00054 void OutputListeners::removeVisual(MythTV::Visual *v)
00055 {
00056 Visuals::iterator it = std::find(visuals.begin(), visuals.end(), v);
00057 if (it != visuals.end())
00058 visuals.erase(it);
00059 }
00060
00061 void OutputListeners::dispatchVisual(uchar *buffer, unsigned long b_len,
00062 unsigned long written, int chan, int prec)
00063 {
00064 if (! buffer)
00065 return;
00066
00067 Visuals::iterator it = visuals.begin();
00068 for (; it != visuals.end(); ++it)
00069 {
00070 QMutexLocker locker((*it)->mutex());
00071 (*it)->add(buffer, b_len, written, chan, prec);
00072 }
00073 }
00074
00075 void OutputListeners::prepareVisuals()
00076 {
00077 Visuals::iterator it = visuals.begin();
00078 for (; it != visuals.end(); ++it)
00079 {
00080 QMutexLocker locker((*it)->mutex());
00081 (*it)->prepare();
00082 }
00083 }