From 5b37109a8002420247a5abf46841c95365e88036 Mon Sep 17 00:00:00 2001 From: ghost Date: Mon, 8 Dec 2008 13:10:44 +0100 Subject: follow libdreamdvd changes to support scaling (needs libdreamdvd >= 20081208) --- .../Extensions/DVDPlayer/src/servicedvd.cpp | 56 ++++++++++++++++------ 1 file changed, 42 insertions(+), 14 deletions(-) (limited to 'lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.cpp') diff --git a/lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.cpp b/lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.cpp index 1add04ab..0a3d0359 100644 --- a/lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.cpp +++ b/lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.cpp @@ -87,30 +87,48 @@ DEFINE_REF(eServiceDVD); eServiceDVD::eServiceDVD(const char *filename): m_filename(filename), m_ddvdconfig(ddvd_create()), - m_pixmap(new gPixmap(eSize(720, 576), 32)), m_subtitle_widget(0), m_state(stIdle), m_current_trick(0), m_pump(eApp, 1) { + int aspect = DDVD_16_9; + int policy = DDVD_PAN_SCAN; + + char tmp[255]; + ssize_t rd; + m_sn = eSocketNotifier::create(eApp, ddvd_get_messagepipe_fd(m_ddvdconfig), eSocketNotifier::Read|eSocketNotifier::Priority|eSocketNotifier::Error|eSocketNotifier::Hungup); - std::string aspect; eDebug("SERVICEDVD construct!"); // create handle ddvd_set_dvd_path(m_ddvdconfig, filename); ddvd_set_ac3thru(m_ddvdconfig, 0); ddvd_set_language(m_ddvdconfig, "de"); - if (ePythonConfigQuery::getConfigValue("config.av.aspect", aspect) != 0) - aspect = "16_9"; - if (aspect == "4_3_letterbox") - ddvd_set_video(m_ddvdconfig, DDVD_4_3_LETTERBOX, DDVD_PAL); - else if (aspect == "4_3_panscan") - ddvd_set_video(m_ddvdconfig, DDVD_4_3_PAN_SCAN, DDVD_PAL); - else - ddvd_set_video(m_ddvdconfig, DDVD_16_9, DDVD_PAL); + int fd = open("/proc/stb/video/aspect", O_RDONLY); + if (fd > -1) + { + rd = read(fd, tmp, 255); + if (rd > 2 && !strncmp(tmp, "4:3", 3)) + aspect = DDVD_4_3; + else if (rd > 4 && !strncmp(tmp, "16:10", 5)) + aspect = DDVD_16_10; + close(fd); + } + + fd = open("/proc/stb/video/policy", O_RDONLY); + if (fd > -1) + { + rd = read(fd, tmp, 255); + if (rd > 6 && !strncmp(tmp, "bestfit", 3)) + aspect = DDVD_JUSTSCALE; + else if (rd > 8 && !strncmp(tmp, "letterbox", 5)) + aspect = DDVD_LETTERBOX; + close(fd); + } + + ddvd_set_video(m_ddvdconfig, aspect, policy, DDVD_PAL /*unused*/); - ddvd_set_lfb(m_ddvdconfig, (unsigned char *)m_pixmap->surface->data, 720, 576, 4, 720*4); CONNECT(m_sn->activated, eServiceDVD::gotMessage); CONNECT(m_pump.recv_msg, eServiceDVD::gotThreadMessage); strcpy(m_ddvd_titlestring,""); @@ -159,7 +177,7 @@ void eServiceDVD::gotMessage(int /*what*/) case DDVD_SCREEN_UPDATE: eDebug("DVD_SCREEN_UPDATE!"); if (m_subtitle_widget) - m_subtitle_widget->setPixmap(m_pixmap, eRect(0, 0, 720, 576)); + m_subtitle_widget->setPixmap(m_pixmap, eRect(ePoint(0, 0), m_pixmap->size())); break; case DDVD_SHOWOSD_STATE_PLAY: { @@ -272,7 +290,6 @@ RESULT eServiceDVD::start() assert(m_state == stIdle); m_state = stRunning; eDebug("eServiceDVD starting"); - run(); // m_event(this, evStart); return 0; } @@ -516,11 +533,22 @@ RESULT eServiceDVD::enableSubtitles(eWidget *parent, SWIG_PYOBJECT(ePyObject) /* { if (m_subtitle_widget) delete m_subtitle_widget; + m_subtitle_widget = new eSubtitleWidget(parent); m_subtitle_widget->resize(parent->size()); - m_subtitle_widget->setPixmap(m_pixmap, eRect(0, 0, 720, 576)); + + eSize size = parent->size(); + + if (!m_pixmap) + { + m_pixmap = new gPixmap(size, 32); + ddvd_set_lfb(m_ddvdconfig, (unsigned char *)m_pixmap->surface->data, size.width(), size.height(), 4, size.width()*4); + run(); // start the thread + } + m_subtitle_widget->setZPosition(-1); m_subtitle_widget->show(); + return 0; } -- cgit v1.2.3 From c484030a629ae2dc308d87a6cceeb3bb79e0aefd Mon Sep 17 00:00:00 2001 From: ghost Date: Mon, 8 Dec 2008 16:27:17 +0100 Subject: small fix --- lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.cpp') diff --git a/lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.cpp b/lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.cpp index 0a3d0359..5d6a0870 100644 --- a/lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.cpp +++ b/lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.cpp @@ -120,9 +120,9 @@ eServiceDVD::eServiceDVD(const char *filename): if (fd > -1) { rd = read(fd, tmp, 255); - if (rd > 6 && !strncmp(tmp, "bestfit", 3)) + if (rd > 6 && !strncmp(tmp, "bestfit", 7)) aspect = DDVD_JUSTSCALE; - else if (rd > 8 && !strncmp(tmp, "letterbox", 5)) + else if (rd > 8 && !strncmp(tmp, "letterbox", 9)) aspect = DDVD_LETTERBOX; close(fd); } -- cgit v1.2.3 From c634e149898349456965ca2dab6b66dc8e2a0e06 Mon Sep 17 00:00:00 2001 From: ghost Date: Tue, 9 Dec 2008 21:31:39 +0100 Subject: blit just needed regions --- lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.cpp') diff --git a/lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.cpp b/lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.cpp index 5d6a0870..4a85a020 100644 --- a/lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.cpp +++ b/lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.cpp @@ -176,8 +176,11 @@ void eServiceDVD::gotMessage(int /*what*/) } case DDVD_SCREEN_UPDATE: eDebug("DVD_SCREEN_UPDATE!"); - if (m_subtitle_widget) - m_subtitle_widget->setPixmap(m_pixmap, eRect(ePoint(0, 0), m_pixmap->size())); + if (m_subtitle_widget) { + int x1,x2,y1,y2; + ddvd_get_last_blit_area(m_ddvdconfig, &x1, &x2, &y1, &y2); + m_subtitle_widget->setPixmap(m_pixmap, eRect(x1, y1, x2-x1, y2-y1)); + } break; case DDVD_SHOWOSD_STATE_PLAY: { -- cgit v1.2.3 From a6976a2c3c6256a0c860827550aabd7ee9bdf3bf Mon Sep 17 00:00:00 2001 From: ghost Date: Wed, 10 Dec 2008 02:45:26 +0100 Subject: fix mem leak --- lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.cpp') diff --git a/lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.cpp b/lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.cpp index 4a85a020..02c0ca94 100644 --- a/lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.cpp +++ b/lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.cpp @@ -280,6 +280,7 @@ eServiceDVD::~eServiceDVD() kill(); saveCuesheet(); ddvd_close(m_ddvdconfig); + disableSubtitles(0); } RESULT eServiceDVD::connectEvent(const Slot2 &event, ePtr &connection) @@ -534,8 +535,7 @@ PyObject *eServiceDVD::getInfoObject(int w) RESULT eServiceDVD::enableSubtitles(eWidget *parent, SWIG_PYOBJECT(ePyObject) /*entry*/) { - if (m_subtitle_widget) - delete m_subtitle_widget; + delete m_subtitle_widget; m_subtitle_widget = new eSubtitleWidget(parent); m_subtitle_widget->resize(parent->size()); -- cgit v1.2.3 From a95eebf5f729e64a319383e81ca142274b73974d Mon Sep 17 00:00:00 2001 From: ghost Date: Thu, 11 Dec 2008 12:43:12 +0100 Subject: servicedvd.cpp: fix typo --- lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.cpp') diff --git a/lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.cpp b/lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.cpp index 02c0ca94..d726be20 100644 --- a/lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.cpp +++ b/lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.cpp @@ -121,9 +121,9 @@ eServiceDVD::eServiceDVD(const char *filename): { rd = read(fd, tmp, 255); if (rd > 6 && !strncmp(tmp, "bestfit", 7)) - aspect = DDVD_JUSTSCALE; + policy = DDVD_JUSTSCALE; else if (rd > 8 && !strncmp(tmp, "letterbox", 9)) - aspect = DDVD_LETTERBOX; + policy = DDVD_LETTERBOX; close(fd); } -- cgit v1.2.3