Автор |
Повідомлення |
Повідомлення створено: 28. 03. 2012 [23:09]
|
aleax
Alexey Bondarchuk
Автор теми
Зареєстрован(а) с: 27.01.2010
Повідомлення: 73
|
"gsxr" wrote:
Есть возможность организовать вещание прямо с ip камер. В наличии axis и evidence. Нужно?
Было-бы замечательно!
|
Повідомлення створено: 02. 04. 2012 [12:36]
|
aleax
Alexey Bondarchuk
Автор теми
Зареєстрован(а) с: 27.01.2010
Повідомлення: 73
|
Реализовал переключение в fullscreen по двойному клику ЛКМ:
Index: src/moduls/ui/Vision/vis_shapes.cpp
===================================================================
--- src/moduls/ui/Vision/vis_shapes.cpp (revision 1777)
+++ src/moduls/ui/Vision/vis_shapes.cpp (working copy)
@@ -58,7 +58,7 @@
#include "vis_shapes.h"
#ifdef HAVE_PHONON
-#include <phonon/VideoPlayer>
+#include "vis_mediaplayer.h"
#endif
@@ -1000,7 +1000,7 @@
}
#ifdef HAVE_PHONON
- VideoPlayer *player = dynamic_cast<VideoPlayer*>(shD->addrWdg);
+ MediaPlayer *player = dynamic_cast<MediaPlayer*>(shD->addrWdg);
if(player)
{
if(shD->mediaType == 0 || shD->mediaType == 1) { player->deleteLater(); shD->addrWdg = NULL; }
@@ -1012,7 +1012,7 @@
{
QLabel *lab;
#ifdef HAVE_PHONON
- VideoPlayer *player;
+ MediaPlayer *player;
#endif
bool up = true, reld_cfg = false;
@@ -1112,7 +1112,7 @@
}
}
#ifdef HAVE_PHONON
- else if((player=dynamic_cast<VideoPlayer*>(shD->addrWdg)))
+ else if((player=dynamic_cast<MediaPlayer*>(shD->addrWdg)))
{
if(shD->videoPlay)
{
@@ -1127,7 +1127,7 @@
case 30: //roll
if(shD->videoRoll == (bool)atoi(val.c_str())) break;
shD->videoRoll = (bool)atoi(val.c_str());
- if((player=dynamic_cast<VideoPlayer*>(shD->addrWdg)))
+ if((player=dynamic_cast<MediaPlayer*>(shD->addrWdg)))
{
if(shD->videoRoll) connect(player, SIGNAL(finished()), player, SLOT(play()));
else disconnect(player, SIGNAL(finished()), 0, 0);
@@ -1135,7 +1135,7 @@
break;
case 31: //pause
shD->videoPause = (bool)atoi(val.c_str());
- if((player=dynamic_cast<VideoPlayer*>(shD->addrWdg)))
+ if((player=dynamic_cast<MediaPlayer*>(shD->addrWdg)))
{
if(shD->videoPause && !player->isPaused()) player->pause();
if(!shD->videoPause && player->isPaused()) player->play();
@@ -1144,12 +1144,12 @@
case 33: //seek
if(shD->videoSeek == atof(val.c_str())) break;
shD->videoSeek = atof(val.c_str());
- if((player=dynamic_cast<VideoPlayer*>(shD->addrWdg))) player->seek(shD->videoSeek);
+ if((player=dynamic_cast<MediaPlayer*>(shD->addrWdg))) player->seek(shD->videoSeek);
break;
case 34: //volume
if(shD->audioVolume == atof(val.c_str())) break;
shD->audioVolume = atof(val.c_str());
- if((player=dynamic_cast<VideoPlayer*>(shD->addrWdg))) player->setVolume(shD->audioVolume);
+ if((player=dynamic_cast<MediaPlayer*>(shD->addrWdg))) player->setVolume(shD->audioVolume);
break;
#endif
default:
@@ -1247,12 +1247,12 @@
//> Create player widget
if(!shD->addrWdg)
{
- shD->addrWdg = new VideoPlayer(Phonon::VideoCategory, w);
+ shD->addrWdg = new MediaPlayer(Phonon::VideoCategory, w);
if(shD->videoRoll) connect(shD->addrWdg, SIGNAL(finished()), shD->addrWdg, SLOT(play()));
mk_new = true;
}
//> Set new data
- player = dynamic_cast<VideoPlayer*>(shD->addrWdg);
+ player = dynamic_cast<MediaPlayer*>(shD->addrWdg);
if(!player) break;
MediaSource mSrc;
if(player->isPlaying()) { player->stop(); player->seek(0); }
@@ -1314,8 +1314,11 @@
ShpDt *shD = (ShpDt*)w->shpData;
if(!shD->en) return false;
+ // qDebug() << event;
+
switch( event->type() )
{
+
case QEvent::Paint:
{
QPainter pnt( w );
Index: src/moduls/ui/Vision/vis_mediaplayer.cpp
===================================================================
--- src/moduls/ui/Vision/vis_mediaplayer.cpp (revision 0)
+++ src/moduls/ui/Vision/vis_mediaplayer.cpp (revision 0)
@@ -0,0 +1,36 @@
+#include "vis_mediaplayer.h"
+
+#include <QMouseEvent>
+#include <phonon/VideoWidget>
+
+MediaPlayer::MediaPlayer( Category category, QWidget *parent ) : VideoPlayer( category, parent )
+{
+ this->videoWidget()->installEventFilter(this);
+}
+
+MediaPlayer::MediaPlayer( QWidget *parent ) : VideoPlayer( parent )
+{
+ this->videoWidget()->installEventFilter(this);
+}
+
+bool MediaPlayer::eventFilter(QObject *obj, QEvent *event)
+{
+ if ( obj == this->videoWidget() )
+ {
+ if( event->type() == QEvent::MouseButtonDblClick )
+ {
+ QMouseEvent *mouse = static_cast<QMouseEvent *>(event); // mouseEvent
+ if( mouse->button() == Qt::LeftButton )
+ {
+ this->videoWidget()->setFullScreen( !this->videoWidget()->isFullScreen() );
+ return true;
+ }
+ }
+ return false;
+ }
+ else
+ {
+ // pass the event on to the parent class
+ return VideoPlayer::eventFilter(obj, event);
+ }
+}
\ No newline at end of file
Index: src/moduls/ui/Vision/vis_mediaplayer.h
===================================================================
--- src/moduls/ui/Vision/vis_mediaplayer.h (revision 0)
+++ src/moduls/ui/Vision/vis_mediaplayer.h (revision 0)
@@ -0,0 +1,20 @@
+#ifndef VIS_MEDIAPLAYER_H
+#define VIS_MEDIAPLAYER_H
+
+#include <phonon/VideoPlayer>
+
+using namespace Phonon;
+
+class MediaPlayer : public VideoPlayer
+{
+ Q_OBJECT
+
+ public:
+ MediaPlayer( Category category, QWidget *parent = 0 );
+ MediaPlayer( QWidget *parent = 0 );
+
+ protected:
+ bool eventFilter( QObject *obj, QEvent *event );
+};
+
+#endif //VIS_MEDIAPLAYER_H
Index: src/moduls/ui/Vision/Makefile.am
===================================================================
--- src/moduls/ui/Vision/Makefile.am (revision 1777)
+++ src/moduls/ui/Vision/Makefile.am (working copy)
@@ -5,9 +5,9 @@
ui_Vision_la_LDFLAGS = -module -avoid-version -no-undefined
ui_Vision_la_SOURCES = tvision.cpp qrc_vision.cpp vis_widgs.cpp moc_vis_widgs.cpp vis_shapes.cpp moc_vis_shapes.cpp \
vis_devel.cpp moc_vis_devel.cpp vis_devel_dlgs.cpp moc_vis_devel_dlgs.cpp vis_devel_widgs.cpp moc_vis_devel_widgs.cpp \
- vis_run.cpp moc_vis_run.cpp vis_run_widgs.cpp moc_vis_run_widgs.cpp vis_shape_elfig.cpp moc_vis_shape_elfig.cpp
+ vis_run.cpp moc_vis_run.cpp vis_run_widgs.cpp moc_vis_run_widgs.cpp vis_shape_elfig.cpp moc_vis_shape_elfig.cpp vis_mediaplayer.cpp moc_vis_mediaplayer.cpp
ui_Vision_la_DIST = tvision.cpp vis_widgs.cpp vis_shapes.cpp vis_devel.cpp vis_devel_dlgs.cpp vis_devel_widgs.cpp \
- vis_run.cpp vis_run_widgs.cpp vis_shape_elfig.cpp vision.qrc
+ vis_run.cpp vis_run_widgs.cpp vis_shape_elfig.cpp vision.qrc vis_mediaplayer.cpp
ui_Vision_la_LIBADD = $(QT4_LIB) $(LIB_FFTW3) $(phonon_LIBS)
ui_Vision_la_LIBTOOLFLAGS = --tag=disable-static
@@ -35,6 +35,9 @@
moc_vis_shape_elfig.cpp: vis_shape_elfig.h
$(QT4_MOC) vis_shape_elfig.h > moc_vis_shape_elfig.cpp
+moc_vis_mediaplayer.cpp: vis_mediaplayer.h
+ $(QT4_MOC) vis_mediaplayer.h > moc_vis_mediaplayer.cpp
+
I18N_mod = $(oscd_modulpref)Vision
clean-local:
|
Повідомлення створено: 02. 04. 2012 [13:28]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 3750
|
Класс "MediaPlayer" тут вообще лишний, а использование eventFilter() можно сделать прямо и примеры там есть.
Learn, learn and learn better than work, work and work.
|
Повідомлення створено: 02. 04. 2012 [14:30]
|
aleax
Alexey Bondarchuk
Автор теми
Зареєстрован(а) с: 27.01.2010
Повідомлення: 73
|
"roman" wrote:
Класс "MediaPlayer" тут вообще лишний, а использование eventFilter() можно сделать прямо и примеры там есть.
Ну в принципе да, но я класс заложил, что бы была возможность возможность построить граф объектов фонона по своему, и расширить возможности дефолтного Phonon::VideoPlayer.
P.S.: ну и не осилил я корректно "вклинится" в существующий код, потому пошел по пути наименьшего сопротивления (так как фича нужна была мне еще на вчера)
|
Повідомлення створено: 03. 04. 2012 [11:35]
|
Osipetka
Пётр Осипенко
Зареєстрован(а) с: 27.03.2011
Повідомлення: 27
|
"aleax" wrote:
Реализовал переключение в fullscreen по двойному клику ЛКМ
Отлично, полезный патч! Как раз то что нам было нужно!
|
Повідомлення створено: 03. 04. 2012 [21:39]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 3750
|
"aleax" wrote:
"roman" wrote:
Класс "MediaPlayer" тут вообще лишний, а использование eventFilter() можно сделать прямо и примеры там есть.
P.S.: ну и не осилил я корректно "вклинится" в существующий код, потому пошел по пути наименьшего сопротивления (так как фича нужна была мне еще на вчера)
Реализовал нормально!
Learn, learn and learn better than work, work and work.
|
Повідомлення створено: 09. 04. 2012 [09:33]
|
gsxr
Андрей Ехлаков
Зареєстрован(а) с: 03.03.2010
Повідомлення: 58
|
При сборке версии 0.8:
vis_shapes.cpp:1253: ошибка: invalid use of incomplete type ‘struct Phonon::VideoWidget’
/usr/include/phonon/Phonon/../../phonon/videoplayer.h:41: ошибка: forward declaration of ‘struct Phonon::VideoWidget’
vis_shapes.cpp: In member function ‘virtual bool VISION::ShapeMedia::eventFilter(VISION::WdgView*, QObject*, QEvent*)’:
vis_shapes.cpp:1388: ошибка: comparison между разными указательными типами ‘Phonon::VideoWidget*’ и ‘QObject*’: отсутствует приведение
vis_shapes.cpp:1391: ошибка: invalid use of incomplete type ‘struct Phonon::VideoWidget’
/usr/include/phonon/Phonon/../../phonon/videoplayer.h:41: ошибка: forward declaration of ‘struct Phonon::VideoWidget’
vis_shapes.cpp:1391: ошибка: invalid use of incomplete type ‘struct Phonon::VideoWidget’
/usr/include/phonon/Phonon/../../phonon/videoplayer.h:41: ошибка: forward declaration of ‘struct Phonon::VideoWidget’
make[5]: *** [ui_Vision_la-vis_shapes.lo] Ошибка 1
make[5]: Leaving directory `/home/sf/project/OpenSCADA/src/moduls/ui/Vision'
make[4]: *** [all-recursive] Ошибка 1
make[4]: Leaving directory `/home/sf/project/OpenSCADA/src/moduls/ui'
make[3]: *** [all-recursive] Ошибка 1
make[3]: Leaving directory `/home/sf/project/OpenSCADA/src/moduls'
make[2]: *** [all-recursive] Ошибка 1
make[2]: Leaving directory `/home/sf/project/OpenSCADA/src'
make[1]: *** [all] Ошибка 2
make[1]: Leaving directory `/home/sf/project/OpenSCADA/src'
make: *** [all-recursive] Ошибка 1
|
Повідомлення створено: 09. 04. 2012 [09:45]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 3750
|
"gsxr" wrote:
При сборке версии 0.8:
vis_shapes.cpp:1253: ошибка: invalid use of incomplete type ‘struct Phonon::VideoWidget’
А выше почитать, прежде чем писать?
Это проблема ранего и текущего размещения заголовков Phonon, в директории "Phonon/*" и "phonon/*", соответственно.
Learn, learn and learn better than work, work and work.
|
Повідомлення створено: 09. 04. 2012 [11:33]
|
gsxr
Андрей Ехлаков
Зареєстрован(а) с: 03.03.2010
Повідомлення: 58
|
"roman" wrote:
"gsxr" wrote:
При сборке версии 0.8:
vis_shapes.cpp:1253: ошибка: invalid use of incomplete type ‘struct Phonon::VideoWidget’
А выше почитать, прежде чем писать?
Это проблема ранего и текущего размещения заголовков Phonon, в директории "Phonon/*" и "phonon/*", соответственно.
Мне не поможет перечитывание моих собственный сообщений. В предыдущем случае сообщение об ошибке было другим.
|
Повідомлення створено: 09. 04. 2012 [11:48]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 3750
|
"gsxr" wrote:
Мне не поможет перечитывание моих собственный сообщений. В предыдущем случае сообщение об ошибке было другим.
Если поменять оба инклуда то поможет. Вы думаете как у меня для Ubuntu 10.04 собрано?
Learn, learn and learn better than work, work and work.
|