From 379233db1dd9b2006e9c84c5affb3a733e53c1fc Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Thu, 30 Oct 2008 03:03:34 +0100 Subject: add .gitignore --- .gitignore | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..1e8472a7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,33 @@ +# git-ls-files --others --exclude-from=.git/info/exclude +# Lines that start with '#' are comments. +# For a project mostly in C, the following would be a good set of +# exclude patterns (uncomment them if you want to use them): +*.[oa] +*~ +Makefile.in +Makefile +*.so +*.so.0.0 +*.cxx +.deps +COPYING +INSTALL +aclocal.m4 +autom4te.cache/ +config.guess +config.log +config.status +config.sub +configure +depcomp +enigma2.pc +install-sh +lib/actions/actionids.h +lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.d +lib/python/enigma.py +missing +py-compile +po/ +main/enigma2 +version.h +*.d -- cgit v1.2.3 From c0d4e140b6ab536c08074800248c366fa7cb79b0 Mon Sep 17 00:00:00 2001 From: andy Date: Thu, 30 Oct 2008 15:09:21 +0100 Subject: add plugin list icon for dvdburn --- lib/python/Plugins/Extensions/DVDBurn/dvdburn.png | Bin 0 -> 3869 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100755 lib/python/Plugins/Extensions/DVDBurn/dvdburn.png diff --git a/lib/python/Plugins/Extensions/DVDBurn/dvdburn.png b/lib/python/Plugins/Extensions/DVDBurn/dvdburn.png new file mode 100755 index 00000000..7e7adead Binary files /dev/null and b/lib/python/Plugins/Extensions/DVDBurn/dvdburn.png differ -- cgit v1.2.3 From d36def84f92bb9206c792356954e62c533297af4 Mon Sep 17 00:00:00 2001 From: andy Date: Thu, 30 Oct 2008 18:24:06 +0100 Subject: fix execute string for tasks --- lib/python/Components/Task.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/python/Components/Task.py b/lib/python/Components/Task.py index 7ea64f1a..c152e9a2 100644 --- a/lib/python/Components/Task.py +++ b/lib/python/Components/Task.py @@ -136,7 +136,6 @@ class Task(object): def setTool(self, tool): self.cmd = tool - self.args = [tool] self.global_preconditions.append(ToolExistsPrecondition()) self.postconditions.append(ReturncodePostcondition()) @@ -172,7 +171,7 @@ class Task(object): if self.cwd is not None: self.container.setCWD(self.cwd) - execstr = self.cmd + " ".join(self.args) + #execstr = " ".join([self.cmd]+self.args) print "execute:", self.container.execute(execstr), execstr if self.initial_input: self.writeInput(self.initial_input) -- cgit v1.2.3 From 8d4316d824f584eb3900fef898de59c9aca8d771 Mon Sep 17 00:00:00 2001 From: ghost Date: Thu, 30 Oct 2008 18:54:24 +0100 Subject: add possibility to disable user input in Messageboxes --- lib/python/Screens/MessageBox.py | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/lib/python/Screens/MessageBox.py b/lib/python/Screens/MessageBox.py index 8477fe04..8a5989c7 100644 --- a/lib/python/Screens/MessageBox.py +++ b/lib/python/Screens/MessageBox.py @@ -12,7 +12,7 @@ class MessageBox(Screen): TYPE_WARNING = 2 TYPE_ERROR = 3 - def __init__(self, session, text, type = TYPE_YESNO, timeout = -1, close_on_any_key = False, default = True): + def __init__(self, session, text, type = TYPE_YESNO, timeout = -1, close_on_any_key = False, default = True, enable_input = True): self.type = type Screen.__init__(self, session) @@ -47,20 +47,21 @@ class MessageBox(Screen): self["selectedChoice"].setText(self.list[0][0]) self["list"] = MenuList(self.list) - self["actions"] = ActionMap(["MsgBoxActions", "DirectionActions"], - { - "cancel": self.cancel, - "ok": self.ok, - "alwaysOK": self.alwaysOK, - "up": self.up, - "down": self.down, - "left": self.left, - "right": self.right, - "upRepeated": self.up, - "downRepeated": self.down, - "leftRepeated": self.left, - "rightRepeated": self.right - }, -1) + if enable_input: + self["actions"] = ActionMap(["MsgBoxActions", "DirectionActions"], + { + "cancel": self.cancel, + "ok": self.ok, + "alwaysOK": self.alwaysOK, + "up": self.up, + "down": self.down, + "left": self.left, + "right": self.right, + "upRepeated": self.up, + "downRepeated": self.down, + "leftRepeated": self.left, + "rightRepeated": self.right + }, -1) def initTimeout(self, timeout): self.timeout = timeout -- cgit v1.2.3 From fe9c79a96232f5e5dd12158bf948188110412664 Mon Sep 17 00:00:00 2001 From: ghost Date: Thu, 30 Oct 2008 21:21:46 +0100 Subject: Add DiSEqC reset after voltage enable and tune failed... hopefully this fixes problems with some DiSEqC switches --- lib/dvb/frontend.cpp | 7 ++++++- lib/dvb/sec.cpp | 21 +++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/lib/dvb/frontend.cpp b/lib/dvb/frontend.cpp index 1bcacc03..635de8f5 100644 --- a/lib/dvb/frontend.cpp +++ b/lib/dvb/frontend.cpp @@ -1492,7 +1492,12 @@ void eDVBFrontend::tuneLoop() // called by m_tuneTimer eDebugNoSimulateNoNewLine("[SEC] sendDiseqc: "); for (int i=0; i < m_sec_sequence.current()->diseqc.len; ++i) eDebugNoSimulateNoNewLine("%02x", m_sec_sequence.current()->diseqc.data[i]); - eDebugNoSimulate(""); + if (!memcmp(m_sec_sequence.current()->diseqc.data, "\xE0\x00\x00", 3)) + eDebugNoSimulate("(DiSEqC reset)"); + else if (!memcmp(m_sec_sequence.current()->diseqc.data, "\xE0\x00\x03", 3)) + eDebugNoSimulate("(DiSEqC peripherial power on)"); + else + eDebugNoSimulate(""); ++m_sec_sequence.current(); break; case eSecCommand::SEND_TONEBURST: diff --git a/lib/dvb/sec.cpp b/lib/dvb/sec.cpp index ca9e4ec8..35a8d04a 100644 --- a/lib/dvb/sec.cpp +++ b/lib/dvb/sec.cpp @@ -372,6 +372,7 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA bool doSetVoltageToneFrontend = true; bool sendDiSEqC = false; bool forceChanged = false; + bool needDiSEqCReset = false; long band=0, voltage = iDVBFrontend::voltageOff, tone = iDVBFrontend::toneOff, @@ -418,6 +419,9 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA sec_fe->getData(eDVBFrontend::ROTOR_CMD, lastRotorCmd); sec_fe->getData(eDVBFrontend::ROTOR_POS, curRotorPos); + if (lastcsw == lastucsw && lastToneburst == lastucsw && lastucsw == -1) + needDiSEqCReset = true; + if ( sat.frequency > lnb_param.m_lof_threshold ) band |= 1; @@ -623,6 +627,23 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_ENABLE_VOLTAGE_BEFORE_SWITCH_CMDS]) ); sec_sequence.push_back( eSecCommand(eSecCommand::INVALIDATE_CURRENT_SWITCHPARMS) ); + if (needDiSEqCReset) + { + eDVBDiseqcCommand diseqc; + memset(diseqc.data, 0, MAX_DISEQC_LENGTH); + diseqc.len = 3; + diseqc.data[0] = 0xE0; + diseqc.data[1] = 0; + diseqc.data[2] = 0; + // diseqc reset + sec_sequence.push_back( eSecCommand(eSecCommand::SEND_DISEQC, diseqc) ); + sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 50) ); + diseqc.data[2] = 3; + // diseqc peripherial powersupply on + sec_sequence.push_back( eSecCommand(eSecCommand::SEND_DISEQC, diseqc) ); + sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 150) ); + } + for (int seq_repeat = 0; seq_repeat < (di_param.m_seq_repeat?2:1); ++seq_repeat) { if ( send_mask & 4 ) -- cgit v1.2.3 From 6c6704a6c897cef2aca87bd8d5a732ae1a2bac4a Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Fri, 31 Oct 2008 02:03:15 +0100 Subject: Patch by Anders Holst: * Undo "sparse-AP-fix" At March 25 a patch was checked in that makes sure that AP:s closer than half a second from each other are filtered away. I don't know the exact purpose of this fix, but I don't think it is a good idea: Besides being the cause of bugs 4 and 5 above, all seek operations are based on the AP:s, and it is a pity to cripple the precision here. And for example, when cutting movies it is important to be able to reach the right GOP boundary. (And the next fix relies on all boundaries being available.) (If you wonder, bug 5 was caused by a destructive interaction of this with the discontinuity handling.) * Hit GOP:s somewhat before GOP start It turns out that if you jump exactly to the GOP start, then that GOP is nevertheless skipped and playback starts from the GOP thereafter. However, if you jump to (at least) one frame before the GOP start, playback starts from that GOP. I don't know if this is a bug in the driver or elsewhere, but the best I can do is this workaround: Hit the GOP by jumping to half a GOP length before the GOP start. (By scanning the ts file it is of course possible to find the exact frame boundaries, but why bother since anywhere between the previous GOP start and the previous frame start will do.) Similarly, to show the first frame of a GOP, a few more frames must be included. Therefore, add half a GOP at the end of each source span. * Jump over discontinuities during AP relative seek The above two fixes together *almost* take care of bugs 1 and 2 above. Now seekRelative(1) moves one forward and seekRelative(-1) one backwards. However, at discontinuities they may get stuck. This is remedied by an extra if statement to check for discontinuities when stepping throught the AP:s in AP relative seek. * Stop after last source span In the function eDVBChannel::getNextSourceSpan there was no code to take care of the case when the seeked-to point is after the last source span. Currently it just goes on until the movie ends. I have added code for this, which takes care of bug 3, and as a fortunate bonus effect bug 6 too. (But please check my code here, I hope I can use current_offset the way I do, and return 0 size when it should stop.) --- lib/dvb/dvb.cpp | 32 +++++++++++++++++++++----------- lib/dvb/pvrparse.cpp | 48 +++++++++++++++++++++++++++++++++--------------- lib/dvb/pvrparse.h | 2 +- lib/dvb/tstools.cpp | 7 +++++-- lib/dvb/tstools.h | 2 +- 5 files changed, 61 insertions(+), 30 deletions(-) diff --git a/lib/dvb/dvb.cpp b/lib/dvb/dvb.cpp index 68d9a0dd..6edf9e87 100644 --- a/lib/dvb/dvb.cpp +++ b/lib/dvb/dvb.cpp @@ -1195,7 +1195,7 @@ void eDVBChannel::cueSheetEvent(int event) { off_t offset_in, offset_out; pts_t pts_in = i->first, pts_out = i->second; - if (m_tstools.getOffset(offset_in, pts_in) || m_tstools.getOffset(offset_out, pts_out)) + if (m_tstools.getOffset(offset_in, pts_in, -1) || m_tstools.getOffset(offset_out, pts_out, 1)) { eDebug("span translation failed.\n"); continue; @@ -1323,13 +1323,13 @@ void eDVBChannel::getNextSourceSpan(off_t current_offset, size_t bytes_read, off eDebug("AP relative seeking failed!"); } else { - eDebug("next ap is %llx\n", pts); pts = nextap; + eDebug("next ap is %llx\n", pts); } } off_t offset = 0; - if (m_tstools.getOffset(offset, pts)) + if (m_tstools.getOffset(offset, pts, -1)) { eDebug("get offset for pts=%lld failed!", pts); continue; @@ -1403,16 +1403,26 @@ void eDVBChannel::getNextSourceSpan(off_t current_offset, size_t bytes_read, off } } - if ((current_offset < -m_skipmode_m) && (m_skipmode_m < 0)) - { - eDebug("reached SOF"); - m_skipmode_m = 0; - m_pvr_thread->sendEvent(eFilePushThread::evtUser); + if (m_source_span.empty()) { + if ((current_offset < -m_skipmode_m) && (m_skipmode_m < 0)) + { + eDebug("reached SOF"); + m_skipmode_m = 0; + m_pvr_thread->sendEvent(eFilePushThread::evtUser); + } + start = current_offset; + size = max; + } else { + off_t tmp = align(m_source_span.rbegin()->second, blocksize); + if (current_offset == tmp) { + start = current_offset; + size = 0; + } else { + start = tmp - align(512*1024, blocksize); + size = align(512*1024, blocksize); + } } - start = current_offset; - size = max; - eDebug("END OF CUESHEET. (%08llx, %d)", start, size); return; } diff --git a/lib/dvb/pvrparse.cpp b/lib/dvb/pvrparse.cpp index 1b827d3c..35ba9091 100644 --- a/lib/dvb/pvrparse.cpp +++ b/lib/dvb/pvrparse.cpp @@ -36,8 +36,6 @@ int eMPEGStreamInformation::load(const char *filename) return -1; m_access_points.clear(); m_pts_to_offset.clear(); - pts_t last = -(1LL<<62); - int loaded = 0, skipped = 0; while (1) { unsigned long long d[2]; @@ -48,16 +46,9 @@ int eMPEGStreamInformation::load(const char *filename) d[0] = bswap_64(d[0]); d[1] = bswap_64(d[1]); #endif - if ((d[1] - last) > 90000/2) - { - m_access_points[d[0]] = d[1]; - m_pts_to_offset.insert(std::pair(d[1], d[0])); - last = d[1]; - loaded++; - } else - skipped++; + m_access_points[d[0]] = d[1]; + m_pts_to_offset.insert(std::pair(d[1], d[0])); } - eDebug("loaded %d, skipped %d", loaded, skipped); fclose(f); fixupDiscontinuties(); return 0; @@ -216,30 +207,45 @@ pts_t eMPEGStreamInformation::getInterpolated(off_t offset) return before_ts + diff; } -off_t eMPEGStreamInformation::getAccessPoint(pts_t ts) +off_t eMPEGStreamInformation::getAccessPoint(pts_t ts, int marg) { /* FIXME: more efficient implementation */ off_t last = 0; + off_t last2 = 0; + pts_t lastc = 0; for (std::map::const_iterator i(m_access_points.begin()); i != m_access_points.end(); ++i) { pts_t delta = getDelta(i->first); pts_t c = i->second - delta; - if (c > ts) - break; + if (c > ts) { + if (marg > 0) + return (last + i->first)/376*188; + else if (marg < 0) + return (last + last2)/376*188; + else + return last; + } + lastc = c; + last2 = last; last = i->first; } - return last; + if (marg < 0) + return (last + last2)/376*188; + else + return last; } int eMPEGStreamInformation::getNextAccessPoint(pts_t &ts, const pts_t &start, int direction) { off_t offset = getAccessPoint(start); + pts_t c1, c2; std::map::const_iterator i = m_access_points.find(offset); if (i == m_access_points.end()) { eDebug("getNextAccessPoint: initial AP not found"); return -1; } + c1 = i->second - getDelta(i->first); while (direction) { if (direction > 0) @@ -247,6 +253,12 @@ int eMPEGStreamInformation::getNextAccessPoint(pts_t &ts, const pts_t &start, in if (i == m_access_points.end()) return -1; ++i; + c2 = i->second - getDelta(i->first); + if (c1 == c2) { // Discontinuity + ++i; + c2 = i->second - getDelta(i->first); + } + c1 = c2; direction--; } if (direction < 0) @@ -257,6 +269,12 @@ int eMPEGStreamInformation::getNextAccessPoint(pts_t &ts, const pts_t &start, in return -1; } --i; + c2 = i->second - getDelta(i->first); + if (c1 == c2) { // Discontinuity + --i; + c2 = i->second - getDelta(i->first); + } + c1 = c2; direction++; } } diff --git a/lib/dvb/pvrparse.h b/lib/dvb/pvrparse.h index 69bb9924..b2ddd23d 100644 --- a/lib/dvb/pvrparse.h +++ b/lib/dvb/pvrparse.h @@ -41,7 +41,7 @@ public: /* inter/extrapolate timestamp from offset */ pts_t getInterpolated(off_t offset); - off_t getAccessPoint(pts_t ts); + off_t getAccessPoint(pts_t ts, int marg=0); int getNextAccessPoint(pts_t &ts, const pts_t &start, int direction); diff --git a/lib/dvb/tstools.cpp b/lib/dvb/tstools.cpp index 5157ef22..bd7ebce2 100644 --- a/lib/dvb/tstools.cpp +++ b/lib/dvb/tstools.cpp @@ -209,11 +209,14 @@ int eDVBTSTools::fixupPTS(const off_t &offset, pts_t &now) } } -int eDVBTSTools::getOffset(off_t &offset, pts_t &pts) +int eDVBTSTools::getOffset(off_t &offset, pts_t &pts, int marg) { if (m_use_streaminfo) { - offset = m_streaminfo.getAccessPoint(pts); + if (pts >= m_pts_end && marg > 0 && m_end_valid) + offset = m_offset_end; + else + offset = m_streaminfo.getAccessPoint(pts, marg); return 0; } else { diff --git a/lib/dvb/tstools.h b/lib/dvb/tstools.h index 13168253..4bc04729 100644 --- a/lib/dvb/tstools.h +++ b/lib/dvb/tstools.h @@ -40,7 +40,7 @@ public: int fixupPTS(const off_t &offset, pts_t &pts); /* get (approximate) offset corresponding to PTS */ - int getOffset(off_t &offset, pts_t &pts); + int getOffset(off_t &offset, pts_t &pts, int marg=0); int getNextAccessPoint(pts_t &ts, const pts_t &start, int direction); -- cgit v1.2.3 From 82140ec88c4b239d02976938a718988cd6a618d9 Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Fri, 31 Oct 2008 03:28:21 +0100 Subject: disable dependency on CVS files --- main/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main/Makefile.am b/main/Makefile.am index 91606de6..891b646a 100644 --- a/main/Makefile.am +++ b/main/Makefile.am @@ -19,7 +19,7 @@ enigma.o: version.h # this depends on Entries and not on Tag because Tag isn't always there. # Entries, however, will change then Tag is changed, so everything is fine. -version.h: ../CVS/Entries ../CVS/Root +version.h: # ../CVS/Entries ../CVS/Root > version.h if [ -f ../CVS/Tag ]; then echo "#define ENIGMA2_CHECKOUT_TAG \"`cat ../CVS/Tag`\"" >> version.h; fi if [ -f ../CVS/Root ]; then echo "#define ENIGMA2_CHECKOUT_ROOT \"`cat ../CVS/Root`\"" >> version.h; fi -- cgit v1.2.3 From d58b056ba2fff638bfb27b385192abaa9a84e31b Mon Sep 17 00:00:00 2001 From: Fraxinas Date: Fri, 31 Oct 2008 10:24:17 +0100 Subject: fix mem bug by changing c strings to cpp strings --- lib/service/servicemp3.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/lib/service/servicemp3.cpp b/lib/service/servicemp3.cpp index a453f54f..5c982aa1 100644 --- a/lib/service/servicemp3.cpp +++ b/lib/service/servicemp3.cpp @@ -273,31 +273,31 @@ eServiceMP3::eServiceMP3(const char *filename): m_filename(filename), m_pump(eAp queue_audio = gst_element_factory_make("queue", "queue_audio"); queue_video = gst_element_factory_make("queue", "queue_video"); - char demux_type[14]; + std::string demux_type; switch (sourceinfo.containertype) { case ctMPEGTS: - strcat(demux_type, "flutsdemux"); + demux_type = "flutsdemux"; break; case ctMPEGPS: case ctVCD: - strcat(demux_type, "flupsdemux"); + demux_type = "flupsdemux"; break; case ctMKV: - strcat(demux_type, "matroskademux"); + demux_type = "matroskademux"; break; case ctAVI: - strcat(demux_type, "avidemux"); + demux_type = "avidemux"; break; case ctMP4: - strcat(demux_type, "qtdemux"); + demux_type = "qtdemux"; break; default: break; } - videodemux = gst_element_factory_make(demux_type, "videodemux"); + videodemux = gst_element_factory_make(demux_type.c_str(), "videodemux"); if (!videodemux) - m_error_message = "GStreamer plugin " + (std::string)demux_type + " not available!\n"; + m_error_message = "GStreamer plugin " + demux_type + " not available!\n"; switch_audio = gst_element_factory_make ("input-selector", "switch_audio"); if (!switch_audio) -- cgit v1.2.3 From f69b4f8dbed8ff96260b951cf8cecd76fa85423b Mon Sep 17 00:00:00 2001 From: Fraxinas Date: Fri, 31 Oct 2008 11:18:40 +0100 Subject: uncomment necessary line --- lib/python/Components/Task.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/python/Components/Task.py b/lib/python/Components/Task.py index c152e9a2..47acc87e 100644 --- a/lib/python/Components/Task.py +++ b/lib/python/Components/Task.py @@ -171,7 +171,7 @@ class Task(object): if self.cwd is not None: self.container.setCWD(self.cwd) - #execstr = " ".join([self.cmd]+self.args) + execstr = " ".join([self.cmd]+self.args) print "execute:", self.container.execute(execstr), execstr if self.initial_input: self.writeInput(self.initial_input) -- cgit v1.2.3 From 19ce1123c780a9475e2f158712da6e73fa543e9c Mon Sep 17 00:00:00 2001 From: ghost Date: Fri, 31 Oct 2008 13:07:01 +0100 Subject: add possibility to call eConsoleAppContainer execute with unlimited count of arguments when its called with single argument, then /bin/sh is started else not --- lib/base/console.cpp | 36 +++++++++++++++++++++++++++++++----- lib/python/Components/Task.py | 4 ++-- 2 files changed, 33 insertions(+), 7 deletions(-) diff --git a/lib/base/console.cpp b/lib/base/console.cpp index a12cb5e2..25318cc9 100644 --- a/lib/base/console.cpp +++ b/lib/base/console.cpp @@ -476,11 +476,37 @@ eConsolePy_running(eConsolePy* self) static PyObject * eConsolePy_execute(eConsolePy* self, PyObject *argt) { - const char *str; - if (PyArg_ParseTuple(argt, "s", &str)) - return PyInt_FromLong(self->cont->execute(str)); - PyErr_SetString(PyExc_TypeError, - "argument is not a string"); + Py_ssize_t argc = PyTuple_Size(argt); + if (argc > 1) + { + const char *argv[argc + 1]; + int argpos=0; + while(argpos < argc) + { + PyObject *arg = PyTuple_GET_ITEM(argt, argpos); + if (!PyString_Check(arg)) + { + char err[255]; + if (argpos) + snprintf(err, 255, "arg %d is not a string", argpos); + else + snprintf(err, 255, "cmd is not a string!"); + PyErr_SetString(PyExc_TypeError, err); + return NULL; + } + argv[argpos++] = PyString_AsString(arg); + } + argv[argpos] = 0; + return PyInt_FromLong(self->cont->execute(argv[0], argv)); + } + else + { + const char *str; + if (PyArg_ParseTuple(argt, "s", &str)) + return PyInt_FromLong(self->cont->execute(str)); + PyErr_SetString(PyExc_TypeError, + "cmd is not a string!"); + } return NULL; } diff --git a/lib/python/Components/Task.py b/lib/python/Components/Task.py index 47acc87e..ab85c667 100644 --- a/lib/python/Components/Task.py +++ b/lib/python/Components/Task.py @@ -136,6 +136,7 @@ class Task(object): def setTool(self, tool): self.cmd = tool + self.args = [tool] self.global_preconditions.append(ToolExistsPrecondition()) self.postconditions.append(ReturncodePostcondition()) @@ -171,8 +172,7 @@ class Task(object): if self.cwd is not None: self.container.setCWD(self.cwd) - execstr = " ".join([self.cmd]+self.args) - print "execute:", self.container.execute(execstr), execstr + print "execute:", self.container.execute(self.cmd, *self.args), self.cmd, *self.args if self.initial_input: self.writeInput(self.initial_input) -- cgit v1.2.3 From 7a216595cc53d9114b183dc4499166e6ddf43105 Mon Sep 17 00:00:00 2001 From: Fraxinas Date: Fri, 31 Oct 2008 13:12:43 +0100 Subject: add "TEXT" key for subtitles in MediaPlayer --- data/keymap.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/data/keymap.xml b/data/keymap.xml index 4ee6fb53..5e73490e 100644 --- a/data/keymap.xml +++ b/data/keymap.xml @@ -642,5 +642,6 @@ + -- cgit v1.2.3 From 55acebf9599ad782cc305c13d18a14af66e65c20 Mon Sep 17 00:00:00 2001 From: ghost Date: Fri, 31 Oct 2008 14:03:55 +0100 Subject: dont add cmd to arglist --- lib/base/console.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/base/console.cpp b/lib/base/console.cpp index 25318cc9..5ca77d12 100644 --- a/lib/base/console.cpp +++ b/lib/base/console.cpp @@ -497,7 +497,7 @@ eConsolePy_execute(eConsolePy* self, PyObject *argt) argv[argpos++] = PyString_AsString(arg); } argv[argpos] = 0; - return PyInt_FromLong(self->cont->execute(argv[0], argv)); + return PyInt_FromLong(self->cont->execute(argv[0], argv+1)); } else { -- cgit v1.2.3 From de868496fdbc0dc65d961d7404bfd7af827e045f Mon Sep 17 00:00:00 2001 From: ghost Date: Fri, 31 Oct 2008 14:04:12 +0100 Subject: fix syntax error --- lib/python/Components/Task.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/python/Components/Task.py b/lib/python/Components/Task.py index ab85c667..f249f711 100644 --- a/lib/python/Components/Task.py +++ b/lib/python/Components/Task.py @@ -172,7 +172,7 @@ class Task(object): if self.cwd is not None: self.container.setCWD(self.cwd) - print "execute:", self.container.execute(self.cmd, *self.args), self.cmd, *self.args + print "execute:", self.container.execute(self.cmd, *self.args), self.cmd, self.args if self.initial_input: self.writeInput(self.initial_input) -- cgit v1.2.3 From 95f74bb07093569c7996b331efa189a1d115eefe Mon Sep 17 00:00:00 2001 From: Fraxinas Date: Fri, 31 Oct 2008 14:11:59 +0100 Subject: actually burn and not just simulate burning to dvd-MINUS-r(w) media --- lib/python/Plugins/Extensions/DVDBurn/Process.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/python/Plugins/Extensions/DVDBurn/Process.py b/lib/python/Plugins/Extensions/DVDBurn/Process.py index b8a3788e..1cc11e2d 100644 --- a/lib/python/Plugins/Extensions/DVDBurn/Process.py +++ b/lib/python/Plugins/Extensions/DVDBurn/Process.py @@ -701,7 +701,7 @@ class DVDJob(Job): if output == "dvd": self.name = _("Burn DVD") tool = "/bin/growisofs" - burnargs = [ "-Z", "/dev/" + harddiskmanager.getCD(), "-dvd-compat", "-use-the-force-luke=dummy" ] + burnargs = [ "-Z", "/dev/" + harddiskmanager.getCD(), "-dvd-compat" ] elif output == "iso": self.name = _("Create DVD-ISO") tool = "/usr/bin/mkisofs" @@ -739,7 +739,7 @@ class DVDdataJob(Job): tool = "/bin/growisofs" if output == "dvd": self.name = _("Burn DVD") - burnargs = [ "-Z", "/dev/" + harddiskmanager.getCD(), "-dvd-compat", "-use-the-force-luke=dummy" ] + burnargs = [ "-Z", "/dev/" + harddiskmanager.getCD(), "-dvd-compat" ] elif output == "iso": tool = "/usr/bin/mkisofs" self.name = _("Create DVD-ISO") @@ -762,11 +762,11 @@ class DVDisoJob(Job): self.menupreview = False if imagepath.endswith(".iso"): PreviewTask(self, imagepath) - burnargs = [ "-Z", "/dev/" + harddiskmanager.getCD() + '='+imagepath, "-dvd-compat", "-use-the-force-luke=dummy" ] + burnargs = [ "-Z", "/dev/" + harddiskmanager.getCD() + '='+imagepath, "-dvd-compat" ] else: PreviewTask(self, imagepath + "/VIDEO_TS/") volName = self.project.settings.name.getValue() - burnargs = [ "-Z", "/dev/" + harddiskmanager.getCD(), "-dvd-compat", "-use-the-force-luke=dummy" ] + burnargs = [ "-Z", "/dev/" + harddiskmanager.getCD(), "-dvd-compat" ] burnargs += [ "-dvd-video", "-publisher", "Dreambox", "-V", volName, imagepath ] tool = "/bin/growisofs" BurnTask(self, burnargs, tool) -- cgit v1.2.3 From 9f767ea6bfa7f37de7553b3c7f15adb678c63d71 Mon Sep 17 00:00:00 2001 From: Fraxinas Date: Fri, 31 Oct 2008 15:08:48 +0100 Subject: add additional clear text error messages for burntask --- lib/python/Plugins/Extensions/DVDBurn/Process.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/python/Plugins/Extensions/DVDBurn/Process.py b/lib/python/Plugins/Extensions/DVDBurn/Process.py index 1cc11e2d..7a03b7eb 100644 --- a/lib/python/Plugins/Extensions/DVDBurn/Process.py +++ b/lib/python/Plugins/Extensions/DVDBurn/Process.py @@ -251,11 +251,13 @@ class BurnTaskPostcondition(Condition): task.ERROR_WRITE_FAILED: _("Write failed!"), task.ERROR_DVDROM: _("No (supported) DVDROM found!"), task.ERROR_ISOFS: _("Medium is not empty!"), + task.ERROR_FILETOOLARGE: _("TS file is too large for ISO9660 level 1!"), + task.ERROR_ISOTOOLARGE: _("ISO file is too large for this filesystem!"), task.ERROR_UNKNOWN: _("An unknown error occured!") }[task.error] class BurnTask(Task): - ERROR_NOTWRITEABLE, ERROR_LOAD, ERROR_SIZE, ERROR_WRITE_FAILED, ERROR_DVDROM, ERROR_ISOFS, ERROR_UNKNOWN = range(7) + ERROR_NOTWRITEABLE, ERROR_LOAD, ERROR_SIZE, ERROR_WRITE_FAILED, ERROR_DVDROM, ERROR_ISOFS, ERROR_FILETOOLARGE, ERROR_ISOTOOLARGE, ERROR_UNKNOWN = range(9) def __init__(self, job, extra_args=[], tool="/bin/growisofs"): Task.__init__(self, job, job.name) self.weighting = 500 @@ -303,6 +305,10 @@ class BurnTask(Task): else: self.error = self.ERROR_UNKNOWN print "BurnTask: unknown error %s" % line + elif line.find("-allow-limited-size was not specified. There is no way do represent this file size. Aborting.") != -1: + self.error = self.ERROR_FILETOOLARGE + elif line.startswith("genisoimage: File too large."): + self.error = self.ERROR_ISOTOOLARGE class RemoveDVDFolder(Task): def __init__(self, job): -- cgit v1.2.3 From 28c7b76bc72da019f3c3bf3aca88c3636062a618 Mon Sep 17 00:00:00 2001 From: ghost Date: Fri, 31 Oct 2008 16:43:41 +0100 Subject: needed update for avahi stuff --- lib/python/Components/Network.py | 102 +++++++++++++++++++++++++-------------- 1 file changed, 65 insertions(+), 37 deletions(-) diff --git a/lib/python/Components/Network.py b/lib/python/Components/Network.py index 9b0898e0..5c9e06b7 100644 --- a/lib/python/Components/Network.py +++ b/lib/python/Components/Network.py @@ -14,10 +14,11 @@ class Network: self.Console = Console() self.getInterfaces() - def getInterfaces(self): + def getInterfaces(self, callback = None): devicesPattern = re_compile('[a-z]+[0-9]+') self.configuredInterfaces = [] fp = file('/proc/net/dev', 'r') + system("cat /proc/net/dev") result = fp.readlines() fp.close() for line in result: @@ -25,19 +26,10 @@ class Network: device = devicesPattern.search(line).group() if device == 'wifi0': continue - self.getDataForInterface(device) - # Show only UP Interfaces in E2 - #if self.getAdapterAttribute(device, 'up') is False: - # del self.ifaces[device] + self.getDataForInterface(device, callback) except AttributeError: pass - #print "self.ifaces:", self.ifaces - #self.writeNetworkConfig() - #print ord(' ') - #for line in result: - # print ord(line[0]) - # helper function def regExpMatch(self, pattern, string): if string is None: @@ -55,12 +47,37 @@ class Network: ip.append(int(x)) return ip - def getDataForInterface(self, iface): - cmd = "ifconfig " + iface - self.Console.ePopen(cmd, self.ifconfigFinished, iface) - - def ifconfigFinished(self, result, retval, iface): + def IPaddrFinished(self, result, retval, extra_args): + (iface, callback ) = extra_args data = { 'up': False, 'dhcp': False, 'preup' : False, 'postdown' : False } + globalIPpattern = re_compile("scope global") + ipRegexp = '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' + ipLinePattern = re_compile('inet ' + ipRegexp +'/') + ipPattern = re_compile(ipRegexp) + + for line in result.splitlines(): + split = line.strip().split(' ',2) + if (split[1] == iface): + if re_search(globalIPpattern, split[2]): + ip = self.regExpMatch(ipPattern, self.regExpMatch(ipLinePattern, split[2])) + if ip is not None: + data['ip'] = self.convertIP(ip) + if not data.has_key('ip'): + data['dhcp'] = True + data['ip'] = [0, 0, 0, 0] + data['netmask'] = [0, 0, 0, 0] + data['gateway'] = [0, 0, 0, 0] + + cmd = "ifconfig " + iface + self.Console.ePopen(cmd, self.ifconfigFinished, [iface, data, callback]) + + def getDataForInterface(self, iface,callback): + #get ip out of ip addr, as avahi sometimes overrides it in ifconfig. + cmd = "ip -o addr" + self.Console.ePopen(cmd, self.IPaddrFinished, [iface,callback]) + + def ifconfigFinished(self, result, retval, extra_args ): + (iface, data, callback ) = extra_args ipRegexp = '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' ipLinePattern = re_compile('inet addr:' + ipRegexp) netmaskLinePattern = re_compile('Mask:' + ipRegexp) @@ -68,15 +85,15 @@ class Network: ipPattern = re_compile(ipRegexp) upPattern = re_compile('UP ') macPattern = re_compile('[0-9]{2}\:[0-9]{2}\:[0-9]{2}\:[0-9]{2}\:[0-9]{2}\:[0-9]{2}') - + for line in result.splitlines(): - ip = self.regExpMatch(ipPattern, self.regExpMatch(ipLinePattern, line)) + #ip = self.regExpMatch(ipPattern, self.regExpMatch(ipLinePattern, line)) netmask = self.regExpMatch(ipPattern, self.regExpMatch(netmaskLinePattern, line)) bcast = self.regExpMatch(ipPattern, self.regExpMatch(bcastLinePattern, line)) up = self.regExpMatch(upPattern, line) mac = self.regExpMatch(macPattern, line) - if ip is not None: - data['ip'] = self.convertIP(ip) + #if ip is not None: + # data['ip'] = self.convertIP(ip) if netmask is not None: data['netmask'] = self.convertIP(netmask) if bcast is not None: @@ -87,27 +104,34 @@ class Network: self.configuredInterfaces.append(iface) if mac is not None: data['mac'] = mac - if not data.has_key('ip'): - data['dhcp'] = True - data['ip'] = [0, 0, 0, 0] - data['netmask'] = [0, 0, 0, 0] - data['gateway'] = [0, 0, 0, 0] - + cmd = "route -n | grep " + iface - self.Console.ePopen(cmd,self.routeFinished,[iface,data,ipPattern]) + self.Console.ePopen(cmd,self.routeFinished,[iface,data,callback]) def routeFinished(self, result, retval, extra_args): - (iface, data, ipPattern) = extra_args - + (iface, data, callback) = extra_args + ipRegexp = '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' + ipPattern = re_compile(ipRegexp) + ipLinePattern = re_compile(ipRegexp) + for line in result.splitlines(): print line[0:7] if line[0:7] == "0.0.0.0": gateway = self.regExpMatch(ipPattern, line[16:31]) if gateway is not None: data['gateway'] = self.convertIP(gateway) + + for line in result.splitlines(): #get real netmask in case avahi has overridden ifconfig netmask + split = line.strip().split(' ') + if re_search(ipPattern, split[0]): + foundip = self.convertIP(split[0]) + if (foundip[0] == data['ip'][0] and foundip[1] == data['ip'][1]): + if re_search(ipPattern, split[4]): + mask = self.regExpMatch(ipPattern, self.regExpMatch(ipLinePattern, split[4])) + if mask is not None: + data['netmask'] = self.convertIP(mask) self.ifaces[iface] = data - if len(self.Console.appContainers) == 0: - self.loadNetworkConfig() + self.loadNetworkConfig(iface,callback) def writeNetworkConfig(self): self.configuredInterfaces = [] @@ -144,8 +168,7 @@ class Network: fp.write("nameserver %d.%d.%d.%d\n" % tuple(nameserver)) fp.close() - def loadNetworkConfig(self): - self.loadNameserverConfig() + def loadNetworkConfig(self,iface,callback = None): interfaces = [] # parse the interfaces-file try: @@ -166,7 +189,7 @@ class Network: ifaces[currif]["dhcp"] = True else: ifaces[currif]["dhcp"] = False - if (currif != ""): + if (currif == iface): #read information only for available interfaces if (split[0] == "address"): ifaces[currif]["address"] = map(int, split[1].split('.')) if self.ifaces[currif].has_key("ip"): @@ -181,7 +204,7 @@ class Network: ifaces[currif]["gateway"] = map(int, split[1].split('.')) if self.ifaces[currif].has_key("gateway"): if self.ifaces[currif]["gateway"] != ifaces[currif]["gateway"] and ifaces[currif]["dhcp"] == False: - self.ifaces[currif]["gateway"] = map(int, split[1].split('.')) + self.ifaces[currif]["gateway"] = map(int, split[1].split('.')) if (split[0] == "pre-up"): if self.ifaces[currif].has_key("preup"): self.ifaces[currif]["preup"] = i @@ -189,11 +212,16 @@ class Network: if self.ifaces[currif].has_key("postdown"): self.ifaces[currif]["postdown"] = i - print "read interfaces:", ifaces for ifacename, iface in ifaces.items(): if self.ifaces.has_key(ifacename): self.ifaces[ifacename]["dhcp"] = iface["dhcp"] - print "self.ifaces after loading:", self.ifaces + if len(self.Console.appContainers) == 0: + # load ns only once + self.loadNameserverConfig() + print "read configured interfac:", ifaces + print "self.ifaces after loading:", self.ifaces + if callback is not None: + callback(True) def loadNameserverConfig(self): ipRegexp = "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" -- cgit v1.2.3 From 340ec4b3727cb61e1038ca97b006471b5568e8a3 Mon Sep 17 00:00:00 2001 From: ghost Date: Fri, 31 Oct 2008 17:16:10 +0100 Subject: remove debug output --- lib/python/Components/Network.py | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/python/Components/Network.py b/lib/python/Components/Network.py index 5c9e06b7..cf21c6d0 100644 --- a/lib/python/Components/Network.py +++ b/lib/python/Components/Network.py @@ -18,7 +18,6 @@ class Network: devicesPattern = re_compile('[a-z]+[0-9]+') self.configuredInterfaces = [] fp = file('/proc/net/dev', 'r') - system("cat /proc/net/dev") result = fp.readlines() fp.close() for line in result: -- cgit v1.2.3 From 7d90a93493f1dc9ab9d3a5694aa96501a9b25b89 Mon Sep 17 00:00:00 2001 From: ghost Date: Fri, 31 Oct 2008 19:36:58 +0100 Subject: add missing import --- lib/python/Components/Network.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/python/Components/Network.py b/lib/python/Components/Network.py index cf21c6d0..bed9d95f 100644 --- a/lib/python/Components/Network.py +++ b/lib/python/Components/Network.py @@ -1,5 +1,5 @@ from os import system, popen, path as os_path, listdir -from re import compile as re_compile +from re import compile as re_compile, search as re_search from socket import * from enigma import eConsoleAppContainer from Components.Console import Console -- cgit v1.2.3 From 70084c02aa33ef20e61d0b6257a679ab76a42660 Mon Sep 17 00:00:00 2001 From: Fraxinas Date: Sat, 1 Nov 2008 00:34:47 +0100 Subject: add icon to be installed. remove deprecated directories --- .../Plugins/Extensions/DVDBurn/data/Makefile.am | 6 ------ .../Plugins/Extensions/DVDBurn/data/dreamdvd_boat.jpg | Bin 187417 -> 0 bytes .../Plugins/Extensions/DVDBurn/data/dreamvmgm.mpg | Bin 575488 -> 0 bytes .../Plugins/Extensions/DVDBurn/data/silence.mp2 | Bin 8340 -> 0 bytes .../DVDBurn/template/DreamboxDVDtemplate.ddvdp.xml | 18 ------------------ .../Plugins/Extensions/DVDBurn/template/Makefile.am | 7 ------- 6 files changed, 31 deletions(-) delete mode 100644 lib/python/Plugins/Extensions/DVDBurn/data/Makefile.am delete mode 100755 lib/python/Plugins/Extensions/DVDBurn/data/dreamdvd_boat.jpg delete mode 100644 lib/python/Plugins/Extensions/DVDBurn/data/dreamvmgm.mpg delete mode 100644 lib/python/Plugins/Extensions/DVDBurn/data/silence.mp2 delete mode 100644 lib/python/Plugins/Extensions/DVDBurn/template/DreamboxDVDtemplate.ddvdp.xml delete mode 100644 lib/python/Plugins/Extensions/DVDBurn/template/Makefile.am diff --git a/lib/python/Plugins/Extensions/DVDBurn/data/Makefile.am b/lib/python/Plugins/Extensions/DVDBurn/data/Makefile.am deleted file mode 100644 index e5992b9c..00000000 --- a/lib/python/Plugins/Extensions/DVDBurn/data/Makefile.am +++ /dev/null @@ -1,6 +0,0 @@ -AUTOMAKE_OPTIONS = gnu - -installdir = $(DATADIR)/enigma2 - -install_DATA = \ - dreamdvd_boat.jpg dreamvmgm.mpg silence.mp2 diff --git a/lib/python/Plugins/Extensions/DVDBurn/data/dreamdvd_boat.jpg b/lib/python/Plugins/Extensions/DVDBurn/data/dreamdvd_boat.jpg deleted file mode 100755 index a5256e28..00000000 Binary files a/lib/python/Plugins/Extensions/DVDBurn/data/dreamdvd_boat.jpg and /dev/null differ diff --git a/lib/python/Plugins/Extensions/DVDBurn/data/dreamvmgm.mpg b/lib/python/Plugins/Extensions/DVDBurn/data/dreamvmgm.mpg deleted file mode 100644 index 4797986f..00000000 Binary files a/lib/python/Plugins/Extensions/DVDBurn/data/dreamvmgm.mpg and /dev/null differ diff --git a/lib/python/Plugins/Extensions/DVDBurn/data/silence.mp2 b/lib/python/Plugins/Extensions/DVDBurn/data/silence.mp2 deleted file mode 100644 index e8a817f8..00000000 Binary files a/lib/python/Plugins/Extensions/DVDBurn/data/silence.mp2 and /dev/null differ diff --git a/lib/python/Plugins/Extensions/DVDBurn/template/DreamboxDVDtemplate.ddvdp.xml b/lib/python/Plugins/Extensions/DVDBurn/template/DreamboxDVDtemplate.ddvdp.xml deleted file mode 100644 index b839ad8a..00000000 --- a/lib/python/Plugins/Extensions/DVDBurn/template/DreamboxDVDtemplate.ddvdp.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - diff --git a/lib/python/Plugins/Extensions/DVDBurn/template/Makefile.am b/lib/python/Plugins/Extensions/DVDBurn/template/Makefile.am deleted file mode 100644 index f0d9e8a0..00000000 --- a/lib/python/Plugins/Extensions/DVDBurn/template/Makefile.am +++ /dev/null @@ -1,7 +0,0 @@ -AUTOMAKE_OPTIONS = gnu - -installdir = /etc/enigma2/playlist - -install_DATA = \ - DreamboxDVDtemplate.ddvdp.xml - -- cgit v1.2.3 From bac628cdd294815c4c09f8f6634357d4f2baadf9 Mon Sep 17 00:00:00 2001 From: ghost Date: Sun, 2 Nov 2008 10:40:46 +0100 Subject: small fix --- lib/dvb/dvbtime.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/dvb/dvbtime.cpp b/lib/dvb/dvbtime.cpp index 83ca3355..c4335795 100644 --- a/lib/dvb/dvbtime.cpp +++ b/lib/dvb/dvbtime.cpp @@ -394,7 +394,9 @@ void eDVBLocalTimeHandler::updateTime( time_t tp_time, eDVBChannel *chan, int up m_knownChannels.find(chan); if ( it != m_knownChannels.end() ) { - it->second.tdt = new TDT(chan, it->second.tdt->getUpdateCount()); + int updateCount = it->second.tdt->getUpdateCount(); + it->second.tdt = 0; + it->second.tdt = new TDT(chan, updateCount); it->second.tdt->startTimer(60*60*1000); // restart TDT for this transponder in 60min } } -- cgit v1.2.3 From 09fd651afb1107d45f5d400fad6bb4bb9b825439 Mon Sep 17 00:00:00 2001 From: ghost Date: Sun, 2 Nov 2008 10:42:12 +0100 Subject: check sid and tsid before start automatic service update (STD update) --- lib/dvb/pmt.cpp | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/lib/dvb/pmt.cpp b/lib/dvb/pmt.cpp index 6082bf4a..13734e0d 100644 --- a/lib/dvb/pmt.cpp +++ b/lib/dvb/pmt.cpp @@ -135,7 +135,19 @@ void eDVBServicePMTHandler::PATready(int) if (pmtpid == -1) serviceEvent(eventNoPATEntry); else + { // here we know a pat entry for this service id exist m_PMT.begin(eApp, eDVBPMTSpec(pmtpid, m_reference.getServiceID().get()), m_demux); + if (m_reference.path.empty()) + { // also check the tsid now before start sdt update + eDVBChannelID chid; + m_reference.getChannelID(chid); + if (eTransportStreamID((*i)->getTableIdExtension()) == chid.transport_stream_id) + { + m_dvb_scan = new eDVBScan(m_channel, true, false); + m_dvb_scan->connectEvent(slot(*this, &eDVBServicePMTHandler::SDTScanEvent), m_scan_event_connection); + } + } + } } else serviceEvent(eventNoPAT); } @@ -604,10 +616,7 @@ int eDVBServicePMTHandler::tune(eServiceReferenceDVB &ref, int use_decode_demux, m_channelEvent_connection); if (ref.path.empty()) - { - m_dvb_scan = new eDVBScan(m_channel, true, false); - m_dvb_scan->connectEvent(slot(*this, &eDVBServicePMTHandler::SDTScanEvent), m_scan_event_connection); - } + m_dvb_scan = 0; } else { if (res == eDVBResourceManager::errAllSourcesBusy) -- cgit v1.2.3 From bd9c23676ae20d70488f7a539574b2ec75886940 Mon Sep 17 00:00:00 2001 From: ghost Date: Sun, 2 Nov 2008 11:14:33 +0100 Subject: add .mp2 as supported filetype --- lib/python/Components/FileList.py | 1 + lib/python/Plugins/Extensions/MediaPlayer/plugin.py | 6 +++--- lib/service/servicemp3.cpp | 1 + 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/python/Components/FileList.py b/lib/python/Components/FileList.py index 7801c556..e028ec3a 100644 --- a/lib/python/Components/FileList.py +++ b/lib/python/Components/FileList.py @@ -10,6 +10,7 @@ from enigma import RT_HALIGN_LEFT, eListboxPythonMultiContent, \ from Tools.LoadPixmap import LoadPixmap EXTENSIONS = { + "mp2": "music", "mp3": "music", "wav": "music", "ogg": "music", diff --git a/lib/python/Plugins/Extensions/MediaPlayer/plugin.py b/lib/python/Plugins/Extensions/MediaPlayer/plugin.py index a144f2cd..841ad614 100644 --- a/lib/python/Plugins/Extensions/MediaPlayer/plugin.py +++ b/lib/python/Plugins/Extensions/MediaPlayer/plugin.py @@ -66,7 +66,7 @@ class MediaPlayer(Screen, InfoBarBase, InfoBarSeek, InfoBarAudioSelection, InfoB self.addPlaylistParser(PlaylistIOInternal, "e2pls") # 'None' is magic to start at the list of mountpoints - self.filelist = FileList(None, matchingPattern = "(?i)^.*\.(mp3|ogg|ts|wav|wave|m3u|pls|e2pls|mpg|vob|avi|mkv|mp4|dat|flac)", useServiceRef = True, additionalExtensions = "4098:m3u 4098:e2pls 4098:pls") + self.filelist = FileList(None, matchingPattern = "(?i)^.*\.(mp2|mp3|ogg|ts|wav|wave|m3u|pls|e2pls|mpg|vob|avi|mkv|mp4|dat|flac)", useServiceRef = True, additionalExtensions = "4098:m3u 4098:e2pls 4098:pls") self["filelist"] = self.filelist self.playlist = MyPlayList() @@ -727,7 +727,7 @@ class MediaPlayer(Screen, InfoBarBase, InfoBarSeek, InfoBarAudioSelection, InfoB ext = text[-4:].lower() # FIXME: the information if the service contains video (and we should hide our window) should com from the service instead - if ext not in [".mp3", ".wav", ".ogg", "flac"] and not self.isAudioCD: + if ext not in [".mp2", ".mp3", ".wav", ".ogg", "flac"] and not self.isAudioCD: self.hide() else: needsInfoUpdate = True @@ -754,7 +754,7 @@ class MediaPlayer(Screen, InfoBarBase, InfoBarSeek, InfoBarAudioSelection, InfoB currref = self.playlist.getServiceRefList()[idx] text = currref.getPath() ext = text[-4:].lower() - if ext not in [".mp3", ".wav", ".ogg", "flac"] and not self.isAudioCD: + if ext not in [".mp2", ".mp3", ".wav", ".ogg", "flac"] and not self.isAudioCD: self.hide() else: needsInfoUpdate = True diff --git a/lib/service/servicemp3.cpp b/lib/service/servicemp3.cpp index 5c982aa1..c76e346e 100644 --- a/lib/service/servicemp3.cpp +++ b/lib/service/servicemp3.cpp @@ -27,6 +27,7 @@ eServiceFactoryMP3::eServiceFactoryMP3() if (sc) { std::list extensions; + extensions.push_back("mp2"); extensions.push_back("mp3"); extensions.push_back("ogg"); extensions.push_back("mpg"); -- cgit v1.2.3 From 1a1aa77247ad62a590f7c91d4e5b9c7b45c9dd25 Mon Sep 17 00:00:00 2001 From: ghost Date: Sun, 2 Nov 2008 12:52:14 +0100 Subject: Revert "check sid and tsid before start automatic service update (STD update)" This reverts commit 21812866841eec7ab7a79ee61067581f8202df55. --- lib/dvb/pmt.cpp | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/lib/dvb/pmt.cpp b/lib/dvb/pmt.cpp index 13734e0d..6082bf4a 100644 --- a/lib/dvb/pmt.cpp +++ b/lib/dvb/pmt.cpp @@ -135,19 +135,7 @@ void eDVBServicePMTHandler::PATready(int) if (pmtpid == -1) serviceEvent(eventNoPATEntry); else - { // here we know a pat entry for this service id exist m_PMT.begin(eApp, eDVBPMTSpec(pmtpid, m_reference.getServiceID().get()), m_demux); - if (m_reference.path.empty()) - { // also check the tsid now before start sdt update - eDVBChannelID chid; - m_reference.getChannelID(chid); - if (eTransportStreamID((*i)->getTableIdExtension()) == chid.transport_stream_id) - { - m_dvb_scan = new eDVBScan(m_channel, true, false); - m_dvb_scan->connectEvent(slot(*this, &eDVBServicePMTHandler::SDTScanEvent), m_scan_event_connection); - } - } - } } else serviceEvent(eventNoPAT); } @@ -616,7 +604,10 @@ int eDVBServicePMTHandler::tune(eServiceReferenceDVB &ref, int use_decode_demux, m_channelEvent_connection); if (ref.path.empty()) - m_dvb_scan = 0; + { + m_dvb_scan = new eDVBScan(m_channel, true, false); + m_dvb_scan->connectEvent(slot(*this, &eDVBServicePMTHandler::SDTScanEvent), m_scan_event_connection); + } } else { if (res == eDVBResourceManager::errAllSourcesBusy) -- cgit v1.2.3 From c2e910d7e435dc9aefcc34e5c2eda5f7732606d8 Mon Sep 17 00:00:00 2001 From: Fraxinas Date: Mon, 3 Nov 2008 09:01:50 +0100 Subject: user correct playlist parser from dict --- lib/python/Plugins/Extensions/MediaPlayer/plugin.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/python/Plugins/Extensions/MediaPlayer/plugin.py b/lib/python/Plugins/Extensions/MediaPlayer/plugin.py index 841ad614..ed1a8874 100644 --- a/lib/python/Plugins/Extensions/MediaPlayer/plugin.py +++ b/lib/python/Plugins/Extensions/MediaPlayer/plugin.py @@ -592,12 +592,13 @@ class MediaPlayer(Screen, InfoBarBase, InfoBarSeek, InfoBarAudioSelection, InfoB def PlaylistSelected(self,path): if path is not None: self.clear_playlist() - self.playlistIOInternal = PlaylistIOInternal() - list = self.playlistIOInternal.open(path[1]) - if list: + extension = path[0].rsplit('.',1)[-1] + if self.playlistparsers.has_key(extension): + playlist = self.playlistparsers[extension]() + list = playlist.open(path[1]) for x in list: self.playlist.addFile(x.ref) - self.playlist.updateList() + self.playlist.updateList() def delete_saved_playlist(self): listpath = [] -- cgit v1.2.3 From 7f7f308008f91781d9223c3350f5ed86272096e7 Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Mon, 3 Nov 2008 13:16:58 +0100 Subject: fix decode --- lib/service/service.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/service/service.cpp b/lib/service/service.cpp index 7721fed7..f34237d2 100644 --- a/lib/service/service.cpp +++ b/lib/service/service.cpp @@ -41,8 +41,8 @@ static std::string decode(const std::string s) i += 2; if (i >= len) break; - char s[3] = {s[i - 1], s[i], 0}; - unsigned char r = strtoul(s, 0, 0x10); + char t[3] = {s[i - 1], s[i], 0}; + unsigned char r = strtoul(t, 0, 0x10); if (r) res += r; } -- cgit v1.2.3 From 6d9bdc5e7ee8990b74da7e18f0b641b39250a827 Mon Sep 17 00:00:00 2001 From: Fraxinas Date: Mon, 3 Nov 2008 13:47:04 +0100 Subject: fix streaming playback (webradio) --- lib/python/Components/Playlist.py | 2 ++ lib/service/servicemp3.cpp | 35 +++++++++++++++++++---------------- 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/lib/python/Components/Playlist.py b/lib/python/Components/Playlist.py index 22799692..744ee3af 100644 --- a/lib/python/Components/Playlist.py +++ b/lib/python/Components/Playlist.py @@ -70,6 +70,8 @@ class PlaylistIOM3U(PlaylistIO): # TODO: use e2 facilities to create a service ref from file if entry[0] == "/": self.addService(ServiceReference("4097:0:0:0:0:0:0:0:0:0:" + entry)) + elif entry.startswith("http"): + self.addService(ServiceReference("4097:0:0:0:0:0:0:0:0:0:" + entry.replace(':',"%3a"))) else: self.addService(ServiceReference("4097:0:0:0:0:0:0:0:0:0:" + os.path.dirname(filename) + "/" + entry)) file.close() diff --git a/lib/service/servicemp3.cpp b/lib/service/servicemp3.cpp index c76e346e..19b7735b 100644 --- a/lib/service/servicemp3.cpp +++ b/lib/service/servicemp3.cpp @@ -227,11 +227,29 @@ eServiceMP3::eServiceMP3(const char *filename): m_filename(filename), m_pump(eAp if (!m_gst_pipeline) m_error_message = "failed to create GStreamer pipeline!\n"; - if ( sourceinfo.containertype == ctCDA ) + if ( sourceinfo.is_streaming ) + { + eDebug("play webradio!"); + source = gst_element_factory_make ("neonhttpsrc", "http-source"); + if (source) + { + g_object_set (G_OBJECT (source), "location", filename, NULL); + g_object_set (G_OBJECT (source), "automatic-redirect", TRUE, NULL); + } + else + m_error_message = "GStreamer plugin neonhttpsrc not available!\n"; + } + else if ( sourceinfo.containertype == ctCDA ) { source = gst_element_factory_make ("cdiocddasrc", "cda-source"); if (source) + { g_object_set (G_OBJECT (source), "device", "/dev/cdroms/cdrom0", NULL); + int track = atoi(filename+18); + eDebug("play audio CD track #%i",track); + if (track > 0) + g_object_set (G_OBJECT (source), "track", track, NULL); + } else sourceinfo.containertype = ctNone; } @@ -243,21 +261,6 @@ eServiceMP3::eServiceMP3(const char *filename): m_filename(filename), m_pump(eAp else m_error_message = "GStreamer can't open filesrc " + (std::string)filename + "!\n"; } - else if ( sourceinfo.is_streaming ) - { - source = gst_element_factory_make ("neonhttpsrc", "http-source"); - if (source) - g_object_set (G_OBJECT (source), "automatic-redirect", TRUE, NULL); - else - m_error_message = "GStreamer plugin neonhttpsrc not available!\n"; - } - else - { - int track = atoi(filename+18); - eDebug("play audio CD track #%i",track); - if (track > 0) - g_object_set (G_OBJECT (source), "track", track, NULL); - } if ( sourceinfo.is_video ) { /* filesrc -> mpegdemux -> | queue_audio -> dvbaudiosink -- cgit v1.2.3 From c8ef71e5f906e3898e767e485d96611d8860c21c Mon Sep 17 00:00:00 2001 From: Andreas Oberritter Date: Mon, 3 Nov 2008 16:57:21 +0100 Subject: Don't block key '5' on keyboard. '5' should never be blocked because it is essential for many functions. Also it is unclear why both 0x35 and 0x7E codes are supposed to be generated by 'mute'. Until this is resolved, unblocking '5' is the best solution from a user's POV. --- lib/driver/rcconsole.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/driver/rcconsole.cpp b/lib/driver/rcconsole.cpp index 05fbec1d..bcce5601 100644 --- a/lib/driver/rcconsole.cpp +++ b/lib/driver/rcconsole.cpp @@ -70,7 +70,6 @@ void eRCConsoleDriver::keyPressed(int) code = -1; else switch(code) { - case 0x35: // mute case 0x7E: // mute, einfg, entf case 0x7F: // backspace code = -1; -- cgit v1.2.3 From 1b740cc86342302f44f8bc94ead6f0d8dc864e0b Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Mon, 3 Nov 2008 17:10:03 +0100 Subject: update nl,lt,tr language --- po/lt.po | 17 +- po/nl.po | 440 +++++++---- po/tr.po | 2579 ++++++++++++++++++++++++++++++++++---------------------------- 3 files changed, 1708 insertions(+), 1328 deletions(-) mode change 100755 => 100644 po/nl.po mode change 100755 => 100644 po/tr.po diff --git a/po/lt.po b/po/lt.po index c4ae7ea3..2cdc4f79 100755 --- a/po/lt.po +++ b/po/lt.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: tuxbox-enigma 0.0.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-10-28 11:20+0100\n" +"POT-Creation-Date: 2008-11-03 17:09+0100\n" "PO-Revision-Date: 2008-10-23 21:12+0200\n" "Last-Translator: Audronis, Grincevicius \n" "Language-Team: Adga / enigma2 (c) \n" @@ -517,6 +517,9 @@ msgstr "Šviesumas" msgid "Burn DVD" msgstr "Išdeginti DVD" +msgid "Burn existing image to DVD" +msgstr "" + msgid "Burn to DVD..." msgstr "Išdeginti į DVD..." @@ -730,6 +733,9 @@ msgstr "Negalima prisijungti prie Dreambox .NFI atvaizdo perdavimo serverio:" msgid "Could not load Medium! No disc inserted?" msgstr "Negalima užkrauti! Joks diskas neįdėtas?" +msgid "Create DVD-ISO" +msgstr "" + msgid "Create movie folder failed" msgstr "Fimų aplanko sukurti nepavyko" @@ -1350,6 +1356,12 @@ msgstr "Vengrų" msgid "IP Address" msgstr "IP adresas" +msgid "ISO file is too large for this filesystem!" +msgstr "" + +msgid "ISO path" +msgstr "" + msgid "Icelandic" msgstr "Islandų" @@ -2877,6 +2889,9 @@ msgstr "Sistema" msgid "TRANSLATOR_INFO" msgstr "Audronis Grincevičius (ADGA) Pasvalys, Lietuva" +msgid "TS file is too large for ISO9660 level 1!" +msgstr "" + msgid "TV System" msgstr "TV sistema" diff --git a/po/nl.po b/po/nl.po old mode 100755 new mode 100644 index e899ee85..e63e24b5 --- a/po/nl.po +++ b/po/nl.po @@ -1,14 +1,14 @@ -# Copyright (C) 2005 THE tuxbox-enigma'S COPYRIGHT HOLDER -# This file is distributed under the same license as the tuxbox-enigma package. -# Automatically generated, 2005. -# +# Copyright (C) 2005 THE tuxbox-enigma'S COPYRIGHT HOLDER +# This file is distributed under the same license as the tuxbox-enigma package. +# Automatically generated, 2005. +# msgid "" msgstr "" "Project-Id-Version: tuxbox-enigma 0.0.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-10-23 17:06+0200\n" -"PO-Revision-Date: 2008-09-02 19:32+0100\n" -"Last-Translator: Michel Weeren \n" +"POT-Creation-Date: 2008-11-03 17:09+0100\n" +"PO-Revision-Date: 2008-10-26 01:38+0100\n" +"Last-Translator: FeReNGi\n" "Language-Team: none \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,7 +19,7 @@ msgstr "" "X-Poedit-SourceCharset: iso-8859-15\n" msgid " " -msgstr "" +msgstr " " msgid "#000000" msgstr "#000000" @@ -56,7 +56,7 @@ msgstr "%H:%M" #, python-format msgid "%d jobs are running in the background!" -msgstr "" +msgstr "%d opdrachten draaien op de achtergrond!" #, python-format msgid "%d min" @@ -64,7 +64,7 @@ msgstr "%d min" #, python-format msgid "%d services found!" -msgstr "%d zenders gevonden" +msgstr "%d zenders gevonden!" msgid "%d.%B %Y" msgstr "%d-%m-%Y" @@ -91,14 +91,16 @@ msgid "(show optional DVD audio menu)" msgstr "(optioneel DVD audio menu weergeven)" msgid ".NFI Download failed:" -msgstr "" +msgstr ".NFI Download mislukt:" msgid ".NFI Flasher bootable USB stick successfully created." -msgstr "" +msgstr ".NFI Flasher opstart USB stick succesvol aangemaakt." msgid "" ".NFI file passed md5sum signature check. You can safely flash this image!" msgstr "" +".NFI bestand heeft sucesvol de md5 controle doorlopen. U kan veilig dit " +"image schrijven!" msgid "/usr/share/enigma2 directory" msgstr "/usr/share/enigma2 map" @@ -380,7 +382,7 @@ msgid "All" msgstr "Alles" msgid "All Satellites" -msgstr "" +msgstr "Alle Satellieten" msgid "All..." msgstr "Alles..." @@ -398,7 +400,7 @@ msgid "An empty filename is illegal." msgstr "Een lege bestandsnaam is ongeldig" msgid "An unknown error occured!" -msgstr "" +msgstr "Een onbekende fout is gebeurd!" msgid "Arabic" msgstr "Arabisch" @@ -429,13 +431,13 @@ msgid "Audio Options..." msgstr "Audio Opties..." msgid "Authoring mode" -msgstr "" +msgstr "Creatie wijze" msgid "Auto" msgstr "Auto" msgid "Auto chapter split every ? minutes (0=never)" -msgstr "" +msgstr "Automatisch hoofdstuk splitsen elke ? min (0=nooit)" msgid "Auto scart switching" msgstr "Automatisch scart schakelen" @@ -444,13 +446,13 @@ msgid "Automatic" msgstr "Automatisch" msgid "Automatic SSID lookup" -msgstr "" +msgstr "Automatisch SSID zoeken" msgid "Automatic Scan" msgstr "Automatisch zoeken" msgid "Available format variables" -msgstr "" +msgstr "Beschikbare formaten" msgid "B" msgstr "B" @@ -471,7 +473,7 @@ msgid "Back" msgstr "Terug" msgid "Background" -msgstr "" +msgstr "Achtergrond" msgid "Backup" msgstr "Backup" @@ -513,14 +515,17 @@ msgid "Bookmarks" msgstr "Markeerpunten" msgid "Brightness" -msgstr "helderheid" +msgstr "Helderheid" msgid "Burn DVD" msgstr "Beschrijf DVD" -msgid "Burn to DVD..." +msgid "Burn existing image to DVD" msgstr "" +msgid "Burn to DVD..." +msgstr "Schrijf op DVD..." + msgid "Bus: " msgstr "Bus: " @@ -556,7 +561,7 @@ msgid "Cancel" msgstr "Annuleren" msgid "Cannot parse feed directory" -msgstr "" +msgstr "Kan feed map niet doorgeven" msgid "Capacity: " msgstr "Capaciteit: " @@ -571,7 +576,7 @@ msgid "Change bouquets in quickzap" msgstr "Verander van boeket tijdens zappen" msgid "Change dir." -msgstr "" +msgstr "Wijzig map." msgid "Change pin code" msgstr "Verander pincode" @@ -652,10 +657,10 @@ msgid "Coderate LP" msgstr "Coderate LP" msgid "Collection name" -msgstr "" +msgstr "DVD naam" msgid "Collection settings" -msgstr "" +msgstr "Verzamel instellingen" msgid "Color Format" msgstr "Beeldinstelling" @@ -713,10 +718,10 @@ msgid "Constellation" msgstr "Constellatie" msgid "Content does not fit on DVD!" -msgstr "" +msgstr "De inhoud pas niet op deze DVD!" msgid "Continue in background" -msgstr "" +msgstr "Verder in de achtergrond" msgid "Continue playing" msgstr "Afspelen voortzetten" @@ -725,12 +730,15 @@ msgid "Contrast" msgstr "Contrast" msgid "Copying USB flasher boot image to stick..." -msgstr "" +msgstr "Kopieer USB flasher opstart bestand naar stick..." msgid "Could not connect to Dreambox .NFI Image Feed Server:" -msgstr "" +msgstr "Kan niet connecteren naar Dreambox .NFI Feed Server:" msgid "Could not load Medium! No disc inserted?" +msgstr "Kan medium niet laden! Geen disk in speler?" + +msgid "Create DVD-ISO" msgstr "" msgid "Create movie folder failed" @@ -759,7 +767,7 @@ msgid "Custom skip time for '1'/'3'-keys" msgstr "Aangepaste spoeltijd voor de '1'/'3'-toetsen" msgid "Custom skip time for '4'/'6'-keys" -msgstr "Aangepaste spoeltijd voor de '4'/6'-toetsen" +msgstr "Aangepaste spoeltijd voor de '4'/'6'-toetsen" msgid "Custom skip time for '7'/'9'-keys" msgstr "Aangepaste spoeltijd voor de '7'/'9'-toetsen" @@ -792,7 +800,7 @@ msgid "DVD Player" msgstr "DVD speler" msgid "DVD media toolbox" -msgstr "" +msgstr "DVD medium hulpmiddel" msgid "Danish" msgstr "Deens" @@ -801,7 +809,7 @@ msgid "Date" msgstr "Datum" msgid "Decompressing USB stick flasher boot image..." -msgstr "" +msgstr "Uitpakken flasher opstart bestand van USB stick..." msgid "Deep Standby" msgstr "Uitschakelen" @@ -836,7 +844,7 @@ msgid "Description" msgstr "Omschrijving" msgid "Destination directory" -msgstr "" +msgstr "Doel map" msgid "Detected HDD:" msgstr "Gedetecteerde harde schijf:" @@ -863,7 +871,7 @@ msgid "DiSEqC repeats" msgstr "DiSEqC herhaling" msgid "Direct playback of linked titles without menu" -msgstr "" +msgstr "Direct afspelen van titels zonder menu" #, python-format msgid "Directory %s nonexistent." @@ -911,6 +919,8 @@ msgid "" "Do you really want to REMOVE\n" "the plugin \"%s\"?" msgstr "" +"Wilt u echt deze applicatie\n" +"\"%s\" verwijderen?" msgid "" "Do you really want to check the filesystem?\n" @@ -928,6 +938,8 @@ msgid "" "Do you really want to download\n" "the plugin \"%s\"?" msgstr "" +"Wilt u echt deze applicatie\n" +"\"%s\" downloaden?" msgid "Do you really want to exit?" msgstr "Wilt u echt afsluiten?" @@ -955,7 +967,7 @@ msgstr "" "Druk op OK en een ogenblik geduld!" msgid "Do you want to burn this collection to DVD medium?" -msgstr "" +msgstr "Wilt u deze verzameling op een DVD medium schrijven?" msgid "Do you want to do a service scan?" msgstr "Wilt u nu zenders zoeken?" @@ -973,7 +985,7 @@ msgid "Do you want to play DVD in drive?" msgstr "Wilt u de DVD in de speler afspelen?" msgid "Do you want to preview this DVD before burning?" -msgstr "" +msgstr "Wilt u de DVD bekijken alvorens te schrijven?" msgid "Do you want to restore your settings?" msgstr "Wilt u uw instelingen nu terugzetten?" @@ -1003,16 +1015,16 @@ msgid "Done - Installed or upgraded %d packages with %d errors" msgstr "Klaar - %d paket(ten) geïnstalleerd of vervangen. %d fout(en)" msgid "Download" -msgstr "" +msgstr "Downloaden" msgid "Download .NFI-Files for USB-Flasher" -msgstr "" +msgstr "Download .NFI-Bestanden naar USB-Flasher" msgid "Download Plugins" msgstr "Downloaden" msgid "Download of USB flasher boot image failed: " -msgstr "" +msgstr "Downloaden van USB flasher opstart bestand mislukt: " msgid "Downloadable new plugins" msgstr "Beschikbare nieuwe applicaties" @@ -1024,13 +1036,13 @@ msgid "Downloading" msgstr "Downloading" msgid "Downloading image description..." -msgstr "" +msgstr "Downloaden beschrijving..." msgid "Downloading plugin information. Please wait..." msgstr "Ophalen informatie. Een ogenblik a.u.b..." msgid "Dreambox format data DVD (HDTV compatible)" -msgstr "" +msgstr "Dreambox formaat data DVD (HDTV compatibel)" msgid "Dutch" msgstr "Nederlands" @@ -1052,7 +1064,7 @@ msgid "Edit DNS" msgstr "DNS wijzigen" msgid "Edit chapters of current title" -msgstr "" +msgstr "Wijzig hoofdstuk van de huidige titel" msgid "Edit services list" msgstr "Wijzig zenderlijst" @@ -1147,7 +1159,7 @@ msgid "Error" msgstr "Fout" msgid "Error executing plugin" -msgstr "" +msgstr "Fout bij uitvoeren applicatie" #, python-format msgid "" @@ -1185,7 +1197,7 @@ msgid "Expert" msgstr "Expert" msgid "Extended Networksetup Plugin..." -msgstr "" +msgstr "Uitgebreide Netwerk instellingen..." msgid "Extended Setup..." msgstr "Uitgebreide instellingen..." @@ -1227,32 +1239,32 @@ msgid "Finetune" msgstr "Fijn afst." msgid "Finished" -msgstr "Voltooit" +msgstr "Voltooid" msgid "Finnish" msgstr "Fins" msgid "" "First we need to download the latest boot environment for the USB flasher." -msgstr "" +msgstr "Eerst dienen we de opstart omgeving voor de USB flasher te downloaden." msgid "Fix USB stick" -msgstr "" +msgstr "Herstel USB stick" msgid "Flash" -msgstr "" +msgstr "Flash" msgid "Flashing failed" -msgstr "" +msgstr "Flashen mislukt" msgid "Font size" -msgstr "" +msgstr "Font formaat" msgid "Format" -msgstr "" +msgstr "Formaat" msgid "Frame repeat count during non-smooth winding" -msgstr "beeldherhalingsfrequentie tijdens 'ruw' spoelen" +msgstr "Beeldherhalingsfrequentie tijdens 'ruw' spoelen" msgid "French" msgstr "Frans" @@ -1349,6 +1361,12 @@ msgstr "Hongaars" msgid "IP Address" msgstr "IP Adres" +msgid "ISO file is too large for this filesystem!" +msgstr "" + +msgid "ISO path" +msgstr "" + msgid "Icelandic" msgstr "Ijslands" @@ -1385,7 +1403,7 @@ msgstr "" "Indien het resultaat nu goed is, druk dan op OK." msgid "Image flash utility" -msgstr "" +msgstr "Image flash utility" msgid "Image-Upgrade" msgstr "Image vernieuwen" @@ -1542,7 +1560,7 @@ msgid "Link:" msgstr "Link:" msgid "Linked titles with a DVD menu" -msgstr "" +msgstr "Verbind titels met een DVD menu" msgid "List of Storage Devices" msgstr "Lijst van opslagmedia" @@ -1551,10 +1569,10 @@ msgid "Lithuanian" msgstr "Litouws" msgid "Load" -msgstr "" +msgstr "Laden" msgid "Load Length of Movies in Movielist" -msgstr "" +msgstr "Laad lengte van opnames in opname menu" msgid "Local Network" msgstr "Lokaal netwerk" @@ -1611,10 +1629,10 @@ msgid "MediaPlayer" msgstr "Mediaspeler" msgid "Medium is not a writeable DVD!" -msgstr "" +msgstr "Dit medium is geen beschrijfbare DVD!" msgid "Medium is not empty!" -msgstr "" +msgstr "Medium is niet leeg!" msgid "Menu" msgstr "Menu" @@ -1680,7 +1698,7 @@ msgid "NEXT" msgstr "VOLGENDE" msgid "NFI image flashing completed. Press Yellow to Reboot!" -msgstr "" +msgstr "NFI image schrijven is gereed. Druk op Gele toets om te herstarten!" msgid "NOW" msgstr "NU" @@ -1708,7 +1726,7 @@ msgid "Netmask" msgstr "Netmask" msgid "Network Configuration..." -msgstr "Netwerk configuratie" +msgstr "Netwerk Configuratie..." msgid "Network Mount" msgstr "Netwerk mount" @@ -1756,15 +1774,13 @@ msgid "No" msgstr "Nee" msgid "No (supported) DVDROM found!" -msgstr "" +msgstr "Geen (gesupporteerde) DVDROM gevonden!" msgid "No 50 Hz, sorry. :(" msgstr "Geen 50Hz, sorry! :(" msgid "No HDD found or HDD not initialized!" -msgstr "" -"Geen harde schijf gevonden of\n" -"De harde schijf is niet geformatteerd." +msgstr "Geen harde schijf gevonden of de harde schijf is niet geformatteerd." msgid "No backup needed" msgstr "Backup niet benodigd" @@ -1777,7 +1793,7 @@ msgstr "" "(Timeout reading PAT)" msgid "No details for this image file" -msgstr "" +msgstr "Geen gedetailleerde gegevens voor dit bestand" msgid "No event info found, recording indefinitely." msgstr "Geen EPG gegevens gevonden. Opname voor onbepaalde tijd." @@ -1811,7 +1827,7 @@ msgstr "" "Controleer uw tunerinstellingen alvorens zenders te zoeken." msgid "No useable USB stick found" -msgstr "" +msgstr "Geen bruikbare USB stick gevonden" msgid "" "No valid service PIN found!\n" @@ -1845,6 +1861,9 @@ msgid "" " Please verify that you have attached a compatible WLAN device or enable " "your local network interface." msgstr "" +"Geen werkende WiFi gevonden.\n" +"Controleer of u een geschikte WiFi adapter geplaatst heeft of activeer de " +"netwerk instellingen." msgid "" "No working wireless networkadapter found.\n" @@ -1903,6 +1922,8 @@ msgid "" "format and use as .NFI image flasher. Press OK after you've put the stick " "back in." msgstr "" +"Plaats nu de USB stick (min grootte 64 MB) dat u wenst te formatteren en te " +"gebruiken als .NFI image flasher. Druk op OK na het plaatsen van de stick." msgid "" "Now, use the contrast setting to turn up the brightness of the background as " @@ -1921,10 +1942,10 @@ msgid "OK, guide me through the upgrade process" msgstr "OK, mij tijdens de software update begeleiden" msgid "OSD Settings" -msgstr "OSD instellingen" +msgstr "OSD Instellingen" msgid "OSD visibility" -msgstr "" +msgstr "OSD tranparantie" msgid "Off" msgstr "Uit" @@ -1982,7 +2003,7 @@ msgid "Parental control type" msgstr "Kinderslot type" msgid "Partitioning USB stick..." -msgstr "" +msgstr "Bezig partitie te maken op USB stick..." msgid "Pause movie at end" msgstr "Pauzeer afspelen aan het einde" @@ -2004,7 +2025,7 @@ msgid "Play" msgstr "Afspelen" msgid "Play Audio-CD..." -msgstr "" +msgstr "Speel Muziek-CD" msgid "Play recorded movies..." msgstr "Opname afspelen..." @@ -2019,10 +2040,10 @@ msgid "Please change recording endtime" msgstr "Wijzig de opname eindtijd a.u.b." msgid "Please check your network settings!" -msgstr "" +msgstr "Controleer uw netwerk instellingen a.u.b.!" msgid "Please choose .NFI image file from feed server to download" -msgstr "" +msgstr "Kies .NFI image bestand van feed server om te downloaden" msgid "Please choose an extension..." msgstr "Kies een applicatie a.u.b..." @@ -2076,7 +2097,7 @@ msgid "Please press OK!" msgstr "Druk op OK a.u.b!" msgid "Please select .NFI flash image file from medium" -msgstr "" +msgstr "Selecteer.NFI flash image bestand van medium" msgid "Please select a playlist to delete..." msgstr "Selecteer de afspeellijst die u wilt verwijderen" @@ -2094,7 +2115,7 @@ msgid "Please select keyword to filter..." msgstr "Selecteer te filteren sleutelwoord..." msgid "Please select target directory or medium" -msgstr "" +msgstr "Selecteer doel map of medium" msgid "Please select the movie path..." msgstr "Selecteer het opname pad..." @@ -2125,16 +2146,16 @@ msgstr "" "daarna op OK." msgid "Please wait for md5 signature verification..." -msgstr "" +msgstr "Wacht op md5 controle verificatie..." msgid "Please wait... Loading list..." msgstr "Ogenblik a.u.b. De lijst wordt geladen..." msgid "Plugin browser" -msgstr "Spelletjes & Applicaties" +msgstr "Applicatie browser" msgid "Plugins" -msgstr "Spelletjes en applicaties" +msgstr "Applicaties" msgid "Polarity" msgstr "Polariteit" @@ -2191,7 +2212,7 @@ msgid "Press OK to activate the settings." msgstr "Druk op OK om op te slaan" msgid "Press OK to edit the settings." -msgstr "Druk op OK om de instellingen te wijzigen." +msgstr "Druk op OK om te wijzigen." msgid "Press OK to scan" msgstr "Druk OK om te zoeken." @@ -2203,7 +2224,7 @@ msgid "Prev" msgstr "Vorige" msgid "Preview menu" -msgstr "" +msgstr "Voorbeeld menu" msgid "Primary DNS" msgstr "Primaire DNS" @@ -2257,16 +2278,16 @@ msgid "Really exit the subservices quickzap?" msgstr "Subzenders snelzap verlaten?" msgid "Really reboot now?" -msgstr "" +msgstr "Nu herstarten?" msgid "Really restart now?" -msgstr "" +msgstr "Nu herstarten?" msgid "Really shutdown now?" -msgstr "" +msgstr "Nu uitschakelen?" msgid "Reboot" -msgstr "" +msgstr "Herstarten" msgid "Reception Settings" msgstr "Ontvangstinstellingen" @@ -2281,7 +2302,7 @@ msgid "Recording" msgstr "Opnemen" msgid "Recording(s) are in progress or coming up in few seconds!" -msgstr "" +msgstr "Een opname is bezig of zal elk moment aanvangen in een paar seconden!" msgid "Recordings always have priority" msgstr "Een opname heeft te allen tijde voorang" @@ -2296,7 +2317,7 @@ msgid "Refresh rate selection." msgstr "Herhalingsfrequentie selectie" msgid "Remounting stick partition..." -msgstr "" +msgstr "Herladen USB stick partitie..." msgid "Remove Bookmark" msgstr "Markeerpunt verwijderen" @@ -2314,10 +2335,10 @@ msgid "Remove plugins" msgstr "Verwijderen" msgid "Remove the broken .NFI file?" -msgstr "" +msgstr "Verwijder het defecte .NFI bestand?" msgid "Remove the incomplete .NFI file?" -msgstr "" +msgstr "Verwijder het onvolledige .NFI bestand?" msgid "Remove title" msgstr "Titel verwijderen" @@ -2482,7 +2503,7 @@ msgid "Scan SR6900" msgstr "Zoek SR6900" msgid "Scan Wireless Networks" -msgstr "Naar WiFi netwerken zoeken" +msgstr "WiFi netwerken zoeken" msgid "Scan additional SR" msgstr "Zoek ook op SR" @@ -2569,7 +2590,7 @@ msgid "Select channel to record from" msgstr "Selecteer een zender voor opname" msgid "Select image" -msgstr "" +msgstr "Selecteer bestand" msgid "Select refresh rate" msgstr "Selecteer herhalingsfrequentie" @@ -2581,10 +2602,10 @@ msgid "Select video mode" msgstr "Selecteer video modus" msgid "Selected source image" -msgstr "" +msgstr "Selecteer bron bestand" msgid "Seperate titles with a main menu" -msgstr "" +msgstr "Zonder titels af met een hoofdmenu" msgid "Sequence repeat" msgstr "Herhaal sequence" @@ -2710,7 +2731,7 @@ msgid "Singlestep (GOP)" msgstr "Stap voor stap" msgid "Skin..." -msgstr "" +msgstr "Skin..." msgid "Sleep Timer" msgstr "Slaaptimer" @@ -2871,11 +2892,14 @@ msgstr "" "Officieel distributeur van\n" "Dream Multimedia producten" +msgid "TS file is too large for ISO9660 level 1!" +msgstr "" + msgid "TV System" msgstr "TV Systeem" msgid "Table of content for collection" -msgstr "" +msgstr "Inhoudslijst voor verzameling" msgid "Terrestrial" msgstr "Terrestrisch" @@ -2896,8 +2920,8 @@ msgid "" "Thank you for using the wizard. Your box is now ready to use.\n" "Please press OK to start using your Dreambox." msgstr "" -"De wizard is gereed. U kunt uw Dreambox nu gebruiken.\n" -"Druk OK om de installatiewizard te verlaten." +"Bedankt voor het gebruik van deze wizard. Uw box is klaar voor gebruik.\n" +"Druk op OK om uw Dreambox te gebruiken." msgid "" "The .NFI Image flasher USB stick is now ready to use. Please download an ." @@ -2905,12 +2929,18 @@ msgid "" "and hold the 'Down' key on the front panel to boot the .NFI flasher from the " "stick!" msgstr "" +"De .NFI Image flasher USB stick is klaar voor gebruik. Download eerst een ." +"NFI image bestand van de feed server en bewaar het op de stick. Herstart en " +"druk op de 'Down' toets op het front paneel om te starten van de .NFI " +"flasher stick!" msgid "" "The DVD standard doesn't support H.264 (HDTV) video streams. Do you want to " "create a Dreambox format data DVD (which will not play in stand-alone DVD " "players) instead?" msgstr "" +"De DVD standaard supporteerd geen H.264 (HDTV) video. Wil je een Dreambox " +"formaat data DVD maken (deze speelt niet af in een DVD speler) ?" msgid "The backup failed. Please choose a different backup location." msgstr "Backup is mislukt. Kies een andere backup locatie a.u.b." @@ -2923,6 +2953,11 @@ msgid "" "\n" "Do you want to write the USB flasher to this stick?" msgstr "" +"Het volgende apparaat is gevonden:\n" +"\n" +"%s\n" +"\n" +"Wenst u de USB flasher op deze stick te schrijven?" msgid "" "The input port should be configured now.\n" @@ -2948,11 +2983,15 @@ msgid "" "you want to burn this image to flash memory? You are doing this at your own " "risk!" msgstr "" +"De md5 validatie is mislukt, het bestand is waarschijnlijk beschadigd! Bent " +"u zeker dat u dit image wil schrijven naar het flash geheugen? Dit is op uw " +"eigen risico!" msgid "" "The md5sum validation failed, the file may be downloaded incompletely or be " "corrupted!" msgstr "" +"De md5 validatie is mislukt, het bestand is niet compleet of beschadigd!" msgid "The package doesn't contain anything." msgstr "Dit pakket bevat geen data." @@ -3003,31 +3042,37 @@ msgid "" "There might not be enough Space on the selected Partition.\n" "Do you really want to continue?" msgstr "" -"Er is mogelijk niet genoeg ruimte vrij op de geselecteerde partitie\n" +"Er is mogelijk niet genoeg ruimte vrij op de geselecteerde partitie.\n" "Weet u zeker dat u wilt doorgaan?" #, python-format msgid "This .NFI file does not contain a valid %s image!" -msgstr "" +msgstr "Dit .NFI bestand bevat geen geldig %s image!" msgid "" "This .NFI file does not have a md5sum signature and is not guaranteed to " "work. Do you really want to burn this image to flash memory?" msgstr "" +"Dit .NFI bestand bevat geen geldige md5 signatuur en is niet gegarandeerd om " +"te werken. Wilt u echt dit image schrijven in het flash geheugen?" msgid "" "This .NFI file has a valid md5 signature. Continue programming this image to " "flash memory?" msgstr "" +"Dit .NFI bestand heeft een geldige md5 signatuur. Wilt u dit image schrijven " +"in het flash geheugen?" msgid "" "This DVD RW medium is already formatted - reformatting will erase all " "content on the disc." msgstr "" +"Deze DVD RW medium is reeds geformatteerd - herformatteren zal alles wissen " +"op deze disk." #, python-format msgid "This Dreambox can't decode %s video streams!" -msgstr "" +msgstr "Deze Dreambox kan volgende %s video niet decoderen" msgid "This is step number 2." msgstr "Dit is stap nummer 2." @@ -3133,6 +3178,8 @@ msgid "" "Timer overlap in timers.xml detected!\n" "Please recheck it!" msgstr "" +"Timer overlappen in timers.xml gedetecteerd!\n" +"A.u.b. herbekjk het!" msgid "Timer sanity error" msgstr "Timerlogica fout" @@ -3162,6 +3209,8 @@ msgid "" "To make sure you intend to do this, please remove the target USB stick now " "and stick it back in upon prompt. Press OK when you have taken the stick out." msgstr "" +"Om er zeker van te zijn, verwijder nu de doel USB stick en plaats terug " +"wanneer gevraagd. Druk op OK wanneer de stick is verwijderd." msgid "Today" msgstr "Vandaag" @@ -3176,7 +3225,7 @@ msgid "Toneburst A/B" msgstr "Toneburst A/B" msgid "Track" -msgstr "" +msgstr "Spoor" msgid "Translation" msgstr "Vertaling" @@ -3278,7 +3327,7 @@ msgid "Unmount failed" msgstr "Unmount mislukt" msgid "Update" -msgstr "" +msgstr "Update" msgid "Updates your receiver's software" msgstr "Dreambox software vernieuwen" @@ -3365,10 +3414,10 @@ msgid "VCR scart" msgstr "VCR scart" msgid "VMGM (intro trailer)" -msgstr "" +msgstr "VMGM (intro trailer)" msgid "Video Fine-Tuning" -msgstr "Video fijn instellingen" +msgstr "Video fijn instellingen..." msgid "Video Fine-Tuning Wizard" msgstr "Video fijn instellingen wizard" @@ -3429,7 +3478,7 @@ msgid "Waiting" msgstr "Wacht..." msgid "Waiting for USB stick to settle..." -msgstr "" +msgstr "Wachten op USB stick..." msgid "" "We will now test if your TV can also display this resolution at 50hz. If " @@ -3458,6 +3507,12 @@ msgid "" "\n" "Then seek to the end, press OK, select 'end cut'. That's it." msgstr "" +"Wekom bij de Cutlist editor.\n" +"\n" +"Start met zoeken wat je wenst te verwijderen. Druk op OK, selecteer 'start " +"cut'.\n" +"\n" +"Ga naar het einde, druk op OK, selecteer 'end cut'. Eenvoudiger kan niet." msgid "" "Welcome to the Image upgrade wizard. The wizard will assist you in upgrading " @@ -3501,13 +3556,13 @@ msgid "Write error while recording. Disk full?\n" msgstr "Schrijffout tijdens opname. Harde schijf vol?\n" msgid "Write failed!" -msgstr "" +msgstr "Schrijven mislukt!" msgid "Writing NFI image file to flash completed" -msgstr "" +msgstr "Schrijven NFI image naar flash is voltooid" msgid "Writing image file to NAND Flash" -msgstr "" +msgstr "Bezig NAND FLash aan het schrijven" msgid "YPbPr" msgstr "Component" @@ -3518,6 +3573,9 @@ msgstr "Jaar:" msgid "Yes" msgstr "Ja" +msgid "Yes, and delete this movie" +msgstr "" + msgid "Yes, backup my settings!" msgstr "Ja, mijn instellingen opslaan!" @@ -3608,6 +3666,8 @@ msgid "" "You have chosen to create a new .NFI flasher bootable USB stick. This will " "repartition the USB stick and therefore all data on it will be erased." msgstr "" +"U heeft gekozen om een nieuwe .NFI flasher opstart USB stick aan te maken. " +"Alle data op de USB stick gaat onherroepelijk verloren." #, python-format msgid "You have to wait %s!" @@ -3693,7 +3753,7 @@ msgid "[move mode]" msgstr "[verplaats modus]" msgid "abort alternatives edit" -msgstr "alternatieven bewerken afsluiten" +msgstr "Alternatieven bewerken afsluiten" msgid "abort bouquet edit" msgstr "Boeket bewerken afsluiten" @@ -3705,25 +3765,25 @@ msgid "about to start" msgstr "start direct" msgid "add alternatives" -msgstr "alternatieven toevoegen" +msgstr "Alternatieven toevoegen" msgid "add bookmark" msgstr "Markeerpunt toevoegen" msgid "add bouquet" -msgstr "boeket toevoegen" +msgstr "Boeket toevoegen" msgid "add directory to playlist" msgstr "Map aan afspeellijst toevoegen" msgid "add file to playlist" -msgstr "voeg bestand toe aan afspeellijst" +msgstr "Voeg bestand toe aan afspeellijst" msgid "add files to playlist" -msgstr "bestanden aan de afspeellijst toevoegen" +msgstr "Bestanden aan de afspeellijst toevoegen" msgid "add marker" -msgstr "markeerpunt invoegen" +msgstr "Markeerpunt invoegen" msgid "add recording (enter recording duration)" msgstr "Start opname en voer opnameduur in" @@ -3738,13 +3798,13 @@ msgid "add recording (stop after current event)" msgstr "Start opname en stop na huidige uitzending" msgid "add service to bouquet" -msgstr "zender toevoegen aan boeket" +msgstr "Zender toevoegen aan boeket" msgid "add service to favourites" -msgstr "zender toevoegen aan favorieten" +msgstr "Zender toevoegen aan favorieten" msgid "add to parental protection" -msgstr "zender op kinderslot zetten" +msgstr "Zender op kinderslot zetten" msgid "advanced" msgstr "geavanceerd" @@ -3760,13 +3820,13 @@ msgstr "" "wilt zetten:\n" msgid "audio tracks" -msgstr "" +msgstr "audio sporen" msgid "back" -msgstr "terug" +msgstr "Terug" msgid "background image" -msgstr "" +msgstr "achtergrond bestand" msgid "better" msgstr "beter" @@ -3784,10 +3844,10 @@ msgid "change recording (endtime)" msgstr "Wijzig opname eindtijd" msgid "chapters" -msgstr "" +msgstr "hoofdstukken" msgid "choose destination directory" -msgstr "" +msgstr "kies doel map" msgid "circular left" msgstr "circular links" @@ -3799,7 +3859,7 @@ msgid "clear playlist" msgstr "afspeellijst legen" msgid "color" -msgstr "" +msgstr "kleur" msgid "complex" msgstr "complex" @@ -3826,7 +3886,7 @@ msgid "daily" msgstr "dagelijks" msgid "day" -msgstr "" +msgstr "dag" msgid "delete" msgstr "wissen" @@ -3847,7 +3907,7 @@ msgid "disable" msgstr "deactiveren" msgid "disable move mode" -msgstr "verplaats modus deactiveren" +msgstr "Verplaats modus deactiveren" msgid "disabled" msgstr "gedeactiveerd" @@ -3868,7 +3928,7 @@ msgid "done!" msgstr "gereed!" msgid "edit alternatives" -msgstr "alternatieven bewerken" +msgstr "Alternatieven bewerken" msgid "empty" msgstr "leeg" @@ -3877,22 +3937,22 @@ msgid "enable" msgstr "activeren" msgid "enable bouquet edit" -msgstr "boeket bewerken activeren" +msgstr "Boeket bewerken activeren" msgid "enable favourite edit" msgstr "favorieten bewerken activeren" msgid "enable move mode" -msgstr "verplaatsmodus activeren" +msgstr "Verplaatsmodus activeren" msgid "enabled" msgstr "geactiveerd" msgid "end alternatives edit" -msgstr "alternatieven bewerken deactiveren" +msgstr "Alternatieven bewerken deactiveren" msgid "end bouquet edit" -msgstr "boeket bewerken deactiveren" +msgstr "Boeket bewerken deactiveren" msgid "end cut here" msgstr "stop snijpunt hier" @@ -3904,7 +3964,7 @@ msgid "equal to" msgstr "gelijk aan" msgid "exceeds dual layer medium!" -msgstr "" +msgstr "overschrijdt dubbel lagen medium!" msgid "exit DVD player or return to file browser" msgstr "DVD speler afsluiten of terug naar bestandslijst" @@ -3916,22 +3976,22 @@ msgid "exit movielist" msgstr "Opname menu afsluiten" msgid "failed" -msgstr "" +msgstr "mislukt" msgid "filename" -msgstr "" +msgstr "bestandnaam" msgid "fine-tune your display" msgstr "Uw scherm fijn-afstellen" msgid "font face" -msgstr "" +msgstr "font layout" msgid "forward to the next chapter" msgstr "Vooruit naar volgend hoofdstuk" msgid "free" -msgstr "" +msgstr "vrij" msgid "free diskspace" msgstr "ruimte vrij..." @@ -3943,7 +4003,7 @@ msgid "go to standby" msgstr "standby-stand" msgid "headline" -msgstr "" +msgstr "kop" msgid "hear radio..." msgstr "Luister naar radio..." @@ -3958,7 +4018,7 @@ msgid "hide player" msgstr "Afspelen op de achtergrond" msgid "highlighted button" -msgstr "" +msgstr "gemarkeerde kop" msgid "horizontal" msgstr "horizontaal" @@ -4011,7 +4071,7 @@ msgid "left" msgstr "links" msgid "length" -msgstr "" +msgstr "lengte" msgid "list style compact" msgstr "Weergave: Compact" @@ -4041,7 +4101,7 @@ msgid "menu" msgstr "menu" msgid "menulist" -msgstr "" +msgstr "menulijst" msgid "mins" msgstr "min" @@ -4053,7 +4113,7 @@ msgid "minutes" msgstr "minuten" msgid "month" -msgstr "" +msgstr "maand" msgid "move PiP to main picture" msgstr "PiP naar hoofdbeeld" @@ -4101,10 +4161,10 @@ msgid "nothing connected" msgstr "niets aangesloten" msgid "of a DUAL layer medium used." -msgstr "" +msgstr "op een DUBBEL laag medium gebruikt." msgid "of a SINGLE layer medium used." -msgstr "" +msgstr "op een ENKEL laag medium gebruikt." msgid "off" msgstr "uit" @@ -4113,7 +4173,7 @@ msgid "on" msgstr "aan" msgid "on READ ONLY medium." -msgstr "" +msgstr "op ALLEEN LEZEN medium." msgid "once" msgstr "éénmalig" @@ -4158,7 +4218,7 @@ msgid "previous channel in history" msgstr "Vorige zender in geschiedenis" msgid "rebooting..." -msgstr "" +msgstr "herstarten..." msgid "record" msgstr "opname" @@ -4170,7 +4230,7 @@ msgid "remove after this position" msgstr "verwijder achter deze positie" msgid "remove all alternatives" -msgstr "verwijder alle alternatieven" +msgstr "Verwijder alle alternatieven" msgid "remove all new found flags" msgstr "verwijder alle 'nieuw gevonden' vlaggetjes" @@ -4185,10 +4245,10 @@ msgid "remove directory" msgstr "Map verwijderen" msgid "remove entry" -msgstr "invoer verwijderen" +msgstr "Invoer verwijderen" msgid "remove from parental protection" -msgstr "verwijder kinderslot" +msgstr "Verwijder kinderslot" msgid "remove new found flag" msgstr "verwijder 'nieuw gevonden' vlag" @@ -4237,10 +4297,10 @@ msgid "select" msgstr "selecteer" msgid "select .NFI flash file" -msgstr "" +msgstr "selecteer .NFI flash bestand" msgid "select image from server" -msgstr "" +msgstr "selecteer image van server" msgid "select movie" msgstr "Selecteer opname" @@ -4264,7 +4324,7 @@ msgid "show all" msgstr "alles weergeven" msgid "show alternatives" -msgstr "alternatieven weergeven" +msgstr "Alternatieven weergeven" msgid "show event details" msgstr "EPG details weergeven" @@ -4315,7 +4375,7 @@ msgid "sort by date" msgstr "Alfabetisch" msgid "spaces (top, between rows, left)" -msgstr "" +msgstr "spacies (boven, tussen rijen, links)" msgid "standard" msgstr "Standaard" @@ -4348,7 +4408,7 @@ msgid "swap PiP and main picture" msgstr "PiP/hoofdbeeld omwisselen" msgid "switch to bookmarks" -msgstr "ga naar markeerpunten" +msgstr "Ga naar markeerpunten" msgid "switch to filelist" msgstr "Ga naar bestandenlijst" @@ -4402,7 +4462,7 @@ msgid "wait for ci..." msgstr "wacht op CI..." msgid "wait for mmi..." -msgstr "Wacht op mmi..." +msgstr "wacht op mmi..." msgid "waiting" msgstr "ingepland" @@ -4414,7 +4474,7 @@ msgid "whitelist" msgstr "witte lijst" msgid "year" -msgstr "" +msgstr "jaar" msgid "yes" msgstr "ja" @@ -4451,6 +4511,9 @@ msgstr "zapte" #~ msgid "AC3 audio delay (ms)" #~ msgstr "AC3 audio vertraging (in ms)" +#~ msgid "About Ronaldd image" +#~ msgstr "Ronaldd image informatie" + #~ msgid "Add title..." #~ msgstr "Titel toevoegen..." @@ -4585,6 +4648,9 @@ msgstr "zapte" #~ msgid "Local directory" #~ msgstr "Lokale map" +#~ msgid "Lower smartcard" +#~ msgstr "Onderste smartcard" + #~ msgid "March" #~ msgstr "Maart" @@ -4606,6 +4672,9 @@ msgstr "zapte" #~ msgid "Nameserver Setup..." #~ msgstr "Nameserver instellingen..." +#~ msgid "Netbios name" +#~ msgstr "Netbios naam" + #~ msgid "New DVD" #~ msgstr "Nieuwe DVD" @@ -4618,6 +4687,9 @@ msgstr "zapte" #~ "Controleer of u de WiFi module correct geplaatst heeft of schakel de " #~ "lokale netwerk adapter aan." +#~ msgid "None (Softcam)" +#~ msgstr "Geen (softcam)" + #~ msgid "November" #~ msgstr "November" @@ -4634,6 +4706,12 @@ msgstr "zapte" #~ msgstr "" #~ "Wijzig deze instellingen niet als je niet exact weet waar ze voor staan!" +#~ msgid "Please wait, restarting softcam and cardserver." +#~ msgstr "Softcam en cardserver worden herstart, ogenblik a.u.b..." + +#~ msgid "Please wait, restarting softcam." +#~ msgstr "Softcam wordt herstart. Ogenblik a.u.b..." + #~ msgid "" #~ "Recording(s) are in progress or coming up in few seconds... really reboot " #~ "now?" @@ -4652,9 +4730,21 @@ msgstr "zapte" #~ msgstr "" #~ "Een opname is bezig of zal elk moment aanvangen. Wilt u toch uitschakelen?" +#~ msgid "Remote Control setup" +#~ msgstr "Afstandsbediening instellingen" + +#~ msgid "Reset Softcam" +#~ msgstr "Herstart Softcam" + #~ msgid "Reset both" #~ msgstr "Herstart beide" +#~ msgid "Samba settings" +#~ msgstr "Samba gegevens" + +#~ msgid "Samba setup" +#~ msgstr "Samba instellingen" + #~ msgid "Save current project to disk" #~ msgstr "Huidig project op schijf opslaan" @@ -4664,6 +4754,12 @@ msgstr "zapte" #~ msgid "Search for Picon on harddisk" #~ msgstr "Zoek naar picons op harde schijf" +#~ msgid "Select Card Server" +#~ msgstr "Selecteer Cardserver" + +#~ msgid "Select Softcam" +#~ msgstr "Selecteer Softcam" + #~ msgid "September" #~ msgstr "September" @@ -4684,6 +4780,9 @@ msgstr "zapte" #~ msgid "Show video preview" #~ msgstr "Video preview weergeven" +#~ msgid "Softcam Setup" +#~ msgstr "Softcam instellingen" + #~ msgid "Startwizard" #~ msgstr "Installatiewizard" @@ -4693,6 +4792,13 @@ msgstr "zapte" #~ msgid "Table of content to be burned to DVD:" #~ msgstr "Inhoudsopgave zoals deze naar DVD gebrand moet worden:" +#~ msgid "" +#~ "Thank you for using the wizard. Your box is now ready to use.\n" +#~ "Please press OK to start using you Dreambox." +#~ msgstr "" +#~ "De wizard is gereed. U kunt uw Dreambox nu gebruiken.\n" +#~ "Druk OK om de installatiewizard te verlaten." + #~ msgid "" #~ "Unable to initialize harddisk.\n" #~ "Please refer to the user manual.\n" @@ -4702,12 +4808,24 @@ msgstr "zapte" #~ "Raadpleeg de handleiding a.u.b.\n" #~ "Fout: " +#~ msgid "Upper smartcard" +#~ msgstr "Bovenste smartcard" + +#~ msgid "Username" +#~ msgstr "Gebruikersnaam" + #~ msgid "VCR Switch" #~ msgstr "VCR Switch" #~ msgid "When complete, press Key 0 to burn the collection!" #~ msgstr "Indien gereed, druk dan op de 0-toets om de verzameling te branden." +#~ msgid "Workgroup" +#~ msgstr "Werkgroep" + +#~ msgid "You have to wait for" +#~ msgstr "Wacht op" + #~ msgid "cancel" #~ msgstr "Annuleren" @@ -4720,12 +4838,30 @@ msgstr "zapte" #~ msgid "loopthrough to socket A" #~ msgstr "doorgelust naar socket A" +#~ msgid "minutes and" +#~ msgstr "minuten en" + #~ msgid "play next playlist entry" #~ msgstr "Volgende afspelen" #~ msgid "play previous playlist entry" #~ msgstr "Vorige afspelen" +#~ msgid "scan done! %d services found!" +#~ msgstr "Zoeken voltooid. %d zenders gevonden" + +#~ msgid "scan done! No service found!" +#~ msgstr "Zoeken voltooid. Geen zenders gevonden" + +#~ msgid "scan done! One service found!" +#~ msgstr "Zoeken voltooid. 1 zender gevonden" + +#~ msgid "scan in progress - %d %% done! %d services found!" +#~ msgstr "Bezig met zoeken - %d %% voltooid. %d zenders gevonden" + +#~ msgid "seconds." +#~ msgstr "seconden." + #~ msgid "skip backward (self defined)" #~ msgstr "Verspring terugwaarts (invoeren)" diff --git a/po/tr.po b/po/tr.po old mode 100755 new mode 100644 index 2880423b..7927debb --- a/po/tr.po +++ b/po/tr.po @@ -1,23 +1,19 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. -# msgid "" msgstr "" -"Project-Id-Version: Tr 01\n" +"Project-Id-Version: enigma2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-10-23 17:06+0200\n" -"PO-Revision-Date: 2006-06-16 12:51+0200\n" -"Last-Translator: koksal \n" -"Language-Team: GökselD& \n" +"POT-Creation-Date: 2008-11-03 17:09+0100\n" +"PO-Revision-Date: \n" +"Last-Translator: Zülfikar Veyisoğlu \n" +"Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Poedit-Language: Turkish\n" +"X-Poedit-Country: TURKEY\n" +"X-Poedit-SourceCharset: utf-8\n" msgid " " -msgstr "" +msgstr " " msgid "#000000" msgstr "#000000" @@ -26,7 +22,7 @@ msgid "#0064c7" msgstr "#0064c7" msgid "#25062748" -msgstr "" +msgstr "#25062748" msgid "#389416" msgstr "#389416" @@ -35,7 +31,7 @@ msgid "#80000000" msgstr "#80000000" msgid "#80ffffff" -msgstr "" +msgstr "#80ffffff" msgid "#bab329" msgstr "#bab329" @@ -50,19 +46,19 @@ msgid "#ffffffff" msgstr "#ffffffff" msgid "%H:%M" -msgstr "" +msgstr "%H:%M" #, python-format msgid "%d jobs are running in the background!" -msgstr "" +msgstr "%d görev arka planda çalışıyor!" #, python-format msgid "%d min" -msgstr "%d Enaz" +msgstr "%d dk" #, python-format msgid "%d services found!" -msgstr "%d Servis Bulunamadı!" +msgstr "%d kanal bulundu!" msgid "%d.%B %Y" msgstr "%d.%B %Y" @@ -73,23 +69,23 @@ msgid "" "(%s, %d MB free)" msgstr "" "%s\n" -"(%s, %d MB Boş)" +"(%s, %d MB boş)" #, python-format msgid "%s (%s)\n" -msgstr "" +msgstr "%s (%s)\n" msgid "(ZAP)" msgstr "(ZAP)" msgid "(empty)" -msgstr "" +msgstr "(boş)" msgid "(show optional DVD audio menu)" -msgstr "" +msgstr "(opsiyonel DVD ses menüsünü göster)" msgid ".NFI Download failed:" -msgstr "" +msgstr ".NFI dosyası indirilirken hata oluştu:" msgid ".NFI Flasher bootable USB stick successfully created." msgstr "" @@ -97,18 +93,20 @@ msgstr "" msgid "" ".NFI file passed md5sum signature check. You can safely flash this image!" msgstr "" +".NFI dosyası için yapılan md5sum imza doğrulaması başarıyla sonuçlandı. Bu " +"imajı güvenle kullanabilirsiniz!" msgid "/usr/share/enigma2 directory" -msgstr "/usr/share/enigma2 Klasörü" +msgstr "/usr/share/enigma2 klasörü" msgid "/var directory" -msgstr "/var Klasörü" +msgstr "/var klasörü" msgid "0" -msgstr "" +msgstr "0" msgid "1" -msgstr "" +msgstr "1" msgid "1.0" msgstr "1.0" @@ -120,82 +118,82 @@ msgid "1.2" msgstr "1.2" msgid "12V output" -msgstr "" +msgstr "12V çıkış" msgid "13 V" msgstr "13 V" msgid "16:10" -msgstr "" +msgstr "16:10" msgid "16:10 Letterbox" -msgstr "" +msgstr "16:10 Letterbox" msgid "16:10 PanScan" -msgstr "" +msgstr "16:10 PanScan" msgid "16:9" -msgstr "" +msgstr "16:9" msgid "16:9 Letterbox" -msgstr "" +msgstr "16:9 Letterbox" msgid "16:9 always" -msgstr "" +msgstr "16:9 sürekli" msgid "18 V" msgstr "18 V" msgid "2" -msgstr "" +msgstr "2" msgid "3" -msgstr "" +msgstr "3" msgid "30 minutes" -msgstr "" +msgstr "30 dakika" msgid "4" -msgstr "" +msgstr "4" msgid "4:3" -msgstr "" +msgstr "4:3" msgid "4:3 Letterbox" -msgstr "" +msgstr "4:3 Letterbox" msgid "4:3 PanScan" -msgstr "" +msgstr "4:3 PanScan" msgid "5" -msgstr "" +msgstr "5" msgid "5 minutes" -msgstr "" +msgstr "5 dakika" msgid "50 Hz" -msgstr "" +msgstr "50 Hz" msgid "6" -msgstr "" +msgstr "6" msgid "60 minutes" -msgstr "" +msgstr "60 dakika" msgid "7" -msgstr "" +msgstr "7" msgid "8" -msgstr "" +msgstr "8" msgid "9" -msgstr "" +msgstr "9" msgid "" -msgstr "" +msgstr "" msgid "??" -msgstr "" +msgstr "??" msgid "A" msgstr "A" @@ -205,16 +203,22 @@ msgid "" "A configuration file (%s) was modified since Installation.\n" "Do you want to keep your version?" msgstr "" +"Kurulumdan sonra (%s) konfigürasyon dosyası değiştirilmiş.\n" +"Kendi dosyanızı tutmak istiyor musunuz?" msgid "" "A finished record timer wants to set your\n" "Dreambox to standby. Do that now?" msgstr "" +"Bitmiş olan bir kayıt zamanlayıcısı Dreambox'ı\n" +"uyku moduna almak istiyor. Şimdi alınsın mı?" msgid "" "A finished record timer wants to shut down\n" "your Dreambox. Shutdown now?" msgstr "" +"Bitmiş olan bir kayıt zamanlayıcısı Dreambox'ı\n" +"kapatmak istiyor. Şimdi kapatılsın mı?" msgid "A graphical EPG for all services of an specific bouquet" msgstr "" @@ -224,23 +228,27 @@ msgid "" "A record has been started:\n" "%s" msgstr "" +"Kayıt başlatıldı:\n" +"%s" msgid "" "A recording is currently running.\n" "What do you want to do?" msgstr "" -"Kayıt Helen devamediyor.\n" -"Ne Yapmak İstiyorsunuz?" +"Kayıt devam ediyor.\n" +"Ne yapmak istiyorsunuz?" msgid "" "A recording is currently running. Please stop the recording before trying to " "configure the positioner." -msgstr " Kayıt Helen devamediyor.lütfen kaydı kapamadan ayarları kontrol edin." +msgstr "" +"Kayıt devam ediyor. Lütfen pozisyoner yapılandırmasını denemeden önce kaydı " +"durdurun." msgid "" "A recording is currently running. Please stop the recording before trying to " "start the satfinder." -msgstr "" +msgstr "Kayıt devam ediyor. Uydu Arayıcıyı başlatmadan önce kaydı durdurun." #, python-format msgid "A required tool (%s) was not found." @@ -250,21 +258,23 @@ msgid "" "A sleep timer wants to set your\n" "Dreambox to standby. Do that now?" msgstr "" +"Zamanlanmış bir görev Dreambox'ı\n" +"uyku moduna almak istiyor. Şimdi alınsın mı?" msgid "" "A sleep timer wants to shut down\n" "your Dreambox. Shutdown now?" msgstr "" +"Zamanlanmış bir görev Dreambox'ı\n" +"kapatmak istiyor. Şimdi kapatılsın mı?" msgid "" "A timer failed to record!\n" "Disable TV and try again?\n" msgstr "" -"Kayıtda Zaman Hatası!\n" -"TV Devredışı bırak veya tekrar dene?\n" msgid "A/V Settings" -msgstr "Ses/Görüntü Ayarları" +msgstr "Ses/Görüntü Ayarları" msgid "AA" msgstr "AA" @@ -273,13 +283,13 @@ msgid "AB" msgstr "AB" msgid "AC3 default" -msgstr "AC3 Varsayılan" +msgstr "AC3 varsayılan" msgid "AC3 downmix" -msgstr "" +msgstr "AC3 downmix" msgid "AGC" -msgstr "" +msgstr "AGC" msgid "AGC:" msgstr "AGC:" @@ -291,43 +301,43 @@ msgid "About..." msgstr "Hakkında..." msgid "Action on long powerbutton press" -msgstr "" +msgstr "Kapatma düğmesine uzun süre basılınca" msgid "Action:" -msgstr "" +msgstr "Eylem:" msgid "Activate Picture in Picture" -msgstr "Etkinleştir Resim İçinde Resim" +msgstr "Resim içinde resim (PIP) 'i etkinleştir" msgid "Activate network settings" -msgstr "Networkü Etkinleştir" +msgstr "Ağ ayarlarını etkinleştir" msgid "Adapter settings" -msgstr "" +msgstr "Ağ donanımı ayarları" msgid "Add" -msgstr "Yeni" +msgstr "Ekle" msgid "Add Bookmark" -msgstr "" +msgstr "Yer imi Ekle" msgid "Add a mark" -msgstr "" +msgstr "İşaret ekle" msgid "Add a new title" msgstr "" msgid "Add timer" -msgstr "Yeni Zaman" +msgstr "Zamanlayıcı" msgid "Add title" msgstr "" msgid "Add to bouquet" -msgstr "" +msgstr "Buket ekle" msgid "Add to favourites" -msgstr "" +msgstr "Favori ekle" msgid "" "Adjust the color settings so that all the color shades are distinguishable, " @@ -340,10 +350,10 @@ msgid "Advanced" msgstr "Gelişmiş" msgid "Advanced Video Setup" -msgstr "" +msgstr "Gelişmiş Görüntü Kurulumu" msgid "After event" -msgstr "Olaydan Sonra" +msgstr "Eylem bittikten sonra" msgid "" "After the start wizard is completed, you need to protect single services. " @@ -354,25 +364,25 @@ msgid "Album:" msgstr "Albüm:" msgid "All" -msgstr "Hepsi" +msgstr "Tümü" msgid "All Satellites" msgstr "" msgid "All..." -msgstr "" +msgstr "Tümü..." msgid "Alpha" msgstr "Alfa" msgid "Alternative radio mode" -msgstr "" +msgstr "Alternatif radyo modu" msgid "Alternative services tuner priority" -msgstr "" +msgstr "Alternatif kanallarda tuner önceliği" msgid "An empty filename is illegal." -msgstr "" +msgstr "Boş dosya adı geçersiz." msgid "An unknown error occured!" msgstr "" @@ -384,30 +394,32 @@ msgid "" "Are you sure you want to restart your network interfaces?\n" "\n" msgstr "" +"Ağ arayüzlerini yeniden başlatmak istediğinizden emin misiniz?\n" +"\n" msgid "Artist:" msgstr "Sanatçı:" msgid "Ask before shutdown:" -msgstr "" +msgstr "Kapatmadan önce sor:" msgid "Ask user" -msgstr "" +msgstr "Sor" msgid "Aspect Ratio" -msgstr "Görüntü Oranı" +msgstr "En boy oranı" msgid "Audio" msgstr "Ses" msgid "Audio Options..." -msgstr "" +msgstr "Ses Ayarları..." msgid "Authoring mode" msgstr "" msgid "Auto" -msgstr "otmoatik" +msgstr "Otomatik" msgid "Auto chapter split every ? minutes (0=never)" msgstr "" @@ -416,7 +428,7 @@ msgid "Auto scart switching" msgstr "" msgid "Automatic" -msgstr "" +msgstr "Otomatik" msgid "Automatic SSID lookup" msgstr "" @@ -437,55 +449,55 @@ msgid "BB" msgstr "BB" msgid "BER" -msgstr "" +msgstr "BER" msgid "BER:" msgstr "BER:" msgid "Back" -msgstr "" +msgstr "Geri" msgid "Background" msgstr "" msgid "Backup" -msgstr "Yedekleme" +msgstr "Yedek Al" msgid "Backup Location" -msgstr "Yedekleme Konumu" +msgstr "Yedeğin Yükleneceği Hedef Konum" msgid "Backup Mode" -msgstr "Yedekleme Şekli" +msgstr "Yedeklenecek klasör" msgid "Backup is done. Please press OK to see the result." -msgstr "Yedekleme Bitti Lütfen OK Tuşuna Basın Sonucu Görün." +msgstr "Yedekleme tamamlandı. OK tuşuna basarak sonucu görebilirsiniz." msgid "Band" -msgstr "bant" +msgstr "Bant" msgid "Bandwidth" -msgstr "bant genişliği" +msgstr "Bant genişliği" msgid "Begin time" -msgstr "" +msgstr "Başlangıç" msgid "Behavior of 'pause' when paused" -msgstr "" +msgstr "Duraklama modunda 'duraklat' tuşuna basıldığında yapılacak işlem" msgid "Behavior of 0 key in PiP-mode" -msgstr "" +msgstr "PiP modunda 0 tuşuna basıldığında yapılacak işlem" msgid "Behavior when a movie is started" -msgstr "" +msgstr "Film başlatıldığı zaman yapılacak işlem" msgid "Behavior when a movie is stopped" -msgstr "" +msgstr "Film durdurulduğu zaman yapılacak işlem" msgid "Behavior when a movie reaches the end" -msgstr "" +msgstr "Filmin sonuna ulaşıldığında yapılacak işlem" msgid "Bookmarks" -msgstr "" +msgstr "Yer imleri" msgid "Brightness" msgstr "Parlaklık" @@ -493,16 +505,19 @@ msgstr "Parlaklık" msgid "Burn DVD" msgstr "" +msgid "Burn existing image to DVD" +msgstr "" + msgid "Burn to DVD..." msgstr "" msgid "Bus: " -msgstr "Yol: " +msgstr "Yol:" msgid "" "By pressing the OK Button on your remote control, the info bar is being " "displayed." -msgstr "" +msgstr "Kumandanın OK tuşuna basıldığı zaman, Bilgi Çubuğunu göster" msgid "C" msgstr "" @@ -511,52 +526,52 @@ msgid "C-Band" msgstr "C-Band" msgid "CF Drive" -msgstr "CF Sürücü" +msgstr "CF Sürücüsü" msgid "CVBS" -msgstr "" +msgstr "CVBS" msgid "Cable" msgstr "Kablo" msgid "Cache Thumbnails" -msgstr "" +msgstr "Küçük resimleri önbelleğe al" msgid "Call monitoring" -msgstr "" +msgstr "Çağrı görüntüleme" msgid "Cancel" msgstr "Vazgeç" msgid "Cannot parse feed directory" -msgstr "" +msgstr "Besleme (feed) ayrıştırılamadı" msgid "Capacity: " -msgstr "Kapasite:" +msgstr "Kapasite" msgid "Card" -msgstr "" +msgstr "Kart" msgid "Catalan" -msgstr "" +msgstr "Catalan" msgid "Change bouquets in quickzap" -msgstr "" +msgstr "Kanal değiştirirken buketler arası geçişe izin ver" msgid "Change dir." msgstr "" msgid "Change pin code" -msgstr "" +msgstr "Şifre değiştir" msgid "Change service pin" -msgstr "" +msgstr "Kanal şifresini değiştir" msgid "Change service pins" -msgstr "" +msgstr "Kanal şifrelerini değiştir" msgid "Change setup pin" -msgstr "" +msgstr "Kurulum şifresini değiştir" msgid "Channel" msgstr "Kanal" @@ -568,55 +583,55 @@ msgid "Channel:" msgstr "Kanal:" msgid "Channellist menu" -msgstr "Kanal Menü Liste" +msgstr "Kanal Listesi menüsü" msgid "Chap." -msgstr "" +msgstr "Bölüm" msgid "Chapter" -msgstr "" +msgstr "Bölüm" msgid "Chapter:" -msgstr "" +msgstr "Bölüm:" msgid "Check" -msgstr "" +msgstr "Kontrol et" msgid "Checking Filesystem..." -msgstr "" +msgstr "Dosya sistemi kontrol ediliyor..." msgid "Choose Tuner" -msgstr "" +msgstr "Tuner Seç" msgid "Choose bouquet" msgstr "Buket Seç" msgid "Choose source" -msgstr "Kaynağı Seç" +msgstr "Kaynak seç" msgid "Choose target folder" -msgstr "" +msgstr "Hedef klasörü seç" msgid "Choose your Skin" -msgstr "" +msgstr "Arayüzünüzü Seçin" msgid "Cleanup" -msgstr "Temizlik" +msgstr "Temizle" msgid "Clear before scan" -msgstr "önceki aramayı Temizle" +msgstr "Kanal aramadan önce eski kanal listesini temizle" msgid "Clear log" -msgstr "Logu Temizle" +msgstr "Kayıt günlüğünü temizle" msgid "Close" -msgstr "" +msgstr "Kapat" msgid "Code rate high" -msgstr "Şifreleme düzeyi Yüksek" +msgstr "" msgid "Code rate low" -msgstr "Şifreleme Düzeyi Düşük" +msgstr "" msgid "Coderate HP" msgstr "" @@ -625,10 +640,10 @@ msgid "Coderate LP" msgstr "" msgid "Collection name" -msgstr "" +msgstr "Kolleksiyon adı" msgid "Collection settings" -msgstr "" +msgstr "Kolleksiyon ayarları" msgid "Color Format" msgstr "Renk Biçimi" @@ -637,40 +652,40 @@ msgid "Command execution..." msgstr "" msgid "Command order" -msgstr "Komut Düzenlemek" +msgstr "Emir sıralaması" msgid "Committed DiSEqC command" -msgstr "Bağlıolan DiSEqC Emri" +msgstr "Bağlı DiSEqC emri" msgid "Common Interface" -msgstr "Ortak Arabirim" +msgstr "Ortak Arayüz" msgid "Compact Flash" -msgstr "" +msgstr "Compact Flash" msgid "Compact flash card" -msgstr "Compact flash Kart" +msgstr "Compact flash kartı" msgid "Complete" -msgstr "Tamam" +msgstr "Tamamlandı" msgid "Configuration Mode" -msgstr "Yapılandırma Şekli" +msgstr "Konfigürasyon modu" msgid "Configuring" -msgstr "" +msgstr "Ayarlanıyor" msgid "Conflicting timer" -msgstr "Çakışan Zaman" +msgstr "Zamanlama çakışması" msgid "Connected to" msgstr "" msgid "Connected to Fritz!Box!" -msgstr "" +msgstr "Fritz!Box! a bağlanıldı!" msgid "Connecting to Fritz!Box..." -msgstr "" +msgstr "Fritz!Box'a bağlanılıyor..." #, python-format msgid "" @@ -678,6 +693,9 @@ msgid "" "failed! (%s)\n" "retrying..." msgstr "" +"Fritz!Box bağlantısı\n" +"başarısız! (%s)\n" +"yeniden deneniyor..." msgid "Constellation" msgstr "" @@ -689,68 +707,71 @@ msgid "Continue in background" msgstr "" msgid "Continue playing" -msgstr "" +msgstr "Oynatmaya devam et" msgid "Contrast" -msgstr "Keskinlik" +msgstr "Kontrast" msgid "Copying USB flasher boot image to stick..." msgstr "" msgid "Could not connect to Dreambox .NFI Image Feed Server:" -msgstr "" +msgstr "Dreambox .NFI imaj sunucusuna bağlanamıyor:" msgid "Could not load Medium! No disc inserted?" +msgstr "DVD medyası yüklenemedi. DVD medyası takılı değil mi?" + +msgid "Create DVD-ISO" msgstr "" msgid "Create movie folder failed" -msgstr "" +msgstr "Film klasörü (movie) oluşturulamadı" #, python-format msgid "Creating directory %s failed." -msgstr "" +msgstr "%s klasörü oluşturulamadı." msgid "Creating partition failed" -msgstr "" +msgstr "Diski bölümü oluşturulamadı" msgid "Croatian" -msgstr "" +msgstr "Croatian" msgid "Current Transponder" -msgstr "" +msgstr "Geçerli Transponder" msgid "Current settings:" -msgstr "" +msgstr "Geçerli ayarlar:" msgid "Current version:" -msgstr "Kullanılan Versiyon:" +msgstr "Geçerli sürüm:" msgid "Custom skip time for '1'/'3'-keys" -msgstr "" +msgstr "'1'/'3' Tuşlarına basıldığında atlanılacak süre" msgid "Custom skip time for '4'/'6'-keys" -msgstr "" +msgstr "'4'/'6' Tuşlarına basıldığında atlanılacak süre" msgid "Custom skip time for '7'/'9'-keys" -msgstr "" +msgstr "'7'/'9' Tuşlarına basıldığında atlanılacak süre" msgid "Customize" -msgstr "" +msgstr "Özelleştir" msgid "Cut" -msgstr "" +msgstr "Kes" msgid "Cutlist editor..." -msgstr "" +msgstr "Kesme listesi düzenleyici..." msgid "Czech" -msgstr "" +msgstr "Czech" msgid "D" msgstr "" msgid "DHCP" -msgstr "" +msgstr "DHCP" msgid "DVB-S" msgstr "DVB-S" @@ -759,13 +780,13 @@ msgid "DVB-S2" msgstr "DVB-S2" msgid "DVD Player" -msgstr "" +msgstr "DVD Oynatıcı" msgid "DVD media toolbox" -msgstr "" +msgstr "DVD medya araçları" msgid "Danish" -msgstr "Çanak" +msgstr "Danish" msgid "Date" msgstr "Tarih" @@ -777,22 +798,22 @@ msgid "Deep Standby" msgstr "Derin Uyku" msgid "Default services lists" -msgstr "" +msgstr "Öntanımlı kanal listesi" msgid "Default settings" -msgstr "" +msgstr "Varsayılan ayarlar" msgid "Delay" -msgstr "Geçikme" +msgstr "Gecikme" msgid "Delete" -msgstr "Silme" +msgstr "Sil" msgid "Delete entry" -msgstr "Girdileri Sil" +msgstr "Seçimi sil" msgid "Delete failed!" -msgstr "Silme Başarısız oldu!" +msgstr "Silmeişlemi başarısız!" #, python-format msgid "" @@ -801,16 +822,16 @@ msgid "" msgstr "" msgid "Description" -msgstr "Tarifi" +msgstr "Açıklama" msgid "Destination directory" -msgstr "" +msgstr "Hedef Klasör" msgid "Detected HDD:" -msgstr "Bulunan HDD:" +msgstr "Tanımlanan HDD:" msgid "Detected NIMs:" -msgstr "Bulunan NIMs:" +msgstr "Tanımlanan NIM:" msgid "DiSEqC" msgstr "DiSEqC" @@ -822,35 +843,35 @@ msgid "DiSEqC A/B/C/D" msgstr "DiSEqC A/B/C/D" msgid "DiSEqC Mode" -msgstr "DiSEqC Şekli" +msgstr "DiSEqC Modu" msgid "DiSEqC mode" -msgstr "DiSEqC Şekli" +msgstr "DiSEqC modu" msgid "DiSEqC repeats" -msgstr "DiSEqC Tekrarlayıcı" +msgstr "DiSEqC tekrarı" msgid "Direct playback of linked titles without menu" -msgstr "" +msgstr "Linklenmiş başlıkları menü olmadan hemen oynat." #, python-format msgid "Directory %s nonexistent." -msgstr "" +msgstr "%s klasörü oluşturulmamış." msgid "Disable" -msgstr "Devredışı Bırak" +msgstr "Kapat" msgid "Disable Picture in Picture" -msgstr "Resim İçinde Resmi devredışı Bırak" +msgstr "Resim içinde resim (PIP) 'i kapat" msgid "Disable Subtitles" -msgstr "" +msgstr "Altyazıyı Kapat" msgid "Disable timer" -msgstr "" +msgstr "Zamanlayıcıyı Kapat" msgid "Disabled" -msgstr "" +msgstr "Kapat" #, python-format msgid "" @@ -858,18 +879,21 @@ msgid "" "Fritz!Box! (%s)\n" "retrying..." msgstr "" +"Fritz!Box\n" +"bağlı değil! (%s)\n" +"yeniden deneniyor..." msgid "Dish" -msgstr "Çanak" +msgstr "Çanak anten" msgid "Display 16:9 content as" -msgstr "" +msgstr "16:9 içeriği şu şekilde göster" msgid "Display 4:3 content as" -msgstr "" +msgstr "4:3 içeriği şu şekilde göster" msgid "Display Setup" -msgstr "" +msgstr "OLED Ekran Ayarları" #, python-format msgid "" @@ -881,10 +905,12 @@ msgid "" "Do you really want to check the filesystem?\n" "This could take lots of time!" msgstr "" +"Dosya sistemini kontrol etmek istediğinizden emin misiniz?\n" +"Bu işlem çok uzun sürecektir!" #, python-format msgid "Do you really want to delete %s?" -msgstr "Silmek İstediğinize Eminmisinz %s?" +msgstr "%s 'i silmek istediğinizden emin misiniz?" #, python-format msgid "" @@ -893,184 +919,186 @@ msgid "" msgstr "" msgid "Do you really want to exit?" -msgstr "" +msgstr "Çıkmak istediğinizden emin misiniz?" msgid "" "Do you really want to initialize the harddisk?\n" "All data on the disk will be lost!" -msgstr "Hard diski i sıfırlamak konusunda eminmisiniz" +msgstr "" +"Sabit diski sıfırlamak istediğinizden emin misiniz?\n" +"Bütün verilerinizi kaybedebilirsiniz!" #, python-format msgid "Do you really want to remove directory %s from the disk?" -msgstr "" +msgstr "%s klasörünü silmek istediğinizden emin misiniz?" #, python-format msgid "Do you really want to remove your bookmark of %s?" -msgstr "" +msgstr "%s isimli yer imini silmek istediğinizden emin misiniz?" msgid "" "Do you want to backup now?\n" "After pressing OK, please wait!" msgstr "" -"Şimdi Yedek Almak İstermisiniz?\n" -"O Zaman OK, Ve Bekle!" +"Yedeklemeyi şimdi başlatmak istediğinizden emin misiniz?\n" +"Lütfen OK tuşuna bastıktan sonra bekleyiniz!" msgid "Do you want to burn this collection to DVD medium?" -msgstr "" +msgstr "Bu koleksiyonu DVD medyasına bazmak istiyor musunuz?" msgid "Do you want to do a service scan?" -msgstr "şuan Servisi Taramak İstiyormusunuz!" +msgstr "Kanal araması yapmak ister misiniz?" msgid "Do you want to do another manual service scan?" -msgstr "Başka Elle Servs Araması İstermisiniz" +msgstr "Başka kanal araması yapacak mısınız?" msgid "Do you want to enable the parental control feature on your dreambox?" -msgstr "" +msgstr "Ebeveyn kontrolü özelliğini aktifleştirmek ister misiniz?" msgid "Do you want to install default sat lists?" -msgstr "" +msgstr "Öntanımlı kanal listesi yüklemek istiyor musunuz?" msgid "Do you want to play DVD in drive?" -msgstr "" +msgstr "DVD'yi oynatmak istiyor musunuz?" msgid "Do you want to preview this DVD before burning?" -msgstr "" +msgstr "DVD'yi yazmadan önce önizleme yapmak istiyor musunuz?" msgid "Do you want to restore your settings?" -msgstr " Ayarların Geri Yüklenmesini İstermisiniz ?" +msgstr "Ayarlarınızı geri yüklemek istiyor musunuz?" msgid "Do you want to resume this playback?" -msgstr "" +msgstr "Oynatmaya kaldığınız yerden devam etmek istiyor musunuz?" msgid "" "Do you want to update your Dreambox?\n" "After pressing OK, please wait!" msgstr "" -" Dreambox Güncellemek İstermisiniz?\n" -"Bastıktan Sonra OK, Lütfen Bekle!" +"Dreambox u güncellemek istiyor musunuz?\n" +"Lütfen OK a bastıktan sonra bekleyin!" msgid "Do you want to view a tutorial?" -msgstr "Görerek İstermisiniz Öğreticiyi?" +msgstr "Cihaz kullanımını anlatan öğreticiyi görmek ister misiniz?" msgid "Don't stop current event but disable coming events" -msgstr "" +msgstr "Mevcut EPG programını kaydet ama gelecek programda kapat" #, python-format msgid "Done - Installed or upgraded %d packages" -msgstr "" +msgstr "Tamamlandı - %d paket yüklendi veya güncellendi" #, python-format msgid "Done - Installed or upgraded %d packages with %d errors" -msgstr "" +msgstr "Tamamlandı - %d paket yüklendi veya güncellendi %d pakette hata oluştu" msgid "Download" -msgstr "" +msgstr "İndir" msgid "Download .NFI-Files for USB-Flasher" -msgstr "" +msgstr "USB-Flaş için .NFI dosyası indir" msgid "Download Plugins" -msgstr "İndirilebilir plugins" +msgstr "Program İndir" msgid "Download of USB flasher boot image failed: " msgstr "" msgid "Downloadable new plugins" -msgstr "İndirilebilir yeni plugins" +msgstr "İndirilebilir yeni programlar" msgid "Downloadable plugins" -msgstr "İndirilebilir plugins" +msgstr "İndirilebilir programlar" msgid "Downloading" -msgstr "" +msgstr "İndiriliyor" msgid "Downloading image description..." msgstr "" msgid "Downloading plugin information. Please wait..." -msgstr "Plugin İndiriliyor Lütfen Bekleyin..." +msgstr "Program bilgisi indiriliyor. Lütfen bekleyin..." msgid "Dreambox format data DVD (HDTV compatible)" -msgstr "" +msgstr "Dreambox DVD biçimi (HDTV uyumlu)" msgid "Dutch" -msgstr "Almanca" +msgstr "Dutch" msgid "E" -msgstr "E" +msgstr "D" msgid "EPG Selection" msgstr "EPG Seçimi" #, python-format msgid "ERROR - failed to scan (%s)!" -msgstr "HATA - Tarama Başarısız (%s)!" +msgstr "HATA - arama başarısız (%s)!" msgid "East" msgstr "Doğu" msgid "Edit DNS" -msgstr "" +msgstr "DNS Düzenle" msgid "Edit chapters of current title" -msgstr "" +msgstr "Geçerli başlık için bölümleri düzenle" msgid "Edit services list" -msgstr "" +msgstr "Kanal listesini düzenle" msgid "Edit settings" -msgstr "" +msgstr "Ayarları düzenle" msgid "Edit the Nameserver configuration of your Dreambox.\n" -msgstr "" +msgstr "Dreambox'ınızın isim sunucu (DNS) ayarlarını yapılandırın.\n" msgid "Edit the network configuration of your Dreambox.\n" -msgstr "" +msgstr "Dreambox'ınızın ağ ayarlarını yapılandırın.\n" msgid "Edit title" -msgstr "" +msgstr "Başlığı düzenle" msgid "Electronic Program Guide" -msgstr "" +msgstr "Elektronik Program Rehberi" msgid "Enable" -msgstr "Devreye Al" +msgstr "Açık" msgid "Enable 5V for active antenna" -msgstr "" +msgstr "aktif anten için 5V gerilimi etkinleştir" msgid "Enable multiple bouquets" -msgstr "" +msgstr "Çoklu buket kullanımını etkinleştir" msgid "Enable parental control" -msgstr "" +msgstr "Ebeveyn kontrolünü aç" msgid "Enable timer" msgstr "" msgid "Enabled" -msgstr "" +msgstr "Açık" msgid "Encryption" -msgstr "" +msgstr "Şifreleme" msgid "Encryption Key" -msgstr "" +msgstr "Şifreleme Anahtarı" msgid "Encryption Type" -msgstr "" +msgstr "Şifreleme Tipi" msgid "End" -msgstr "Son" +msgstr "Bitiş zamanı" msgid "End time" -msgstr "" +msgstr "Bitiş zamanı" msgid "EndTime" -msgstr "Bitiş Zamanı" +msgstr "Bitiş Saati" msgid "English" -msgstr "İngilizce" +msgstr "English" msgid "" "Enigma2 Skinselector v0.5 BETA\n" @@ -1080,6 +1108,12 @@ msgid "" "\n" "© 2006 - Stephan Reichholf" msgstr "" +"Enigma2 Arayüz Seçic v0.5 BETA\n" +"\n" +"Herhangi bir hatayla karşılaştıysanız lüften\n" +"stephan@reichholf.net ile irtibata geçiniz\n" +"\n" +"© 2006 - Stephan Reichholf" #. TRANSLATORS: Note that "Enter" in the two strings below should *not* #. be interpreted as "Give speed as input". The intended meaning is @@ -1087,19 +1121,19 @@ msgstr "" #. which "winding mode" is entered when first pressing "rewind" or #. "fast forward". msgid "Enter Fast Forward at speed" -msgstr "" +msgstr "Hızlı sardırma hızını (FF) girin" msgid "Enter Rewind at speed" -msgstr "" +msgstr "Geri sardırma hızını (RW) seçin" msgid "Enter main menu..." -msgstr "" +msgstr "Ana menüye gir..." msgid "Enter the service pin" -msgstr "" +msgstr "Kanal şifresi girin" msgid "Error" -msgstr "" +msgstr "Hata" msgid "Error executing plugin" msgstr "" @@ -1109,97 +1143,99 @@ msgid "" "Error: %s\n" "Retry?" msgstr "" +"Hata: %s\n" +"Tekrar denensin mi?" msgid "Eventview" -msgstr "Hata Günlüğü" +msgstr "Program detayı" msgid "Everything is fine" -msgstr "" +msgstr "Gerşey güzel" msgid "Execution Progress:" -msgstr "Uygulama İlerliyor:" +msgstr "" msgid "Execution finished!!" -msgstr "Uygulama Bitti!!" +msgstr "" msgid "Exit" -msgstr "" +msgstr "Çıkış" msgid "Exit editor" -msgstr "" +msgstr "Editörden çık" msgid "Exit the wizard" -msgstr "Sihirbazdan Çık" +msgstr "Sihirbazdan çık" msgid "Exit wizard" -msgstr "Sihirbazdan Çık" +msgstr "Sihirbazdan çık" msgid "Expert" -msgstr "" +msgstr "Uzman" msgid "Extended Networksetup Plugin..." msgstr "" msgid "Extended Setup..." -msgstr "" +msgstr "Gelişmiş Kurulum..." msgid "Extensions" -msgstr "İlaveler" +msgstr "Eklentiler" msgid "FEC" msgstr "FEC" msgid "Factory reset" -msgstr "" +msgstr "Fabrika ayarlarına dön" msgid "Failed" -msgstr "" +msgstr "Başarısız" msgid "Fast" -msgstr "" +msgstr "Hızlı" msgid "Fast DiSEqC" -msgstr "Hızlı DiSEqC" +msgstr "Hızlı DiSEqC" msgid "Fast Forward speeds" -msgstr "" +msgstr "Hızlı sardırma (FF) hızları" msgid "Fast epoch" msgstr "" msgid "Favourites" -msgstr "Favori" +msgstr "Favoriler" msgid "Filesystem Check..." -msgstr "" +msgstr "Dosya sistemi Kontrolü..." msgid "Filesystem contains uncorrectable errors" -msgstr "" +msgstr "Dosya sistemi içeriğinde düzeltilemeyen hatalar var" msgid "Finetune" -msgstr "İnce Ayar" +msgstr "İnce ayar" msgid "Finished" -msgstr "" +msgstr "Bitmiş" msgid "Finnish" -msgstr "Bitiş" +msgstr "Finnish" msgid "" "First we need to download the latest boot environment for the USB flasher." msgstr "" msgid "Fix USB stick" -msgstr "" +msgstr "USB çubuğu onar" msgid "Flash" -msgstr "" +msgstr "Flaşa yaz" msgid "Flashing failed" -msgstr "" +msgstr "Flaşa yazma başarısız" msgid "Font size" -msgstr "" +msgstr "Yazıtipi boyutu" msgid "Format" msgstr "" @@ -1208,43 +1244,45 @@ msgid "Frame repeat count during non-smooth winding" msgstr "" msgid "French" -msgstr "Fransızca" +msgstr "French" msgid "Frequency" msgstr "Frekans" msgid "Frequency bands" -msgstr "" +msgstr "Frekans bantları" msgid "Frequency scan step size(khz)" -msgstr "" +msgstr "Frekans arama adımı (khz)" msgid "Frequency steps" -msgstr "" +msgstr "Frekans adımları" msgid "Fri" -msgstr "Fri" +msgstr "Cuma" msgid "Friday" msgstr "Cuma" msgid "Fritz!Box FON IP address" -msgstr "" +msgstr "Fritz!Box FON IP adresi" #, python-format msgid "Frontprocessor version: %d" -msgstr "Ön İşlemci: %d" +msgstr "Frontprocessor sürümü: %d" msgid "Fsck failed" -msgstr "" +msgstr "Fsck (dosya sistemi tutarlılık kontrolü) başarısız" msgid "Function not yet implemented" -msgstr "İşlev Yerine getir" +msgstr "Fonksiyon henüz uygulanmamış" msgid "" "GUI needs a restart to apply a new skin\n" "Do you want to Restart the GUI now?" msgstr "" +"Yeni arayüzü aktif hale getirmek için yeniden başlatma gerekiyor\n" +"Grafik arayüzü (GUI)'yi yeniden başlatmak istediğinize emin misiniz?" msgid "Gateway" msgstr "Ağ geçidi" @@ -1253,63 +1291,71 @@ msgid "Genre:" msgstr "Tür:" msgid "German" -msgstr "Alman" +msgstr "German" msgid "Getting plugin information. Please wait..." -msgstr "Plugin Bilgisi Hazırlanıypor Lütfen Bekleyin...." +msgstr "Program bilgisi getiriliyor. Lütfen bekleyin..." msgid "Goto 0" -msgstr "0 Git" +msgstr "0 a git" msgid "Goto position" -msgstr "Pozisyona Git" +msgstr "Pozisyona git" msgid "Graphical Multi EPG" -msgstr "" +msgstr "Grafik çoklu EPG" msgid "Greek" -msgstr "" +msgstr "Greek" msgid "Guard Interval" msgstr "" msgid "Guard interval mode" -msgstr "Aralık Modunu Koru" +msgstr "" msgid "Harddisk" -msgstr "Sabit Sürücü" +msgstr "Sabitdisk" msgid "Harddisk setup" -msgstr "" +msgstr "Sabitdisk kurulumu" msgid "Harddisk standby after" -msgstr "" +msgstr "Belirtilen süre kullanılmadığında Sabitdiski uyku moduna al" msgid "Hierarchy Information" -msgstr "" +msgstr "Hiyerarşi Bilgisi" msgid "Hierarchy mode" -msgstr "Düzen Modu" +msgstr "Hiyerarşi modu" msgid "How many minutes do you want to record?" -msgstr "Kaç dakika kayıt yapmak istersiniz ?" +msgstr "Kaç dakikalık kayıt başlatmak istiyorsunuz?" msgid "Hungarian" -msgstr "" +msgstr "Hungarian" msgid "IP Address" msgstr "IP Adresi" +msgid "ISO file is too large for this filesystem!" +msgstr "" + +msgid "ISO path" +msgstr "" + msgid "Icelandic" -msgstr "izlanda" +msgstr "Icelandic" msgid "If you can see this page, please press OK." -msgstr "" +msgstr "Bu sayfayı görebiliyorsanız, OK a basınız." msgid "" "If you see this, something is wrong with\n" "your scart connection. Press OK to return." msgstr "" +"Eğer bunu görüyorsanız, scart bağlantınızla\n" +"ilgili bazı hatalar var. Geri dönmek için OK tuşuna basın." msgid "" "If your TV has a brightness or contrast enhancement, disable it. If there is " @@ -1324,112 +1370,112 @@ msgid "" msgstr "" msgid "Image flash utility" -msgstr "" +msgstr "İmaj flaş aracı" msgid "Image-Upgrade" -msgstr "İmaj-Yükselt" +msgstr "İmaj-Güncelle" msgid "In Progress" msgstr "" msgid "" "In order to record a timer, the TV was switched to the recording service!\n" -msgstr "Zamanlanmış Kayıtları Sıraya Koy,Televizyonda Servisini Kaydet!\n" +msgstr "" msgid "Increased voltage" -msgstr "Ayrılmış Voltaj" +msgstr "Arttırılmış voltaj" msgid "Index" -msgstr "" +msgstr "Dizin" msgid "InfoBar" msgstr "Bilgi Çubuğu" msgid "Infobar timeout" -msgstr "" +msgstr "Bilgi Çubuğu zaman aşımı süresi" msgid "Information" msgstr "Bilgi" msgid "Init" -msgstr "İçinde" +msgstr "Sıfırla" msgid "Initialization..." -msgstr "" +msgstr "Sıfırlama..." msgid "Initialize" -msgstr "Başlangıç Ayarları" +msgstr "Sıfırla" msgid "Initializing Harddisk..." -msgstr "Harddiskiniz Sıfırlanıyor" +msgstr "Sabitdisk Sıfırlanıyor..." msgid "Input" msgstr "Giriş" msgid "Installing" -msgstr "" +msgstr "Kuruluyor" msgid "Installing Software..." -msgstr "" +msgstr "Yazılım Yükleniyor..." msgid "Installing default sat lists... Please wait..." -msgstr "" +msgstr "Öntanımlı uygu listesi yükleniyor... Lütfen bekleyin..." msgid "Installing defaults... Please wait..." -msgstr "" +msgstr "Öntanımlı bilgiler yükleniyor... Lütfen bekleyiniz..." msgid "Installing package content... Please wait..." -msgstr "" +msgstr "Paket içeriği yükleniyor... Lütfen yükleyiniz..." msgid "Instant Record..." -msgstr "" +msgstr "Anlık Kayıt..." msgid "Integrated Ethernet" -msgstr "" +msgstr "Entegre Ağ Donanımı" msgid "Integrated Wireless" -msgstr "" +msgstr "Entegre Kablosuz Ağ Donanımı" msgid "Intermediate" -msgstr "" +msgstr "Orta" msgid "Internal Flash" -msgstr "" +msgstr "Dahili Flaş" msgid "Invalid Location" -msgstr "" +msgstr "Geçersiz Konum" #, python-format msgid "Invalid directory selected: %s" -msgstr "" +msgstr "Seçilen klasör geçersiz: %s" msgid "Inversion" -msgstr "Tersine Dön" +msgstr "Tersine çevir" msgid "Invert display" -msgstr "" +msgstr "Ekranı ters çevir" msgid "Italian" -msgstr "İtalya" +msgstr "Italian" msgid "Job View" -msgstr "" +msgstr "Görevleri Göster" #. TRANSLATORS: (aspect ratio policy: display as fullscreen, even if this breaks the aspect) msgid "Just Scale" -msgstr "" +msgstr "Just Scale" msgid "Keyboard Map" -msgstr "Klavye Eşleme" +msgstr "Klavye dizilimi" msgid "Keyboard Setup" -msgstr "Klavye Ayarları" +msgstr "Klavye Kurulumu" msgid "Keymap" -msgstr "Genel Harita" +msgstr "Tuş dizilimi (keymap)" msgid "LAN Adapter" -msgstr "" +msgstr "LAN Donanımı" msgid "LNB" msgstr "LNB" @@ -1444,83 +1490,83 @@ msgid "LOF/L" msgstr "LOF/L" msgid "Language selection" -msgstr "Lisan Seçimi" +msgstr "Dil seçimi" msgid "Language..." -msgstr "" +msgstr "Dil Ayarları (Language)..." msgid "Last speed" -msgstr "" +msgstr "Son hız" msgid "Latitude" -msgstr "Latitude" +msgstr "Enlem" msgid "Leave DVD Player?" -msgstr "" +msgstr "DVD Oynatıcıyı Kapat?" msgid "Left" -msgstr "" +msgstr "Sol" #. TRANSLATORS: (aspect ratio policy: black bars on top/bottom) in doubt, keep english term. msgid "Letterbox" -msgstr "" +msgstr "Letterbox" msgid "Limit east" -msgstr "Doğu Limiti" +msgstr "Doğu limiti" msgid "Limit west" -msgstr "Batı Limiti" +msgstr "Batı limiti" msgid "Limits off" -msgstr "Limit Kapalı" +msgstr "Limitler kapalı" msgid "Limits on" -msgstr "Limit Açık" +msgstr "Limitler açık" msgid "Link:" -msgstr "" +msgstr "Link:" msgid "Linked titles with a DVD menu" msgstr "" msgid "List of Storage Devices" -msgstr "" +msgstr "Depolama Aygıtları" msgid "Lithuanian" -msgstr "" +msgstr "Lithuanian" msgid "Load" -msgstr "" +msgstr "Yükle" msgid "Load Length of Movies in Movielist" msgstr "" msgid "Local Network" -msgstr "" +msgstr "Yerel Ağ" msgid "Location" -msgstr "" +msgstr "Konum" msgid "Lock:" -msgstr "" +msgstr "Kilitli:" msgid "Long Keypress" msgstr "" msgid "Longitude" -msgstr "Longitude" +msgstr "Boylam" msgid "MMC Card" -msgstr "" +msgstr "MMC Kart" msgid "MORE" -msgstr "Dahafazla" +msgstr "DAHA SONRA" msgid "Main menu" -msgstr "Ana Menü" +msgstr "Ana menü" msgid "Mainmenu" -msgstr "Ana Menü" +msgstr "Anamenü" msgid "Make this mark an 'in' point" msgstr "" @@ -1532,28 +1578,28 @@ msgid "Make this mark just a mark" msgstr "" msgid "Manual Scan" -msgstr "Elle Arama" +msgstr "Elle arama" msgid "Manual transponder" -msgstr "El İle Transponder" +msgstr "Transponder bilgilerini elle gir" msgid "Margin after record" -msgstr "Arka Arkaya Kaydet" +msgstr "Kayıt sonrasında marj süresi ekle" msgid "Margin before record (minutes)" -msgstr "" +msgstr "Kayıt başına marj süresi ekle (dakika)" msgid "Media player" -msgstr "Ortam Oynatıcı" +msgstr "Ortam oynatıcı" msgid "MediaPlayer" msgstr "Ortam Oynatıcı" msgid "Medium is not a writeable DVD!" -msgstr "" +msgstr "DVD medyası yazılabilir değil!" msgid "Medium is not empty!" -msgstr "" +msgstr "DVD medyası boş değil!" msgid "Menu" msgstr "Menü" @@ -1562,131 +1608,132 @@ msgid "Message" msgstr "Mesaj" msgid "Mkfs failed" -msgstr "" +msgstr "Mkfs (disk biçimlendirme) başarısız" msgid "Mode" -msgstr "" +msgstr "Mod" msgid "Model: " -msgstr "Model:" +msgstr "Model: " msgid "Modulation" msgstr "Modülasyon" msgid "Modulator" -msgstr "Modulator" +msgstr "Modülatör" msgid "Mon" -msgstr "Pazartesi" +msgstr "Ptesi" msgid "Mon-Fri" -msgstr "Pazartesi-Cuma" +msgstr "Pzt-Cum" msgid "Monday" msgstr "Pazartesi" msgid "Mount failed" -msgstr "" +msgstr "Mount (bağlama) başarısız" msgid "Move Picture in Picture" -msgstr "Resimden Resme hareket Et" +msgstr "Resim içinde resim (PiP)'i taşı" msgid "Move east" -msgstr "Doğuya Dön" +msgstr "Doğuya taşı" msgid "Move west" -msgstr "Batıya Dön" +msgstr "Batıya taşı" msgid "Movielist menu" -msgstr "" +msgstr "Film Listesi Menüsü" msgid "Multi EPG" msgstr "Çoklu EPG" msgid "Multiple service support" -msgstr "" +msgstr "Çoklu kanal desteği" msgid "Multisat" -msgstr "Çoklu Uydu" +msgstr "Çoklu uydu" msgid "Mute" msgstr "Sessiz" msgid "N/A" -msgstr "N/A Tanımsız" +msgstr "N/A" msgid "NEXT" -msgstr "Sonraki" +msgstr "SONRA" msgid "NFI image flashing completed. Press Yellow to Reboot!" msgstr "" +"NFI imaj flaş yazma işlemi tamamlandı. Sarı tuşa basarak yeniden başlatın!" msgid "NOW" -msgstr "Şimdi" +msgstr "ŞİMDİ" msgid "NTSC" -msgstr "" +msgstr "NTSC" msgid "Name" -msgstr "İsim" +msgstr "Ad" msgid "Nameserver" -msgstr "Nameserver" +msgstr "İsim sunucusu (DNS)" #, python-format msgid "Nameserver %d" -msgstr "" +msgstr "İsim sunucusu (DNS) %d" msgid "Nameserver Setup" -msgstr "" +msgstr "İsim sunucusu (DNS) kurulumu" msgid "Nameserver settings" -msgstr "" +msgstr "İsim sunucusu (DNS) ayarları" msgid "Netmask" -msgstr "Alt Ağ Maskesi" +msgstr "Ağ maskesi" msgid "Network Configuration..." -msgstr "" +msgstr "Ağ Konfigürasyonu..." msgid "Network Mount" -msgstr "" +msgstr "Ağ Bağla" msgid "Network SSID" -msgstr "" +msgstr "SSID Ağı" msgid "Network Setup" -msgstr "Ağ Ayarları" +msgstr "Ağ Kurulumu" msgid "Network scan" -msgstr "Ağ Tarama" +msgstr "Ağ arama" msgid "Network setup" -msgstr "Ağ Ayarları" +msgstr "Ağ kurulumu" msgid "Network test" -msgstr "" +msgstr "Ağ testi" msgid "Network test..." -msgstr "" +msgstr "Ağ testi..." msgid "Network..." -msgstr "" +msgstr "Ağ Ayarları..." msgid "Network:" -msgstr "" +msgstr "Ağ:" msgid "NetworkWizard" -msgstr "" +msgstr "Ağ yapılandırma sihirbazı" msgid "New" msgstr "Yeni" msgid "New pin" -msgstr "" +msgstr "Yeni şifre" msgid "New version:" -msgstr "Yeni Versiyon:" +msgstr "Yeni sürüm:" msgid "Next" msgstr "Sonraki" @@ -1695,37 +1742,41 @@ msgid "No" msgstr "Hayır" msgid "No (supported) DVDROM found!" -msgstr "" +msgstr "Desteklenen DVD bulunamadı!" msgid "No 50 Hz, sorry. :(" -msgstr "" +msgstr "50 Hz desteklemiyor, üzgünüm. :(" msgid "No HDD found or HDD not initialized!" -msgstr "HDD Bulunamadı Veya HDD Yok" +msgstr "HDD bulunamadı veya HDD ilişkilendirilemedi!" msgid "No backup needed" -msgstr "Yedeklemeye İhtiyaç Olmadı" +msgstr "Yedekleme gerekmiyor" msgid "" "No data on transponder!\n" "(Timeout reading PAT)" msgstr "" +"Transponder'da yayın yok!\n" +"(PAT okunurken zaman aşımı oluştu)" msgid "No details for this image file" -msgstr "" +msgstr "Bu imaj dosyası için detay bilgisi yok" msgid "No event info found, recording indefinitely." -msgstr "Hiçbir Bilgi Olay Bulunmadı,Süresiz Olarak Kaydet." +msgstr "EPG bilgisi bulunamadı, süresiz kaydediliyor." msgid "No free tuner!" -msgstr "" +msgstr "Boş tuner yok!" msgid "" "No packages were upgraded yet. So you can check your network and try again." msgstr "" +"Hiçbir paket güncellenemedi. Ağ ayarlarınızı kontrol ettikten sonra tekrar " +"deneyin." msgid "No picture on TV? Press EXIT and retry." -msgstr "" +msgstr "TV'nizde resim yoksa EXIT'e basın ve tekrar deneyin." msgid "No positioner capable frontend found." msgstr "" @@ -1734,33 +1785,44 @@ msgid "No satellite frontend found!!" msgstr "" msgid "No tuner is configured for use with a diseqc positioner!" -msgstr "Hiçbir Tuner diseqc pozisyonu için ayarlanmadı !" +msgstr "DiSEqC pozisyoner kullanımı için tuner ayarı yapılmamış." msgid "" "No tuner is enabled!\n" "Please setup your tuner settings before you start a service scan." msgstr "" +"Tuner tanımı yapılmamış!\n" +"Lütfen kanal aramasına başlamadan önce tuner ayarlarınızı yapınız." msgid "No useable USB stick found" -msgstr "" +msgstr "Kullanılabilir USB çubuk bulunamadı" msgid "" "No valid service PIN found!\n" "Do you like to change the service PIN now?\n" "When you say 'No' here the service protection stay disabled!" msgstr "" +"Tanımlanmış kanal şifresi (PIN) bulunamadı!\n" +"Kanal şifresini (PIN) şimdi değiştirmek ister misiniz?\n" +"'Hayır' derseniz kanal koruması devredışı kalacaktır." msgid "" "No valid setup PIN found!\n" "Do you like to change the setup PIN now?\n" "When you say 'No' here the setup protection stay disabled!" msgstr "" +"Tanımlanmış kurulum şifresi (PIN) bulunamadı!\n" +"Kurulum şifresini (PIN) şimdi değiştirmek ister misiniz?\n" +"'Hayır' derseniz kurulum koruması devredışı kalacaktır." msgid "" "No working local networkadapter found.\n" "Please verify that you have attached a network cable and your Network is " "configured correctly." msgstr "" +"Çalışan yerel ağ donanımı bulunamadı.\n" +"Lütfen ağ kablonuzun bağlı olduğundan ve ağ ayarlarınızın doğru " +"yapılandırıldığından emin olun." msgid "" "No working wireless interface found.\n" @@ -1773,37 +1835,42 @@ msgid "" "Please verify that you have attached a compatible WLAN USB Stick and your " "Network is configured correctly." msgstr "" +"Çalışan kablosuz ağ donanımı bulunamadı.\n" +" Uyumlu WLAN USB donanımının takılı olduğundan emin olun ve ağ ayarlarınızın " +"doğru yapılandırıldığından emin olun." msgid "No, but restart from begin" msgstr "" msgid "No, do nothing." -msgstr "Hiçbirşey yapılmadı" +msgstr "Hayır, birşey yapma" msgid "No, just start my dreambox" -msgstr "" +msgstr "Hayır, Dreambox'ımı şimdi başlat" msgid "No, scan later manually" -msgstr "Hayır, Sonra Ara Manuelolarak" +msgstr "Hayır, daha sonra elle tara" msgid "None" -msgstr "Hiçbiri" +msgstr "Yok" #. TRANSLATORS: (aspect ratio policy: display as fullscreen, with stretching the left/right) msgid "Nonlinear" -msgstr "" +msgstr "Doğrusal olmayan" msgid "North" msgstr "Kuzey" msgid "Norwegian" -msgstr "Norveç" +msgstr "Norwegian" #, python-format msgid "" "Not enough diskspace. Please free up some diskspace and try again. (%d MB " "required, %d MB available)" msgstr "" +"Yeterli disk alanı yok. Lütfen gerekli disk alanını açın ve tekrar deneyin. " +"(gereken: %d MB, kullanılabilen: %d MB)" msgid "" "Nothing to scan!\n" @@ -1811,13 +1878,15 @@ msgid "" msgstr "" msgid "Now Playing" -msgstr "" +msgstr "Oynatılıyor" msgid "" "Now please insert the USB stick (minimum size is 64 MB) that you want to " "format and use as .NFI image flasher. Press OK after you've put the stick " "back in." msgstr "" +"Lütfen şimdi .NFI imajını yazmak üzere biçimlendirilmesi gereken USB çubuk " +"takın (en az 64MB kapasiteli). Hazırsanız kumandanızdan OK tuşuna basın." msgid "" "Now, use the contrast setting to turn up the brightness of the background as " @@ -1826,16 +1895,16 @@ msgid "" msgstr "" msgid "OK" -msgstr "OK" +msgstr "Tamam" msgid "OK, guide me through the upgrade process" -msgstr "" +msgstr "Tamam, güncelleme işleminde bana rehberlik yap." msgid "OSD Settings" msgstr "OSD Ayarları" msgid "OSD visibility" -msgstr "" +msgstr "OSD görülebilirliği" msgid "Off" msgstr "Kapalı" @@ -1847,129 +1916,129 @@ msgid "One" msgstr "Bir" msgid "Online-Upgrade" -msgstr "Çevrimiçi-Yükseltme" +msgstr "Online-Güncelle" msgid "Only Free scan" -msgstr "" +msgstr "Yalnızca şifresiz" msgid "Orbital Position" -msgstr "" +msgstr "Yörüngesel (orbital) Pozisyon" msgid "Other..." -msgstr "" +msgstr "Diğer..." msgid "PAL" -msgstr "" +msgstr "PAL" msgid "PIDs" -msgstr "" +msgstr "PID" msgid "Package list update" msgstr "" msgid "Packet management" -msgstr "Paket Yönetimi" +msgstr "Paket yönetimi" msgid "Page" -msgstr "" +msgstr "Sayfa" #. TRANSLATORS: (aspect ratio policy: cropped content on left/right) in doubt, keep english term msgid "Pan&Scan" -msgstr "" +msgstr "Pan&Scan" msgid "Parent Directory" -msgstr "" +msgstr "Üst Klasör" msgid "Parental control" -msgstr "" +msgstr "Ebeveyn kontrolü" msgid "Parental control services Editor" -msgstr "" +msgstr "Ebeveyn korumasındaki kanalları yönet" msgid "Parental control setup" -msgstr "" +msgstr "Ebeveyn kontrolü kurulumu" msgid "Parental control type" -msgstr "" +msgstr "Ebeveyn kontrolü tipi" msgid "Partitioning USB stick..." -msgstr "" +msgstr "USB çubuk bölümlendiriliyor..." msgid "Pause movie at end" msgstr "" msgid "PiPSetup" -msgstr "PiP Ayarları" +msgstr "PiP Kurulumu" #. TRANSLATORS: (aspect ratio policy: black bars on left/right) in doubt, keep english term. msgid "Pillarbox" -msgstr "" +msgstr "Pillarbox" msgid "Pilot" -msgstr "" +msgstr "Pilot" msgid "Pin code needed" -msgstr "" +msgstr "Şifre gerekiyor" msgid "Play" -msgstr "" +msgstr "Oynat" msgid "Play Audio-CD..." -msgstr "" +msgstr "Ses CD'si (Audio CD) oynat..." msgid "Play recorded movies..." -msgstr "Kayıtdaki Filmleri Oynat..." +msgstr "Kayıtlı fimleri oynat..." msgid "Please Reboot" -msgstr "" +msgstr "Lütfen yeniden başlatın" msgid "Please Select Medium to be Scanned" -msgstr "" +msgstr "Lütfen bakmak istediğiniz DVD medyasını seçiniz" msgid "Please change recording endtime" -msgstr "" +msgstr "Lütfen kayıt bitiş saatini değiştirin" msgid "Please check your network settings!" -msgstr "" +msgstr "Lütfen ağ ayarlarını kontrol edin!" msgid "Please choose .NFI image file from feed server to download" msgstr "" msgid "Please choose an extension..." -msgstr "Lütfen Bir İlave Seçin..." +msgstr "Lütfen kullanmak istediğiniz eklentiyi seçin..." msgid "Please choose he package..." -msgstr "" +msgstr "Lütfen paket seçin..." msgid "Please choose the default services lists you want to install." -msgstr "" +msgstr "Lütfen yüklemek istediğiniz öntanımlı kanal listelerini seçin." msgid "Please do not change any values unless you know what you are doing!" -msgstr "" +msgstr "Lütfen ne yaptığınızı bilmiyorsanız hiçbir değeri değiştirmeyin!" msgid "Please enter a name for the new bouquet" -msgstr "Lütfen Yani Bukete Bir İsim Verin" +msgstr "Yeni buket için isim giriniz" msgid "Please enter a name for the new marker" -msgstr "" +msgstr "Yeni işaretleyici için isim giriniz" msgid "Please enter a new filename" -msgstr "" +msgstr "Lütfen yeni dosya adını girin" msgid "Please enter filename (empty = use current date)" -msgstr "" +msgstr "Lütfen dosya adı giriniz (boş = geçerli tarih)" msgid "Please enter name of the new directory" -msgstr "" +msgstr "Lütfen klasör için bir ad giriniz" msgid "Please enter the correct pin code" -msgstr "" +msgstr "Lütfen doğru şifreyi giriniz" msgid "Please enter the old pin code" -msgstr "" +msgstr "Lütfen eski şifreyi giriniz" msgid "Please follow the instructions on the TV" -msgstr "" +msgstr "Lütfen Televizyonunuzdaki yönlendirmeleri takip edin." msgid "" "Please note that the previously selected media could not be accessed and " @@ -1977,49 +2046,52 @@ msgid "" msgstr "" msgid "Please press OK to continue." -msgstr "" +msgstr "Devam etmek için lütfen OK'a basın" msgid "Please press OK!" -msgstr "" +msgstr "Lütfen OK! e basın" msgid "Please select .NFI flash image file from medium" msgstr "" msgid "Please select a playlist to delete..." -msgstr "" +msgstr "Seçili oynatma listesini sil..." msgid "Please select a playlist..." -msgstr "" +msgstr "Lütfen bir oynatma listesi seçin..." msgid "Please select a subservice to record..." -msgstr "Lütfen alt servis kayıtı için seçin" +msgstr "" msgid "Please select a subservice..." -msgstr "Alt Servis Seçin Lütfen..." +msgstr "" msgid "Please select keyword to filter..." -msgstr "" +msgstr "Lütfen filtre için anahtar kelime girin..." msgid "Please select target directory or medium" -msgstr "" +msgstr "Lütfen hedef klasörü veya medyayı seçin" msgid "Please select the movie path..." msgstr "" msgid "Please set up tuner B" -msgstr "Lütfen Ayarla tuner B" +msgstr "Lütfen tuner B'yi ayarlayın" msgid "Please set up tuner C" -msgstr "" +msgstr "Lütfen tuner C'yi ayarlayın" msgid "Please set up tuner D" -msgstr "" +msgstr "Lütfen tuner D'yi ayarlayın" msgid "" "Please use direction keys to move the PiP window.\n" "Press Bouquet +/- to resize the window.\n" "Press OK to go back to the TV mode or EXIT to cancel the moving." msgstr "" +"Lütfen yönlendirme tuşlarını kullanarak PiP ekranını taşıyın.\n" +"PiP penceresini boyutlandırmak için Buket +/- tuşlarını kullanın.\n" +"TV moduna dönmek için OK'a veya taşımayı iptal etmek için EXIT tuşuna basın." msgid "" "Please use the UP and DOWN keys to select your language. Afterwards press " @@ -2027,25 +2099,25 @@ msgid "" msgstr "" msgid "Please wait for md5 signature verification..." -msgstr "" +msgstr "md5 imza doğrulamasının yapılabilmesi için lütfen bekleyin..." msgid "Please wait... Loading list..." -msgstr "Liste Yükleniyor... Lütfen Bekleyin..." +msgstr "Lütfen bekleyiniz... Liste yükleniyor..." msgid "Plugin browser" -msgstr "Plugin Gözlem" +msgstr "Program listesi" msgid "Plugins" -msgstr "" +msgstr "Programlar" msgid "Polarity" -msgstr "Kutupluk" +msgstr "Polarite" msgid "Polarization" -msgstr "Poloarizasyon" +msgstr "Polarizasyon" msgid "Polish" -msgstr "" +msgstr "Polish" msgid "Port A" msgstr "Port A" @@ -2060,61 +2132,61 @@ msgid "Port D" msgstr "Port D" msgid "Portuguese" -msgstr "" +msgstr "Portuguese" msgid "Positioner" msgstr "Pozisyoner" msgid "Positioner fine movement" -msgstr "Pozisyoner İnce Hareket" +msgstr "" msgid "Positioner movement" -msgstr "Pozisyoneri Hareket Ettir" +msgstr "Pozisyoner hareketi" msgid "Positioner setup" -msgstr "" +msgstr "Pozisyoner ayarı" msgid "Positioner storage" -msgstr "Pozisyoneri Hafızaya Al" +msgstr "" msgid "Power threshold in mA" msgstr "" msgid "Predefined transponder" -msgstr "" +msgstr "Önceden tanımlanmış transponder" msgid "Preparing... Please wait" -msgstr "" +msgstr "Hazırlanıyor... Lütfen bekleyin" msgid "Press OK on your remote control to continue." -msgstr "" +msgstr "Devam etmek için kumandanızın OK tuşuna basın." msgid "Press OK to activate the settings." -msgstr "Ayarları Etkinleştimek için OK Basın" +msgstr "Ayarlarınızı etkinleştirmek için OK'a basın." msgid "Press OK to edit the settings." msgstr "" msgid "Press OK to scan" -msgstr "Ok Bas Ve Tarama yap" +msgstr "Tarama için OK'a basın" msgid "Press OK to start the scan" -msgstr "Ok Tuşuna Bas Aramayı Başlat" +msgstr "Taramayı başlatmak için OK'a basın" msgid "Prev" msgstr "Önceki" msgid "Preview menu" -msgstr "" +msgstr "Önizleme menüsü" msgid "Primary DNS" -msgstr "" +msgstr "Birincil DNS" msgid "Protect services" -msgstr "" +msgstr "Kanallar korunsun mu?" msgid "Protect setup" -msgstr "" +msgstr "Koruma ayarları" msgid "Provider" msgstr "Yayıncı" @@ -2123,161 +2195,164 @@ msgid "Provider to scan" msgstr "" msgid "Providers" -msgstr "Yayıncılar" +msgstr "Sağlayıcılar" msgid "Quickzap" -msgstr "" +msgstr "Hızlızap" msgid "RC Menu" -msgstr "RC Menü" +msgstr "UK Menüsü" msgid "RF output" -msgstr "" +msgstr "RF çıkışı" msgid "RGB" -msgstr "" +msgstr "RGB" msgid "RSS Feed URI" -msgstr "" +msgstr "RSS Beslemesi Adresi" msgid "Radio" -msgstr "" +msgstr "raydo" msgid "Ram Disk" -msgstr "" +msgstr "Ram Disk" msgid "Really close without saving settings?" -msgstr "" +msgstr "Ayarları kaydetmeden çıkmak istediğinizden emin misiniz?" msgid "Really delete done timers?" -msgstr "Zamanlamayı silmekte eminmisin ?" +msgstr "" +"Tamamlanan zamanlayıcıları silmek istediğinizden gerçekten emin misiniz?" msgid "Really delete this timer?" -msgstr "" +msgstr "Bu zamanlayıcıyı silmek istediğinizden gerçekten emin misiniz?" msgid "Really exit the subservices quickzap?" msgstr "" msgid "Really reboot now?" -msgstr "" +msgstr "Yeniden başlatılmasını istiyor musunuz?" msgid "Really restart now?" -msgstr "" +msgstr "Yeniden başlatmak istiyor musunuz?" msgid "Really shutdown now?" -msgstr "" +msgstr "Şimdi yeniden açmak istediğinize emin misiniz?" msgid "Reboot" -msgstr "" +msgstr "Yeniden aç" msgid "Reception Settings" -msgstr "" +msgstr "Ekipman Ayarları" msgid "Record" msgstr "Kayıt" msgid "Recorded files..." -msgstr "" +msgstr "Kaydedilmiş dosyalar..." msgid "Recording" -msgstr "Kaydetme" +msgstr "Kaydediliyor" msgid "Recording(s) are in progress or coming up in few seconds!" msgstr "" msgid "Recordings always have priority" -msgstr "" +msgstr "Kayıt işlemine öncelik ver" msgid "Reenter new pin" -msgstr "" +msgstr "Yeni şifreyi yeniden girin" msgid "Refresh Rate" -msgstr "" +msgstr "Yenileme Hızı" msgid "Refresh rate selection." -msgstr "" +msgstr "Tazeleme hızı seçimi." msgid "Remounting stick partition..." -msgstr "" +msgstr "USB çubuk bölümü (partition) yeniden yapılandırılıyor..." msgid "Remove Bookmark" -msgstr "" +msgstr "Yer imini Sil" msgid "Remove Plugins" -msgstr "Plugins Sil" +msgstr "Program Kaldır" msgid "Remove a mark" -msgstr "" +msgstr "İşaret Kaldır" msgid "Remove currently selected title" -msgstr "" +msgstr "Seçilen geçerli başlığı sil" msgid "Remove plugins" -msgstr "Plugins Sil" +msgstr "Programları kaldır" msgid "Remove the broken .NFI file?" -msgstr "" +msgstr "Bozuk .NFI dosyası silinsin mi?" msgid "Remove the incomplete .NFI file?" -msgstr "" +msgstr "Eksik .NFI dosyası silinsin mi?" msgid "Remove title" -msgstr "" +msgstr "Başlığı sil" #, python-format msgid "Removing directory %s failed. (Maybe not empty.)" -msgstr "" +msgstr "%s klasörü silinemedi. (Klasör boş olmayabilir.)" msgid "Rename" -msgstr "" +msgstr "Ad değiştir " msgid "Repeat" -msgstr "Tekrar" +msgstr "Tekrarla" msgid "Repeat Type" -msgstr "Tekrarlanan Tür" +msgstr "Tekrarla" msgid "Repeating event currently recording... What do you want to do?" msgstr "" +"Tekrarlama görevi verilmiş kayıt işlemi yapılıyor. Ne yapmak istersiniz?" msgid "Repeats" -msgstr "" +msgstr "Tekrarlama aralığı" msgid "Reset" -msgstr "Yeniden Başlat" +msgstr "Sıfırla" msgid "Resolution" -msgstr "" +msgstr "Çözünürlük" msgid "Restart" msgstr "Yeniden başlat" msgid "Restart GUI" -msgstr "" +msgstr "GUI'yi yeniden başlat" msgid "Restart GUI now?" -msgstr "" +msgstr "GUI'yi yeniden başlatmak istiyor musunuz?" msgid "Restart network" -msgstr "" +msgstr "Ağı yeniden başlat" msgid "Restart test" -msgstr "" +msgstr "Test'i yenile" msgid "Restart your network connection and interfaces.\n" -msgstr "" +msgstr "Ağ bağlantısını ve ağ arayüzlerini yeniden başlat.\n" msgid "Restore" -msgstr "Geri Yükle" +msgstr "Geri yükle" msgid "" "Restoring the settings is done. Please press OK to activate the restored " "settings now." msgstr "" -"Geri Yükleme Tamamlandı Lütfen OK Tuşuna Basarak Ayarları Aktifleştirin Şimdi" +"Ayarların geri yüklemesi tamamlandı. Geri yüklenen ayarları aktif hale " +"getirmek için OK tuşuna basınız." msgid "Resume from last position" -msgstr "" +msgstr "Kaldığı yerden devam et" #. TRANSLATORS: The string "Resuming playback" flashes for a moment #. TRANSLATORS: at the start of a movie, when the user has selected @@ -2287,160 +2362,161 @@ msgstr "" #. TRANSLATORS: (Some translators seem to have interpreted it as a #. TRANSLATORS: question or a choice, but it is a statement.) msgid "Resuming playback" -msgstr "" +msgstr "Oynatmaya devam ediliyor" msgid "Return to file browser" -msgstr "" +msgstr "Dosya yöneticisine geri dön" msgid "Return to movie list" -msgstr "" +msgstr "Film listesine dön" msgid "Return to previous service" -msgstr "" +msgstr "Önceki kanala dön" msgid "Rewind speeds" -msgstr "" +msgstr "Geri sarma hızları" msgid "Right" -msgstr "" +msgstr "Sağ" msgid "Rolloff" msgstr "" msgid "Rotor turning speed" -msgstr "" +msgstr "Motor dönüş devri" msgid "Running" -msgstr "" +msgstr "Çalıştırılıyor" msgid "Russian" -msgstr "" +msgstr "Russian" msgid "S-Video" -msgstr "" +msgstr "S-Video" msgid "SNR" -msgstr "" +msgstr "SNR" msgid "SNR:" -msgstr "Sinyal:" +msgstr "SNR:" msgid "Sat" -msgstr "Uydu" +msgstr "Ctesi" msgid "Sat / Dish Setup" -msgstr "Uydu /Çanak Ayarlayıcı" +msgstr "Uydu / Çanak Anten Kurulumu" msgid "Satellite" msgstr "Uydu" msgid "Satellite Equipment Setup" -msgstr "" +msgstr "Uydu Ekipmanı Kurulumu" msgid "Satellites" msgstr "Uydular" msgid "Satfinder" -msgstr "" +msgstr "Uydu bulucu" msgid "Sats" -msgstr "" +msgstr "Uydular" msgid "Saturday" msgstr "Cumartesi" msgid "Save" -msgstr "" +msgstr "Kaydet" msgid "Save Playlist" -msgstr "" +msgstr "Oynatma listesini Kaydet" msgid "Scaling Mode" -msgstr "" +msgstr "Ölçeklendirme Modu" msgid "Scan " -msgstr "" +msgstr "Tara" msgid "Scan QAM128" -msgstr "" +msgstr "QAM128'i tara" msgid "Scan QAM16" -msgstr "" +msgstr "QAM16'yı tara" msgid "Scan QAM256" -msgstr "" +msgstr "QAM256'yı tara" msgid "Scan QAM32" -msgstr "" +msgstr "QAM32'yi tara" msgid "Scan QAM64" -msgstr "" +msgstr "QAM64'ü tara" msgid "Scan SR6875" -msgstr "" +msgstr "SR6875'i tara" msgid "Scan SR6900" -msgstr "" +msgstr "SR6900'ü tara" msgid "Scan Wireless Networks" -msgstr "" +msgstr "Kablosuz Ağları Ara" msgid "Scan additional SR" msgstr "" msgid "Scan band EU HYPER" -msgstr "" +msgstr "EU HYPER bantını tara" msgid "Scan band EU MID" -msgstr "" +msgstr "EU MID bantını tara" msgid "Scan band EU SUPER" -msgstr "" +msgstr "EU SUPER bantını tara" msgid "Scan band EU UHF IV" -msgstr "" +msgstr "EU UHF IV bantını tara" msgid "Scan band EU UHF V" -msgstr "" +msgstr "EU UHF V bantını tara" msgid "Scan band EU VHF I" -msgstr "" +msgstr "EU VHF I bantını tara" msgid "Scan band EU VHF III" -msgstr "" +msgstr "EU VHF III bantını tara" msgid "Scan band US HIGH" -msgstr "" +msgstr "US HIGH bantını tara" msgid "Scan band US HYPER" -msgstr "" +msgstr "US HYPER bantını tara" msgid "Scan band US LOW" -msgstr "" +msgstr "US LOW bantını tara" msgid "Scan band US MID" -msgstr "" +msgstr "US MID bantını tara" msgid "Scan band US SUPER" -msgstr "" +msgstr "US SUPER bantını tara" msgid "" "Scan your network for wireless Access Points and connect to them using your " "WLAN USB Stick\n" msgstr "" +"Kablosuz ağ erişim noktalarını arayın ve WLAN USB donanımınızla bağlanın.\n" msgid "" "Scans default lamedbs sorted by satellite with a connected dish positioner" msgstr "" msgid "Search east" -msgstr "Doğuyu Raraştır" +msgstr "Doğu'yu ara" msgid "Search west" -msgstr "Batıyı Araştır" +msgstr "Batı'yı ara" msgid "Secondary DNS" -msgstr "" +msgstr "İkincil DNS" msgid "Seek" msgstr "Ara" @@ -2449,34 +2525,34 @@ msgid "Select HDD" msgstr "HDD Seç" msgid "Select Location" -msgstr "" +msgstr "Konum Seç" msgid "Select Network Adapter" -msgstr "" +msgstr "Ağ Donanımını Seç" msgid "Select a movie" -msgstr "Bir Film Seç" +msgstr "Bir film seçin" msgid "Select audio mode" -msgstr "" +msgstr "Ses modunu seç" msgid "Select audio track" -msgstr "Ses İzlerini Seç" +msgstr "Kullanmak istediğiniz ses izini seçin" msgid "Select channel to record from" -msgstr "Seçili Kanalı Kaydet" +msgstr "Kaydın yapılacağı kanalı seçin" msgid "Select image" -msgstr "" +msgstr "İmajı seçin" msgid "Select refresh rate" -msgstr "" +msgstr "Tazeleme hızı seçin" msgid "Select video input" -msgstr "" +msgstr "Görüntü girişini seç" msgid "Select video mode" -msgstr "" +msgstr "Görüntü modunu seç" msgid "Selected source image" msgstr "" @@ -2485,94 +2561,100 @@ msgid "Seperate titles with a main menu" msgstr "" msgid "Sequence repeat" -msgstr "Sırayı Tekrarla" +msgstr "Sıralama tekrarı" msgid "Service" -msgstr "Servis" +msgstr "Kanal" msgid "Service Scan" -msgstr "Servis Arama" +msgstr "Kanal Arama" msgid "Service Searching" -msgstr "Servis Arayıcı" +msgstr "Uydu Yapılandırma" msgid "Service has been added to the favourites." -msgstr "" +msgstr "Kanal favorilerinize eklendi." msgid "Service has been added to the selected bouquet." -msgstr "" +msgstr "Kanal seçilen bukete eklendi." msgid "" "Service invalid!\n" "(Timeout reading PMT)" msgstr "" +"Kanal geçersiz!\n" +"(PMT okumasında zaman aşımı oldu)" msgid "" "Service not found!\n" "(SID not found in PAT)" msgstr "" +"Kanal bulunamadı!\n" +"(SID, PAT içerisinde bulunamadı)" msgid "Service scan" -msgstr "Servis Taram" +msgstr "Kanal arama" msgid "" "Service unavailable!\n" "Check tuner configuration!" msgstr "" +"Kanal kullanılamaz!\n" +"Tuner ayarlarınızı kontrol edin!" msgid "Serviceinfo" -msgstr "Servis Bilgisi" +msgstr "Kanal bilgisi" msgid "Services" -msgstr "Servis" +msgstr "Kanallar" msgid "Set as default Interface" -msgstr "" +msgstr "Varsayılan arayüz olarak ayarla" msgid "Set limits" -msgstr "Limit Sabitle" +msgstr "Limitleri belirle" msgid "Settings" -msgstr "Ayarlar" +msgstr "Ayarları" msgid "Setup" msgstr "Kurulum" msgid "Setup Mode" -msgstr "" +msgstr "Kurulum Modu" msgid "Show Info" -msgstr "" +msgstr "Bilgiyi Göster" msgid "Show WLAN Status" -msgstr "" +msgstr "WLAN Durumunu Göster" msgid "Show blinking clock in display during recording" msgstr "" msgid "Show infobar on channel change" -msgstr "" +msgstr "Kanal değiştirildiğinde bilgi çubuğunu göster" msgid "Show infobar on event change" -msgstr "" +msgstr "EPG programı değişikliklerinde bilgi barını göster" msgid "Show infobar on skip forward/backward" -msgstr "" +msgstr "İleri/geri sardırma yapıldığında bilgi çubuğunu göster" msgid "Show positioner movement" -msgstr "" +msgstr "Pozisyoner haraketini göster" msgid "Show services beginning with" msgstr "" msgid "Show the radio player..." -msgstr "Radyo Playeri Göster" +msgstr "Radyo oynatıcıyı göster..." msgid "Show the tv player..." -msgstr "" +msgstr "TV oynatıcıyı göster..." msgid "Shows the state of your wireless LAN connection.\n" -msgstr "" +msgstr "Kablosuz Ağ bağlantı durumunu göster.\n" msgid "Shutdown Dreambox after" msgstr "" @@ -2581,10 +2663,10 @@ msgid "Similar" msgstr "Benzer" msgid "Similar broadcasts:" -msgstr "Aynı yayınlamak" +msgstr "Benzer yayınlar:" msgid "Simple" -msgstr "Sade" +msgstr "Basit" msgid "Single" msgstr "Tek" @@ -2593,109 +2675,109 @@ msgid "Single EPG" msgstr "Tekli EPG" msgid "Single satellite" -msgstr "Tek Uydu" +msgstr "Tek uydu" msgid "Single transponder" -msgstr "Tek Transponder" +msgstr "Tek transponder" msgid "Singlestep (GOP)" msgstr "" msgid "Skin..." -msgstr "" +msgstr "Arayüz..." msgid "Sleep Timer" -msgstr "" +msgstr "Uyku Zamanlayıcı" msgid "Sleep timer action:" -msgstr "" +msgstr "Uyku zamanlayıcı eylemi:" msgid "Slideshow Interval (sec.)" -msgstr "" +msgstr "Slideshow geçiş aralığı (saniye)" #, python-format msgid "Slot %d" -msgstr "" +msgstr "Yuva (slot) %d" msgid "Slow" -msgstr "" +msgstr "Yavaş" msgid "Slow Motion speeds" -msgstr "" +msgstr "Ağır Çekim hızları" msgid "Some plugins are not available:\n" -msgstr "" +msgstr "Programların bazıları kullanılamaz:\n" msgid "Somewhere else" -msgstr "Başka Bir Yer" +msgstr "" msgid "" "Sorry your Backup destination does not exist\n" "\n" "Please choose an other one." msgstr "" -"Üzgünüz Yedek Alınacak Yer Bulunamadı\n" +"Yedek almak istediğiniz hedef bulunamadı\n" "\n" -"Lütfen Seçin." +"Lütfen başka bir tane seçin." #. TRANSLATORS: This must fit into the header button in the EPG-List msgid "Sort A-Z" -msgstr "" +msgstr "A-Z ye Sırala" #. TRANSLATORS: This must fit into the header button in the EPG-List msgid "Sort Time" -msgstr "" +msgstr "Zamana göre sırala" msgid "Sound" msgstr "Ses" msgid "Soundcarrier" -msgstr "Ses Taşıyıcı" +msgstr "" msgid "South" msgstr "Güney" msgid "Spanish" -msgstr "İspanyolca" +msgstr "Spanish" msgid "Standby" -msgstr "Uyku Modu" +msgstr "Uyku modu" msgid "Standby / Restart" -msgstr "Bekleme / yenidenbaşlat" +msgstr "Kapatma Menüsü" msgid "Start" -msgstr "Başla" +msgstr "Başlama zamanı" msgid "Start from the beginning" -msgstr "" +msgstr "En baştan başla" msgid "Start recording?" -msgstr "Kaydı Başlat" +msgstr "Kayıt başlatılsın mı?" msgid "Start test" -msgstr "" +msgstr "Testi başlat" msgid "StartTime" -msgstr "Başlama Zamanı" +msgstr "Başlama Saati" msgid "Starting on" -msgstr "" +msgstr "Başlangıç" msgid "Step east" -msgstr "Doğu Adımı" +msgstr "Doğu adımı" msgid "Step west" -msgstr "Batı Adımı" +msgstr "Batı adımı" msgid "Stereo" -msgstr "" +msgstr "Stereo" msgid "Stop" -msgstr "Dur" +msgstr "Durdur" msgid "Stop Timeshift?" -msgstr "Zamandonduru . Durdur?" +msgstr "Timeshift i durdur?" msgid "Stop current event and disable coming events" msgstr "" @@ -2704,31 +2786,31 @@ msgid "Stop current event but not coming events" msgstr "" msgid "Stop playing this movie?" -msgstr "Bu Filmi Oynamasını Durdur?" +msgstr "Filmi durdurmak istiyor musunuz?" msgid "Stop test" -msgstr "" +msgstr "Testi durdur" msgid "Store position" -msgstr "Pozisyonu Sakla" +msgstr "Pozisyonu kaydet" msgid "Stored position" -msgstr "Pozisyonu saklandı" +msgstr "Kaydedilen pozisyonlar" msgid "Subservice list..." -msgstr "Alt Servis Listesi..." +msgstr "" msgid "Subservices" -msgstr "Alt servisler" +msgstr "" msgid "Subtitle selection" -msgstr "" +msgstr "Altyazı seçimi" msgid "Subtitles" -msgstr "" +msgstr "Altyazılar" msgid "Sun" -msgstr "güneş" +msgstr "Pazar" msgid "Sunday" msgstr "Pazar" @@ -2737,54 +2819,55 @@ msgid "Swap Services" msgstr "" msgid "Swedish" -msgstr "İsveç" +msgstr "Swedish" msgid "Switch to next subservice" -msgstr "Alt Servisi Değiştir" +msgstr "" msgid "Switch to previous subservice" -msgstr "Önceki Alt Servisle Değiştir" +msgstr "" msgid "Symbol Rate" msgstr "Sembol Oranı" msgid "Symbolrate" -msgstr "" +msgstr "Sembol oranı" msgid "System" msgstr "Sistem" #. TRANSLATORS: Add here whatever should be shown in the "translator" about screen, up to 6 lines (use \n for newline) msgid "TRANSLATOR_INFO" +msgstr "ÇEVİRMEN HAKKINDA" + +msgid "TS file is too large for ISO9660 level 1!" msgstr "" msgid "TV System" msgstr "TV Sistemi" msgid "Table of content for collection" -msgstr "" +msgstr "Kolleksiyonun içerik listesi (TOC)" msgid "Terrestrial" msgstr "Karasal" msgid "Terrestrial provider" -msgstr "Karasal Yayıncı" +msgstr "Karasal servis sağlayıcı" msgid "Test mode" -msgstr "Tset Kipi" +msgstr "Test modu" msgid "Test the network configuration of your Dreambox.\n" -msgstr "" +msgstr "Dreambox'ınızın ağ yapılandırmasını test edin.\n" msgid "Test-Messagebox?" -msgstr "" +msgstr "Posta kutusu test edilsin mi?" msgid "" "Thank you for using the wizard. Your box is now ready to use.\n" "Please press OK to start using your Dreambox." msgstr "" -"Sihirbazı Kullandığınız İçin Teşekkürler Box Kullanıma Hazır.\n" -"Lütfen OK Butonuna Basarak Başlatın Dreambox u." msgid "" "The .NFI Image flasher USB stick is now ready to use. Please download an ." @@ -2798,9 +2881,12 @@ msgid "" "create a Dreambox format data DVD (which will not play in stand-alone DVD " "players) instead?" msgstr "" +"Standart DVD biçimi H.264 (HDTV) video biçimini desteklemez. Bunun yerine " +"Dreambox'ın DVD biçiminde (standart DVD oynatıcılarda oynatamazsınız) " +"oluşturmak ister misiniz?" msgid "The backup failed. Please choose a different backup location." -msgstr "Yedek Başarısız Oldu. Lütfen Konumu Farklı Yedek Seçin." +msgstr "Yedek alınamadı. Lütfen başka bir yedekleme konumu seçin." #, python-format msgid "" @@ -2816,102 +2902,123 @@ msgid "" "You can now configure the screen by displaying some test pictures. Do you " "want to do that now?" msgstr "" +"Görüntü girişi ayarı tamamlandı.\n" +"Şimdi ekranınızı, size gösterilecek bazı test resimleri ile " +"ayarlayabilirsiniz. Bunu şimdi yapmak istiyor musunuz?" msgid "The installation of the default services lists is finished." -msgstr "" +msgstr "Öntanımlı kanal listesi kurulumu tamamlandı." msgid "" "The installation of the default settings is finished. You can now continue " "configuring your Dreambox by pressing the OK button on the remote control." msgstr "" +"Varsayılan kanal listesi kurulumu tamamlandı. OK tuşuna bastıktan sonra " +"Dreambox'ınızı yapılandırmaya devam edebilirsiniz." msgid "" "The md5sum validation failed, the file may be corrupted! Are you sure that " "you want to burn this image to flash memory? You are doing this at your own " "risk!" msgstr "" +"md5sum imza doğrulama başarısız, dosya bozuk olabilir! Bu imajı flaş belleğe " +"yazmak istediğinizden emin misiniz? Onaylamanız halinde risk size aittir!" msgid "" "The md5sum validation failed, the file may be downloaded incompletely or be " "corrupted!" msgstr "" +"md5sum imza doğrulama başarısız, dosya tam indirilmemiş olabilir veya bozuk " +"olabilir!" msgid "The package doesn't contain anything." -msgstr "" +msgstr "Bu paket herhangi birşey içermiyor." #, python-format msgid "The path %s already exists." -msgstr "" +msgstr "%s yolu zaten var." msgid "The pin code has been changed successfully." -msgstr "" +msgstr "Şifre başarıyla değiştirildi." msgid "The pin code you entered is wrong." -msgstr "" +msgstr "Girdiğiniz şifre yanlış." msgid "The pin codes you entered are different." -msgstr "" +msgstr "Girdiğiniz şifreler birbiriyle uyuşmuyor." msgid "The sleep timer has been activated." -msgstr "" +msgstr "Uyku zamanlayıcı aktif edildi." msgid "The sleep timer has been disabled." -msgstr "" +msgstr "Uyku zamanlayıcı kapatıldı." msgid "The timer file (timers.xml) is corrupt and could not be loaded." -msgstr "" +msgstr "Zamanlayıcı dosyası (timers.xml) bozuk ve yüklenemiyor." msgid "" "The wireless LAN plugin is not installed!\n" "Please install it." msgstr "" +"Kablosuz ağ (WLAN) programı yüklenmemiş!\n" +"Lütfen yükleyin." msgid "" "The wizard can backup your current settings. Do you want to do a backup now?" msgstr "" +"Bu sihirbaz geçerli ayarlarınızın yedeğini alacaktır. Şimdi yedek almak " +"istiyor musunuz?" msgid "The wizard is finished now." -msgstr "Sihirbaz Şimdi Bitti." +msgstr "Sihirbaz tamamlandı." msgid "There are no default services lists in your image." -msgstr "" +msgstr "Kurulu imajda kayıtlı öntanımlı kanal listesi yok." msgid "There are no default settings in your image." -msgstr "" +msgstr "Kurulu imajda kayıtlı varsayılan ayar yok." msgid "" "There might not be enough Space on the selected Partition.\n" "Do you really want to continue?" msgstr "" +"Seçtiğiniz disk bölümü (partition) yeterli boş alana sahip olmayabilir.\n" +"Devam etmek istediğinizden emin misiniz?" #, python-format msgid "This .NFI file does not contain a valid %s image!" -msgstr "" +msgstr ".NFI dosyası geçeli bir %s imaj içermiyor!" msgid "" "This .NFI file does not have a md5sum signature and is not guaranteed to " "work. Do you really want to burn this image to flash memory?" msgstr "" +".NFI dosyası md5sum imzasına sahip değil ve çalışacağı garanti edilemiyor. " +"Bu imajı flaş belleğe yazmak istediğinizden emin misiniz?" msgid "" "This .NFI file has a valid md5 signature. Continue programming this image to " "flash memory?" msgstr "" +".NFI dosyası md5sum imzası doğrulandı. Bu imajı, flaş belleğe programlamaya " +"devam etmek istiyor musunuz?" msgid "" "This DVD RW medium is already formatted - reformatting will erase all " "content on the disc." msgstr "" +"DVD-RW medyası biçimlendirildi - yeniden biçimlendirme tüm disk içeriğini " +"silecektir." #, python-format msgid "This Dreambox can't decode %s video streams!" -msgstr "" +msgstr "Dreambox %s video dosyalarını gösteremez!" msgid "This is step number 2." -msgstr "2 numaralı adım" +msgstr "2 numaralı adım." msgid "This is unsupported at the moment." -msgstr "Şuan Desteklenmemiş ." +msgstr "Bu işlem şuan desteklenmiyor." msgid "" "This test checks for configured Nameservers.\n" @@ -2920,6 +3027,12 @@ msgid "" "- if you configured your Nameservers manually please verify your entries in " "the \"Nameserver\" Configuration" msgstr "" +"Bu işlem yapılandırdığınız isim sunucularını (DNS) test eder.\n" +"\"doğrulanamadı\" mesajı alırsanız:\n" +"- DHCP servisini sağlayan donanımınızı, kabloyu ve ağ donanımınızı kontrol " +"edin\n" +"- İsim sunucuyu (DNS) elle ayarladıysanız \"İsim sunucu (DNS)\" " +"yapılandırmanızı gözden geçirin" msgid "" "This test checks whether a network cable is connected to your LAN-Adapter.\n" @@ -2927,6 +3040,10 @@ msgid "" "- verify that a network cable is attached\n" "- verify that the cable is not broken" msgstr "" +"Bu işlem ağ bağlantınızı test eder.\n" +"Eğer \"bağlı değil\" mesajı alıyorsanız:\n" +"- ağ kablonuzun bağlı olup olmadığını kontrol edin\n" +"- kablonuzun hasarsız olduğundan emin olun" msgid "" "This test checks whether a valid IP Address is found for your LAN Adapter.\n" @@ -2934,6 +3051,11 @@ msgid "" "- no valid IP Address was found\n" "- please check your DHCP, cabling and adapter setup" msgstr "" +"Bu işlem yerel ağ donanımınızın IP adresinin geçerliliğini test edecektir.\n" +"\"doğrulanamadı\" mesajı alırsanız:\n" +"- IP adresi hatalı/geçersizdir\n" +"- DHCP servisini sağlayan donanımınızı, kabloyu ve ağ donanımınızın " +"yapılandırmasını kontrol edin" msgid "" "This test checks whether your LAN Adapter is set up for automatic IP Address " @@ -2945,74 +3067,84 @@ msgid "" "If you get an \"enabeld\" message:\n" "-verify that you have a configured and working DHCP Server in your network." msgstr "" +"Bu işlem ağ bağlantınızın IP adresini DHCP servisinden alıp almadığını test " +"eder.\n" +"Eğer \"devre dışı\" mesajı alıyorsanız:\n" +"- Yerel ağ donanım yapılandırmanızda IP adresini elle girmiş olabilirsiniz.\n" +"- Ağ donanımıAdaptör yapılandırmasında kullandığınız IP bilgisini " +"doğrulayın.\n" +"Eğer \"açık\" mesajı alıyorsanız:\n" +"- Sağlıklı çalışan bir DHCP sunucusu kullandığınızdan emin olun." msgid "This test detects your configured LAN-Adapter." -msgstr "" +msgstr "Bu işlem tanımlanan Ağ donanımınızı test eder." msgid "Three" msgstr "Üç" msgid "Threshold" -msgstr "Başlangıç" +msgstr "Eşik" msgid "Thu" -msgstr "Perşembe" +msgstr "Perş" msgid "Thursday" msgstr "Perşembe" msgid "Time" -msgstr "Zaman" +msgstr "Süre" msgid "Time/Date Input" -msgstr "Saat/Tarih Girin" +msgstr "Tarih/Saat Girişi" msgid "Timer" -msgstr "Zaman" +msgstr "Zamanlayıcı" msgid "Timer Edit" -msgstr "Zamanı Yaz" +msgstr "Zamanlayıcı Düzenle" msgid "Timer Editor" -msgstr "Zaman Düzenleyici" +msgstr "Zamanlayıcı Görevleri" msgid "Timer Type" -msgstr "Zaman Yaz" +msgstr "Zamanlayıcı Tipi" msgid "Timer entry" -msgstr "Süreölçer Girişi" +msgstr "Zamanlayıcı girişi" msgid "Timer log" -msgstr "Süre Ölçer Log" +msgstr "Zamanlayıcı günlüğü" msgid "" "Timer overlap in timers.xml detected!\n" "Please recheck it!" msgstr "" +"timers.xml de zamanlayıcı çakışması tespit edildi!\n" +"Lütfen tekrar kontrol edin!" msgid "Timer sanity error" -msgstr "Zaman Hesaplama Hatası" +msgstr "" msgid "Timer selection" -msgstr "Zaman Seçici" +msgstr "Zamanlayıcı seçimi" msgid "Timer status:" -msgstr "" +msgstr "Zamanlayıcı durumu:" msgid "Timeshift" -msgstr "" +msgstr "Timeshift" msgid "Timeshift not possible!" -msgstr "Zaman Dondurma Mümkün Değil" +msgstr "Timeshift kullanılamaz!" msgid "Timezone" -msgstr "Zaman Bölgesi" +msgstr "Zaman dilimi" msgid "Title" -msgstr "" +msgstr "Başlık" msgid "Title:" -msgstr "Ünvan:" +msgstr "Başlık:" msgid "" "To make sure you intend to do this, please remove the target USB stick now " @@ -3020,37 +3152,37 @@ msgid "" msgstr "" msgid "Today" -msgstr "Bu Gün" +msgstr "Bugün" msgid "Tone mode" -msgstr "Ton Modu" +msgstr "Ton modu" msgid "Toneburst" msgstr "Toneburst" msgid "Toneburst A/B" -msgstr "Ton İle Ayırma A/B" +msgstr "Toneburst A/B" msgid "Track" -msgstr "" +msgstr "İz" msgid "Translation" -msgstr "" +msgstr "Çeviri" msgid "Translation:" -msgstr "" +msgstr "Çeviri:" msgid "Transmission Mode" -msgstr "" +msgstr "İletim (Transmisyon) Modu" msgid "Transmission mode" -msgstr "İletim Şekli" +msgstr "İletim (transmisyon) modu" msgid "Transponder" msgstr "Transponder" msgid "Transponder Type" -msgstr "" +msgstr "Transponder Tipi" msgid "Tries left:" msgstr "" @@ -3068,95 +3200,99 @@ msgid "Tuesday" msgstr "Salı" msgid "Tune" -msgstr "İnce Ayar" +msgstr "Ayar" msgid "Tune failed!" -msgstr "" +msgstr "Kanal geçişi başarısız! (Tune failed!)" msgid "Tuner" -msgstr "Tüner" +msgstr "Tuner" msgid "Tuner " -msgstr "" +msgstr "Tuner " msgid "Tuner Slot" -msgstr "Tüner Yuvası" +msgstr "Tuner Yuvası" msgid "Tuner configuration" -msgstr "" +msgstr "Tuner ayarları" msgid "Tuner status" -msgstr "" +msgstr "Tuner durumu" msgid "Turkish" -msgstr "" +msgstr "Türkçe" msgid "Two" msgstr "İki" msgid "Type of scan" -msgstr "Cinsinden Arama" +msgstr "Tarama tipi" msgid "USALS" -msgstr "USALS" +msgstr "USALS (Uluslararası Otomatik Uydu Konumlandırma Sistemi)" msgid "USB" msgstr "USB" msgid "USB Stick" -msgstr "USB Çubuk Kullan" +msgstr "USB Çubuk (stick)" msgid "" "Unable to complete filesystem check.\n" "Error: " -msgstr "" +msgstr "Dosya sistemi kontrolü bitirilemedi" msgid "" "Unable to initialize harddisk.\n" "Error: " msgstr "" +"Sabitdisk sıfırlaması yapılamıyor.\n" +"Hata:" msgid "Uncommitted DiSEqC command" -msgstr "Bağımsız DiSEqC Emri" +msgstr "Bağımsız DiSEqC tekrarı" msgid "Universal LNB" -msgstr "Beynelminel LNB" +msgstr "Üniversal LNB" msgid "Unmount failed" msgstr "" msgid "Update" -msgstr "" +msgstr "Güncelle" msgid "Updates your receiver's software" -msgstr "" +msgstr "Uydu Alıcınızın yazılımını güncelleyin" msgid "Updating finished. Here is the result:" -msgstr "Yükseltme tamamlandı.Sonuç burada :" +msgstr "Güncelleme tamamlandı. Sonucu burada görebilirsiniz:" msgid "Updating... Please wait... This can take some minutes..." -msgstr "Yükseltiliyor...Lütfen Bekleyiniz..Bu birkaç dakika sürebilir.." +msgstr "" +"Güncelleniyor... Lütfen bekleyin... Bu işlem birkaç dakika sürebilir..." msgid "Upgrade finished. Do you want to reboot your Dreambox?" msgstr "" +"Güncelleme tamamlandı. Dreambox'ınızı yeniden başlatmak istiyor musunuz?" msgid "Upgrading" -msgstr "" +msgstr "Güncelleniyor" msgid "Upgrading Dreambox... Please wait" -msgstr "" +msgstr "Dreambox güncelleniyor... Lütfen bekleyin" msgid "Use DHCP" msgstr "DHCP Kullan" msgid "Use Interface" -msgstr "" +msgstr "Arayüzü Kullan" msgid "Use Power Measurement" -msgstr "" +msgstr "Enerji Ölçümünü Kullan" msgid "Use a gateway" -msgstr "" +msgstr "Ağ geçidi kullan" #. TRANSLATORS: The effect of "Non-smooth winding" is that rather #. than using ordinary "continuous" or "smooth" winding, a fast @@ -3174,36 +3310,38 @@ msgid "Use non-smooth winding at speeds above" msgstr "" msgid "Use power measurement" -msgstr "" +msgstr "Eneji kullanımını ölç" msgid "Use the Networkwizard to configure your Network\n" -msgstr "" +msgstr "Ağınızı yapılandırmak için Ağ sihirbazını kullanın\n" msgid "" "Use the left and right buttons to change an option.\n" "\n" "Please set up tuner A" msgstr "" -"Sol Ve Sağ Düymeleri Kullanarak değiştirin.\n" +"Seçenekleri değiştirmek için Sol ve sağ tuşlarını kullanın.\n" "\n" -"Lütfen Kurun tuner A" +"Lütfen tuner A'yi ayarlayın" msgid "" "Use the up/down keys on your remote control to select an option. After that, " "press OK." msgstr "" +"Seçiminizi yapmak için kumandanızın yukarı/aşağı tuşlarınını, onaylamak için " +"OK tuşunu kullanın." msgid "Use usals for this sat" -msgstr "Kullanıcı İçin Bir USALS Uydu" +msgstr "" msgid "Use wizard to set up basic features" -msgstr "" +msgstr "Basit kurulum sihirbazını kullan." msgid "Used service scan type" -msgstr "" +msgstr "Kullanılan kanal arama tipi" msgid "User defined" -msgstr "Kullanıcı Tanımlı" +msgstr "Kullanıcı tanımlı" msgid "VCR scart" msgstr "VCR scart" @@ -3212,19 +3350,19 @@ msgid "VMGM (intro trailer)" msgstr "" msgid "Video Fine-Tuning" -msgstr "" +msgstr "Görüntü İnce Ayarı" msgid "Video Fine-Tuning Wizard" -msgstr "" +msgstr "Görüntü İnce Ayar Sihirbazı" msgid "Video Output" -msgstr "" +msgstr "Görüntü Çıkışı" msgid "Video Setup" -msgstr "" +msgstr "Görüntü Kurulumu" msgid "Video Wizard" -msgstr "" +msgstr "Görüntü Sihirbazı" msgid "" "Video input selection\n" @@ -3234,51 +3372,61 @@ msgid "" "\n" "The next input port will be automatically probed in 10 seconds." msgstr "" - +"Görüntü kaynak seçimi\n" +"\n" +"Lütfen bu sayfayı TV'nizde görebiliyorsanız OK tuşuna basınız (yada farklı " +"bir giriş seçiniz).\n" +"\n" +"Sonraki giriş otomatik olarak 10 saniye sonra test edilecektir." + msgid "Video mode selection." -msgstr "" +msgstr "Görüntü modu seçimi." msgid "View Rass interactive..." msgstr "" msgid "View teletext..." -msgstr "" +msgstr "Teleteksi gör..." msgid "Voltage mode" -msgstr "Voltaj Modu" +msgstr "Voltaj modu" msgid "Volume" msgstr "Ses" msgid "W" -msgstr "W" +msgstr "B" msgid "WEP" -msgstr "" +msgstr "WEP" msgid "WPA" -msgstr "" +msgstr "WPA" msgid "WPA2" -msgstr "" +msgstr "WPA2" msgid "WSS on 4:3" -msgstr "WSS on 4:3" +msgstr "WSS 4:3" msgid "Waiting" -msgstr "" +msgstr "Bekleniyor" msgid "Waiting for USB stick to settle..." -msgstr "" +msgstr "USB çubuğun takılması bekleniyor..." msgid "" "We will now test if your TV can also display this resolution at 50hz. If " "your screen goes black, wait 20 seconds and it will switch back to 60hz.\n" "Please press OK to begin." msgstr "" +"Şimdi, Televizyonunuzun bu çözünürlükte 50Hz 'deki davranışını test " +"edeceğiz. Eğer ekranınız siyah olarak kalırsa, 60Hz'e geçebilmek için 20 " +"saniye bekleyin.\n" +"Başlamak için lütfen OK tuşuna basın." msgid "Wed" -msgstr "Evlen" +msgstr "Çarş" msgid "Wednesday" msgstr "Çarşamba" @@ -3300,9 +3448,10 @@ msgid "" "the firmware of your Dreambox by providing a backup facility for your " "current settings and a short explanation of how to upgrade your firmware." msgstr "" -"Hoşgeldiniz şuan ımage yukseltmesı sihirbazı size yardımcı olacaktır.şuanki " -"ayarlarınızı backup ını almak ıcın sıze kısa bır acıklama yapacaktır ve " -"nasıl yukselteme yanı upgrade olacagını anlatacaktır." +"Imaj güncelleme sihirbazına hoş geldiniz. Bu sihirbaz, Dreambox'ınıza " +"yazılım güncelleme esnasında, geçerli ayarlarınızın yedeğini almanıza imkan " +"sağlayacak ve kısa açıklamalarla yazılımınızı nasıl güncelleyeceğizi " +"anlatacaktır." msgid "" "Welcome.\n" @@ -3312,41 +3461,41 @@ msgid "" msgstr "" "Hoşgeldiniz.\n" "\n" -"Sihirbaz Size Kurulum sırasında rehberlik edecektir Dreambox.\n" -"uzaktan kumandanun OK butonuna basarak Sonraki Aşamalara Geçebilirsiniz." +"Bu sihirbaz Dreambox'ınızı yapılandırmanız için yardımcı olacaktır.\n" +"Kumandanızın OK tuşuna basarak sonraki adıma geçebilirsiniz." msgid "Welcome..." -msgstr "" +msgstr "Hoşgeldiniz..." msgid "West" msgstr "Batı" msgid "What do you want to scan?" -msgstr "Neyi Taramak İstiyorsunuz!" +msgstr "" msgid "Where do you want to backup your settings?" -msgstr "Nerden Yedekleme ve Seting Yapmak Sitersiniz ?" +msgstr "Ayarlarınızın yedeğini nereye almak istiyorsunuz?" msgid "Wireless" -msgstr "" +msgstr "Kablosuz" msgid "Wireless Network" -msgstr "" +msgstr "Kablosuz Ağ" msgid "Write error while recording. Disk full?\n" -msgstr "" +msgstr "Kaydederken hata oluştu. Disk dolu mu?\n" msgid "Write failed!" -msgstr "" +msgstr "Yazma başarısız!" msgid "Writing NFI image file to flash completed" -msgstr "" +msgstr "NFI imajının flaşa yazımı tamamlandı" msgid "Writing image file to NAND Flash" -msgstr "" +msgstr "İmaj, NAND Flaşa yazılıyor" msgid "YPbPr" -msgstr "" +msgstr "YPbPr" msgid "Year:" msgstr "Yıl:" @@ -3354,52 +3503,62 @@ msgstr "Yıl:" msgid "Yes" msgstr "Evet" +msgid "Yes, and delete this movie" +msgstr "" + msgid "Yes, backup my settings!" -msgstr "Evet, Benim AYarlarımı Yedekle" +msgstr "Evet, ayarlarımın yedeğini al!" msgid "Yes, do a manual scan now" -msgstr "Evet Bir Manuel Arama Şimdi" +msgstr "Evet, elle kanal aramayı başlat" msgid "Yes, do an automatic scan now" -msgstr "Evet Bir Otomatik Arama Şimdi" +msgstr "Evet, otomatik kanal aramayı başlat" msgid "Yes, do another manual scan now" -msgstr "Başka Elle Arama Yapmak İstermisin" +msgstr "Evet, yeni bir elle kanal araması başlat" msgid "Yes, perform a shutdown now." -msgstr "Evet, Şuanda Kapatmak istiyorum." +msgstr "Evet, cihazı şimdi kapat." msgid "Yes, restore the settings now" -msgstr "Evet Şimdi Setingleri Geriyükle" +msgstr "Evet, ayarları geri yükle" msgid "Yes, returning to movie list" -msgstr "" +msgstr "Evet, film listesine dön" msgid "Yes, view the tutorial" -msgstr "Evet, görmek İstiyorum" +msgstr "Evet, eğiticiyi göster" msgid "" "You can choose some default settings now. Please select the settings you " "want to be installed." msgstr "" +"Şimdi varsayılan ayarlarlardan bazılarını seçebililirsiniz. Lütfen yüklemek " +"istediğiniz ayarları seçin." msgid "You can choose, what you want to install..." -msgstr "" +msgstr "Yüklemek istediğinizi seçiniz..." msgid "You cannot delete this!" -msgstr "Siz bunu silemezsiniz !" +msgstr "Bunu silemezsiniz!" msgid "You chose not to install any default services lists." -msgstr "" +msgstr "Öntanımlı kanal listesi seçmediniz." msgid "" "You chose not to install any default settings. You can however install the " "default settings later in the settings menu." msgstr "" +"Yüklenmek üzere herhangi bir varsayılan ayar seçmediniz. Daha sonra yüklemek " +"isterseniz 'Kurulum' menüsünde yer alan 'Varsayılan ayarlar' seçeneğini " +"kullanabilirsiniz." msgid "" "You chose not to install anything. Please press OK finish the install wizard." msgstr "" +"Yüklemek üzere hiçbirşey seçmediniz. Sihirbazı sonlandırmak için OK tuşuna " +"basın." msgid "" "You do not seem to have a harddisk in your Dreambox. So backing up to a " @@ -3422,6 +3581,8 @@ msgid "" "You have chosen to backup to your harddisk. Please press OK to start the " "backup now." msgstr "" +"Ayarlarınızın yedeğini sabit diske almayı seçtiniz. Yedeklemeyi başlatmak " +"için lüften OK tuşuna basın." msgid "" "You have chosen to create a new .NFI flasher bootable USB stick. This will " @@ -3439,458 +3600,464 @@ msgid "" "instructions from the website, your new firmware will ask you to restore " "your settings." msgstr "" -"Sizin Bir PC Bağlanısına İhtiyacınız var dreambox. Eyer Sizin Daha Fazla " -"Talimata İhtiyacınız olursa, Lütfen Web Sitesini Ziyaret Edin http://www." -"dm7025.de.\n" -" dreambox Yükseltme talimatları websitesi, ile temin EdebilirsinizSetin Ve " -"Yeni Yazılımlar İçin." msgid "" "You need to define some keywords first!\n" "Press the menu-key to define keywords.\n" "Do you want to define keywords now?" msgstr "" +"Öncelikle bazı anahtar kelimeler girmeniz gerekiyor!\n" +"Menü tuşuna basın ve anahtar kelimeyi tanımlayın.\n" +"Anahtar kelimeyi şimdi tanımlamak ister misiniz??" msgid "" "You need to set a pin code and hide it from your children.\n" "\n" "Do you want to set the pin now?" msgstr "" +"Bir şifre tanımlamalı ve çocuklarınızdan gizlemelisiniz.\n" +"\n" +"Şimdi bir şifre tanımlamak istiyor musunuz?" msgid "Your Dreambox will restart after pressing OK on your remote control." msgstr "" +"Kumandanızda OK tuşuna bastıktan sonra Dreambox'unuz yeniden başlatılacak." msgid "Your TV works with 50 Hz. Good!" -msgstr "" +msgstr "Televizyonunuz 50Hz destekliyor. Güzel!" msgid "" "Your backup succeeded. We will now continue to explain the further upgrade " "process." -msgstr "" +msgstr "Yedek başarıyla alındı. Şimdi güncelleme işlemine devam edeceğiz." msgid "Your dreambox is shutting down. Please stand by..." -msgstr "Dreambox Kapanırken. Lütfen Bekleyin..." +msgstr "Dreambox'ınız kapatılıyor. Lütfen bekleyin..." msgid "" "Your dreambox isn't connected to the internet properly. Please check it and " "try again." msgstr "" +"Dreambox'unuz internete bağlı değil. Kontrol ettikten sonra tekrar deneyin." msgid "" "Your frontprocessor firmware must be upgraded.\n" "Press OK to start upgrade." msgstr "" -"Sizin ön işlemci firmware yükseltilmek zorundadır.\n" -"Yükseltmesi başlatmak için OK basınız." msgid "Zap back to service before positioner setup?" msgstr "" +"Pozisyoner kurulumundan çıktıktan sonra seyrettiğiniz kanala dönmek istiyor " +"musunuz?" msgid "Zap back to service before satfinder?" msgstr "" +"Uydu arayıcıdan çıktıktan sonra seyrettiğiniz kanala dönmek istiyor musunuz?" msgid "[alternative edit]" -msgstr "" +msgstr "[alternatif düzenle]" msgid "[bouquet edit]" -msgstr "[bouquet Düzenle]" +msgstr "[buket düzenle]" msgid "[favourite edit]" -msgstr "[favorileri Düzenle]" +msgstr "[favori düzenle]" msgid "[move mode]" -msgstr "[Taşıma Kipi]" +msgstr "[taşıma modu]" msgid "abort alternatives edit" -msgstr "" +msgstr "alternatif düzenlemekten vazgeç" msgid "abort bouquet edit" -msgstr "Durdur bouquet Düzenle" +msgstr "buket düzenlemekten vazgeç" msgid "abort favourites edit" -msgstr "Favori Düzenleme Hakkında" +msgstr "favori düzenlemekten vazgeç" msgid "about to start" -msgstr "Hakkında yı Başlat" +msgstr "" msgid "add alternatives" -msgstr "" +msgstr "alternatiflere ekle" msgid "add bookmark" -msgstr "" +msgstr "yer imlerine ekle" msgid "add bouquet" -msgstr "" +msgstr "bukete ekle" msgid "add directory to playlist" -msgstr "Yeni Klasör ve Çalma Lsitesi...." +msgstr "klasörü oynatma listesine ekle" msgid "add file to playlist" -msgstr "Yeni Dosya ve Çalmalistesi" +msgstr "dosyayı oynatma listesine ekle" msgid "add files to playlist" -msgstr "" +msgstr "dosyaları oynatma listesine ekle" msgid "add marker" -msgstr "" +msgstr "işaret ekle" msgid "add recording (enter recording duration)" -msgstr "Yeni Kayıt (Kaydederken Süre Gir)" +msgstr "kayıt ekle (kayıt süresi belirleyerek)" msgid "add recording (enter recording endtime)" -msgstr "" +msgstr "kayıt ekle (kayıt bitiş zamanını girerek)" msgid "add recording (indefinitely)" -msgstr "Kayıt ekle ( Süresiz olarak )" +msgstr "kayıt ekle (süresiz)" msgid "add recording (stop after current event)" -msgstr "Kayıt Ekle ( Durdur Şuanki Kayıdı )" +msgstr "kayıt ekle (geçerli EPG olayı bitene kadar)" msgid "add service to bouquet" -msgstr "Yeni Servis veya Buket Ekle" +msgstr "kanalı bukete ekle" msgid "add service to favourites" -msgstr "Ekle Servis E Favorileri" +msgstr "kanalı favorilere ekle" msgid "add to parental protection" -msgstr "" +msgstr "ebeveyn korumasına ekle" msgid "advanced" -msgstr "" +msgstr "gelişmiş" msgid "alphabetic sort" -msgstr "" +msgstr "alfabetik sıralama" msgid "" "are you sure you want to restore\n" "following backup:\n" msgstr "" -"Geri yükleme için Eminmisiniz\n" -"Yedeklemeyi Takip Edin:\n" +"Belirtilen yedeği geri yüklemek\n" +"istediğinizden emin misiniz?:\n" msgid "audio tracks" -msgstr "" +msgstr "ses izleri" msgid "back" -msgstr "Geri" +msgstr "geri" msgid "background image" -msgstr "" +msgstr "arkaplan tesmi" msgid "better" -msgstr "" +msgstr "daha iyi" msgid "blacklist" -msgstr "" +msgstr "kara liste" msgid "by Exif" msgstr "" msgid "change recording (duration)" -msgstr "Kaydederek Değiştir (Süre)" +msgstr "kaydı değiştir (süre)" msgid "change recording (endtime)" -msgstr "" +msgstr "kaydı değiştir (bitiş zamanı)" msgid "chapters" -msgstr "" +msgstr "bölümler" msgid "choose destination directory" -msgstr "" +msgstr "hedef klasörü seçin" msgid "circular left" -msgstr "Dairevi Kalan" +msgstr "dairesel sola" msgid "circular right" -msgstr "" +msgstr "dairesel sağa" msgid "clear playlist" -msgstr "Çalma Listesini Temizle" +msgstr "oynatma listesini temizle" msgid "color" -msgstr "" +msgstr "renk" msgid "complex" -msgstr "" +msgstr "karmaşık (kompleks)" msgid "config menu" -msgstr "yapılandırma Menüsü" +msgstr "ayar menüsü" msgid "confirmed" -msgstr "" +msgstr "onaylandı" msgid "connected" -msgstr "" +msgstr "bağlı" msgid "continue" -msgstr "" +msgstr "devam et" msgid "copy to bouquets" -msgstr "" +msgstr "buketleri kopyala" msgid "create directory" -msgstr "" +msgstr "klasör oluştur" msgid "daily" -msgstr "Günlük" +msgstr "günlük" msgid "day" -msgstr "" +msgstr "gün" msgid "delete" -msgstr "Sil" +msgstr "sil" msgid "delete cut" -msgstr "" +msgstr "kesimi sil" msgid "delete playlist entry" -msgstr "" +msgstr "seçilen oynatma listesini sil" msgid "delete saved playlist" -msgstr "" +msgstr "kayıtlı oynatma listesini sil" msgid "delete..." -msgstr "Sil...." +msgstr "sil..." msgid "disable" -msgstr "" +msgstr "devre dışı" msgid "disable move mode" -msgstr "Taşıma Modunu Kapat" +msgstr "taşıma modunu kapat" msgid "disabled" -msgstr "" +msgstr "devre dışı" msgid "disconnected" -msgstr "" +msgstr "bağlı değil" msgid "do not change" -msgstr "" +msgstr "değiştirme" msgid "do nothing" -msgstr "Hiçbirşey Yapma" +msgstr "birşey yapma" msgid "don't record" -msgstr "Kayıt Bitti" +msgstr "keydetme" msgid "done!" -msgstr "Bitti!" +msgstr "tamamlandı!" msgid "edit alternatives" -msgstr "" +msgstr "alternatifleri düzenle" msgid "empty" -msgstr "" +msgstr "boş" msgid "enable" -msgstr "" +msgstr "etkin" msgid "enable bouquet edit" -msgstr "Etkinleştir Buket Düzenlemeyi" +msgstr "buket düzenlemeyi aç" msgid "enable favourite edit" -msgstr "Etkinleştir Favori Düzenlemeyi" +msgstr "favori düzenlemeyi aç" msgid "enable move mode" -msgstr "Taşıma Listesini Aç" +msgstr "taşıma modunu aç" msgid "enabled" -msgstr "" +msgstr "açık" msgid "end alternatives edit" -msgstr "" +msgstr "alternatif düzenlemeyi bitir" msgid "end bouquet edit" -msgstr "Buket Düzenleme Son" +msgstr "buket düzenlemeyi bitir" msgid "end cut here" -msgstr "" +msgstr "kesimi burada bitir" msgid "end favourites edit" -msgstr "Favori Düzenleme Bitti" +msgstr "favori düzenlemeyi bitir" msgid "equal to" -msgstr "" +msgstr "eşittir" msgid "exceeds dual layer medium!" -msgstr "" +msgstr "çift katman (dual layer) medya kapasitesini aşıyor!" msgid "exit DVD player or return to file browser" -msgstr "" +msgstr "DVD oynatıcıdan çık yada dosya yöneticisine geri dön" msgid "exit mediaplayer" -msgstr "" +msgstr "ortam oynatıcıdan çık" msgid "exit movielist" -msgstr "" +msgstr "film listesinden çık" msgid "failed" -msgstr "" +msgstr "başarısız" msgid "filename" -msgstr "" +msgstr "dosyaadı" msgid "fine-tune your display" -msgstr "" +msgstr "ekran ince ayarı" msgid "font face" -msgstr "" +msgstr "font tipi" msgid "forward to the next chapter" -msgstr "" +msgstr "sonraki bölüme ilerle" msgid "free" -msgstr "" +msgstr "boş" msgid "free diskspace" -msgstr "Kullanılabilir Disk Alanı" +msgstr "boş disk alanı" msgid "go to deep standby" -msgstr "Derin Uyku Ya git" +msgstr "derin uyku moduna git" msgid "go to standby" -msgstr "" +msgstr "uyku moduna git" msgid "headline" -msgstr "" +msgstr "başlık" msgid "hear radio..." -msgstr "" +msgstr "radyo dinle..." msgid "help..." -msgstr "Yardım...." +msgstr "yardım..." msgid "hide extended description" -msgstr "" +msgstr "genişletilmiş açıklamayı gizle" msgid "hide player" -msgstr "Oynatıcıyı Gizle" +msgstr "oynatıcıyı gizle" msgid "highlighted button" msgstr "" msgid "horizontal" -msgstr "Yatay" +msgstr "yatay (h)" msgid "hour" -msgstr "" +msgstr "saat" msgid "hours" -msgstr "" +msgstr "saat" msgid "immediate shutdown" -msgstr "" +msgstr "hemen kapat" #, python-format msgid "" "incoming call!\n" "%s calls on %s!" msgstr "" +"gelen arama!\n" +"%s sizi arıyor %s!" msgid "init module" -msgstr "init Modul" +msgstr "" msgid "insert mark here" -msgstr "" +msgstr "buraya işaret koy" msgid "jump back to the previous title" -msgstr "" +msgstr "önceki başlığa git" msgid "jump forward to the next title" -msgstr "" +msgstr "sonraki başlığa git" msgid "jump to listbegin" -msgstr "" +msgstr "liste başına git" msgid "jump to listend" -msgstr "" +msgstr "liste sonuna git" msgid "jump to next marked position" -msgstr "" +msgstr "sonraki işaretli noktaya git" msgid "jump to previous marked position" -msgstr "" +msgstr "önceki işaretli noktaya git" msgid "leave movie player..." -msgstr "Film Oynatıcıdan Çık" +msgstr "ortam oynatıcıdan çık..." msgid "left" -msgstr "" +msgstr "sol" msgid "length" -msgstr "" +msgstr "uzunluk" msgid "list style compact" -msgstr "" +msgstr "Kompakt liste biçimi" msgid "list style compact with description" -msgstr "" +msgstr "Kompakt ve açıklamalı liste biçimi" msgid "list style default" -msgstr "" +msgstr "Öntanımlı liste biçimi" msgid "list style single line" -msgstr "" +msgstr "Tek satır halinde liste biçimi" msgid "load playlist" -msgstr "" +msgstr "oynatma listesi yükle" msgid "locked" -msgstr "" +msgstr "kilitli" msgid "loopthrough to" msgstr "" msgid "manual" -msgstr "El İle" +msgstr "elle" msgid "menu" -msgstr "" +msgstr "menü" msgid "menulist" -msgstr "" +msgstr "menü listesi" msgid "mins" -msgstr "Dakikalar" +msgstr "dk" msgid "minute" -msgstr "" +msgstr "dakika" msgid "minutes" -msgstr "" +msgstr "dakika" msgid "month" -msgstr "" +msgstr "ay" msgid "move PiP to main picture" -msgstr "" +msgstr "PiP'i ana ekrana taşı" msgid "movie list" -msgstr "" +msgstr "film listesi" msgid "multinorm" msgstr "" msgid "never" -msgstr "" +msgstr "hiç" msgid "next channel" -msgstr "Sonraki Kanal" +msgstr "sonraki kanal" msgid "next channel in history" -msgstr "Bundansonra Gelecek Kanal İçeriği" +msgstr "hafızadaki sonraki kanal" msgid "no" -msgstr "Hayır" +msgstr "hayır" msgid "no HDD found" -msgstr "HDD Bulunamadı" +msgstr "HDD bulunamadı" msgid "no Picture found" -msgstr "" +msgstr "Resim/fotoğraf bulunamadı" msgid "no module found" -msgstr "Hiç Modül Bulunamadı" +msgstr "modüş bulunamadı" msgid "no standby" msgstr "" @@ -3899,13 +4066,13 @@ msgid "no timeout" msgstr "" msgid "none" -msgstr "Hiçbiri" +msgstr "yok" msgid "not locked" -msgstr "" +msgstr "kilitlenmedi" msgid "nothing connected" -msgstr "" +msgstr "bağlı değil" msgid "of a DUAL layer medium used." msgstr "" @@ -3914,37 +4081,37 @@ msgid "of a SINGLE layer medium used." msgstr "" msgid "off" -msgstr "Kapalı" +msgstr "kapalı" msgid "on" -msgstr "Açık" +msgstr "açık" msgid "on READ ONLY medium." -msgstr "" +msgstr "yalnızca okunabilir (READ ONLY) medya" msgid "once" -msgstr "Vaktiyle" +msgstr "birkez" msgid "only /etc/enigma2 directory" -msgstr "Yanlız /etc/enigma2 Dizini" +msgstr "yalnızca /etc/enigma2 klasörü" msgid "open servicelist" -msgstr "" +msgstr "kanal listesini aç" msgid "open servicelist(down)" -msgstr "" +msgstr "kanal listesini aç (aşağı)" msgid "open servicelist(up)" -msgstr "" +msgstr "kanal listesini aç (yukarı)" msgid "pass" -msgstr "Şifre" +msgstr "geç" msgid "pause" -msgstr "" +msgstr "duraklat" msgid "play entry" -msgstr "" +msgstr "seçimi oynat" msgid "play from next mark or playlist entry" msgstr "" @@ -3953,158 +4120,158 @@ msgid "play from previous mark or playlist entry" msgstr "" msgid "please press OK when ready" -msgstr "Hazırsanız OK Basın" +msgstr "Lütfen hazır olduğunuzda OK' a basın" msgid "please wait, loading picture..." -msgstr "" +msgstr "resim/fotoğraf yükleniyor, lütfen bekleyiniz..." msgid "previous channel" -msgstr "Önceki Kanal" +msgstr "önceki kanal" msgid "previous channel in history" -msgstr "Önceki Kanal Geçmişi" +msgstr "hafızadaki önceki kanal" msgid "rebooting..." -msgstr "" +msgstr "yeniden başlatılıyor..." msgid "record" -msgstr "Kayıt" +msgstr "kayıt" msgid "recording..." -msgstr "Kaydetme.." +msgstr "kaydediliyor..." msgid "remove after this position" -msgstr "" +msgstr "bu noktadan sonrasını kaldır" msgid "remove all alternatives" -msgstr "" +msgstr "tüm alternatifleri kaldır" msgid "remove all new found flags" -msgstr "Yeni Bulunan İşaretlerini Sil" +msgstr "yeni bulundu bayraklarının tümünü kaldır" msgid "remove before this position" -msgstr "" +msgstr "bu noktadan öncekileri kaldır" msgid "remove bookmark" -msgstr "" +msgstr "yer imini sil" msgid "remove directory" -msgstr "" +msgstr "klasörü sil" msgid "remove entry" -msgstr "" +msgstr "seçilen kanalı/buketi sil" msgid "remove from parental protection" -msgstr "" +msgstr "ebeveyn korumasından çıkar" msgid "remove new found flag" -msgstr "" +msgstr "yeni bulundu bayrağını kaldır" msgid "remove selected satellite" -msgstr "" +msgstr "seçili uyduyu kaldır" msgid "remove this mark" -msgstr "" +msgstr "bu işareti kaldır" msgid "repeat playlist" -msgstr "" +msgstr "oynatma listesini tekrarla" msgid "repeated" -msgstr "yinelenen" +msgstr "tekrarla" msgid "rewind to the previous chapter" -msgstr "" +msgstr "önceki bölüme geri git" msgid "right" -msgstr "" +msgstr "sağ" msgid "save playlist" -msgstr "" +msgstr "oynatma listesini kaydet" msgid "scan done!" -msgstr "Arama Bitti!" +msgstr "arama tamamlandı!" #, python-format msgid "scan in progress - %d%% done!" -msgstr "Arama İlerleme Durumu - %d%% Bitti!" +msgstr "kanal araması devam ediyor - %d %% tamamlandı!" msgid "scan state" -msgstr "Arama Durumu" +msgstr "kanal arama durumu" msgid "second" -msgstr "" +msgstr "saniye" msgid "second cable of motorized LNB" msgstr "" msgid "seconds" -msgstr "" +msgstr "saniye" msgid "select" -msgstr "" +msgstr "seç" msgid "select .NFI flash file" -msgstr "" +msgstr ".NFI flaş dosyası seçin" msgid "select image from server" -msgstr "" +msgstr "imajı sunucudan seç" msgid "select movie" -msgstr "" +msgstr "film seç" msgid "select the movie path" msgstr "" msgid "service pin" -msgstr "" +msgstr "kanal şifresi" msgid "setup pin" -msgstr "" +msgstr "kurulum şifresi" msgid "show DVD main menu" -msgstr "" +msgstr "DVD ana menüsünü göster" msgid "show EPG..." -msgstr "Detaylı EPG" +msgstr "EPG yi göster..." msgid "show all" -msgstr "" +msgstr "tümünü göster" msgid "show alternatives" -msgstr "" +msgstr "alternatifleri göster" msgid "show event details" -msgstr "Olay Detayını Göster" +msgstr "EPG detaylarını göster" msgid "show extended description" -msgstr "" +msgstr "genişletilmiş açıklamayı göster" msgid "show first tag" -msgstr "" +msgstr "ilk etiketi göster" msgid "show second tag" -msgstr "" +msgstr "saniye etiketini göster" msgid "show shutdown menu" -msgstr "" +msgstr "kapatma menüsünü göster" msgid "show single service EPG..." -msgstr "" +msgstr "tek kanal EPG bilgisini göster..." msgid "show tag menu" -msgstr "" +msgstr "etiket menüsünü göster" msgid "show transponder info" -msgstr "" +msgstr "transponder bilgisini göster" msgid "shuffle playlist" -msgstr "" +msgstr "Rastgele oynat" msgid "shutdown" -msgstr "" +msgstr "kapat" msgid "simple" -msgstr "" +msgstr "basit" msgid "skip backward" msgstr "" @@ -4119,64 +4286,64 @@ msgid "skip forward (enter time)" msgstr "" msgid "sort by date" -msgstr "" +msgstr "tarihe göre sırala" msgid "spaces (top, between rows, left)" msgstr "" msgid "standard" -msgstr "" +msgstr "standart" msgid "standby" -msgstr "" +msgstr "uyku modu" msgid "start cut here" -msgstr "" +msgstr "buradan kes" msgid "start timeshift" -msgstr "" +msgstr "timeshift'i başlat" msgid "stereo" -msgstr "" +msgstr "stereo" msgid "stop PiP" -msgstr "" +msgstr "PiP'i durdur" msgid "stop entry" -msgstr "" +msgstr "seçileni durdur" msgid "stop recording" -msgstr "Kaydı Durdur" +msgstr "kaydır durdur" msgid "stop timeshift" -msgstr "" +msgstr "timeshift'i durdur" msgid "swap PiP and main picture" -msgstr "" +msgstr "PiP ile ana ekranın yerlerini değiştir" msgid "switch to bookmarks" -msgstr "" +msgstr "Yer imlerine geç" msgid "switch to filelist" -msgstr "Dosya Listesini Değiştir" +msgstr "dosya listesine geç" msgid "switch to playlist" -msgstr "Çalma Listesini Değiştir" +msgstr "oynatma listesine geç" msgid "switch to the next audio track" -msgstr "" +msgstr "sonraki ses izini seç" msgid "switch to the next subtitle language" -msgstr "" +msgstr "sonraki alt yazı dilini seç" msgid "text" -msgstr "Metin" +msgstr "metin" msgid "this recording" -msgstr "Bunu Kaydet" +msgstr "" msgid "this service is protected by a parental control pin" -msgstr "" +msgstr "bu kanal ebeveyn kontrol şifresiyle korunuyor" msgid "toggle a cut mark at the current position" msgstr "" @@ -4185,49 +4352,49 @@ msgid "toggle time, chapter, audio, subtitle info" msgstr "" msgid "unconfirmed" -msgstr "" +msgstr "doğrulanamadı" msgid "unknown service" -msgstr "Bilinmeyen Servis" +msgstr "bilinmeyen kanal" msgid "until restart" -msgstr "" +msgstr "yeniden başlatılana kadar" msgid "user defined" -msgstr "Kullanıcı Tanımlı" +msgstr "kullanıcı tanımlı" msgid "vertical" -msgstr "Düşey" +msgstr "düşey (v)" msgid "view extensions..." -msgstr "" +msgstr "eklentileri gör..." msgid "view recordings..." -msgstr "" +msgstr "kaydedilen dosyaları göster..." msgid "wait for ci..." -msgstr "" +msgstr "ci bekleniyor..." msgid "wait for mmi..." -msgstr "" +msgstr "mmi bekleniyor..." msgid "waiting" -msgstr "Bekleyin" +msgstr "bekleniyor" msgid "weekly" -msgstr "Haftalık" +msgstr "haftalık" msgid "whitelist" -msgstr "" +msgstr "beyaz liste" msgid "year" msgstr "" msgid "yes" -msgstr "Evet" +msgstr "evet" msgid "yes (keep feeds)" -msgstr "Evet (Bunları Sakla)" +msgstr "evet (beslemeleri tut)" msgid "" "your dreambox might be unusable now. Please consult the manual for further " @@ -4235,236 +4402,298 @@ msgid "" msgstr "" msgid "zap" -msgstr "Canlılık" +msgstr "kanal değiştir" msgid "zapped" -msgstr "" +msgstr "kanal değiştirildi" #~ msgid "" #~ "\n" #~ "Enigma2 will restart after the restore" #~ msgstr "" #~ "\n" -#~ "Enigma2 yeniden başlat ve geriyükle" +#~ "Enigma2 geri yüklemeden sonra yeniden başlatılacak" #~ msgid "\"?" #~ msgstr "\"?" -#~ msgid "#33294a6b" -#~ msgstr "#33294a6b" +#~ msgid "" +#~ "Are you sure you want to enable WLAN support?\n" +#~ "Connect your Wlan USB Stick to your Dreambox and press OK.\n" +#~ "\n" +#~ msgstr "" +#~ "WLAN desteğini açmak istediğinizden emin misiniz?\n" +#~ "WLAN USB donanımını Dreambox'unuza takın ve OK'e basın.\n" +#~ "\n" + +#~ msgid "" +#~ "Are you sure you want to enable your local network?\n" +#~ "\n" +#~ msgstr "" +#~ "Yerel ağı aktif etmek istediğinizden emin msiiniz?\n" +#~ "\n" + +#~ msgid "Configure your internal LAN" +#~ msgstr "Yerel ağ ayarlarınızı yapılandırın" -#~ msgid "0 V" -#~ msgstr "0 V" +#~ msgid "Configure your internal LAN again" +#~ msgstr "Yeral ağ ayarlarınızı yeniden yapılandırın" -#~ msgid "12 V" -#~ msgstr "12 V" +#~ msgid "Configure your wireless LAN" +#~ msgstr "Kablosuz ağ ayarlarınızı yapılandırın" -#~ msgid "12V Output" -#~ msgstr "12V Çıkış" +#~ msgid "Configure your wireless LAN again" +#~ msgstr "Kablosuz ağ ayarlarınızı yeniden yapılandırın" -#~ msgid "Ask before zapping" -#~ msgstr "Önceden Sonra zapping" +#~ msgid "Confirm" +#~ msgstr "Onayla" -#~ msgid "Audio / Video" -#~ msgstr "Ses/Görüntü" +#~ msgid "Connect to the Internet with a USB Wlan Stick" +#~ msgstr "Internete USB WLAN donanımı ile bağlanın" -#~ msgid "Auto show inforbar" -#~ msgstr "Otomatik Bilgi Gösterici" +#~ msgid "Connect to the Internet with your local LAN" +#~ msgstr "Internete yerel ağ donanımı ile bağlanın" -#~ msgid "Cable provider" -#~ msgstr "Kablo Kuruluşu" +#~ msgid "DVD ENTER key" +#~ msgstr "DVD ENTER tuşu" -#~ msgid "Classic" -#~ msgstr "Klasik" +#~ msgid "DVD down key" +#~ msgstr "DVD aşağı tuşu" -#~ msgid "Default" -#~ msgstr "Varsayılan" +#~ msgid "DVD left key" +#~ msgstr "DVD sol tuşu" + +#~ msgid "DVD right key" +#~ msgstr "DVD sağ tuşu" + +#~ msgid "DVD up key" +#~ msgstr "DVD yukarı" #~ msgid "" #~ "Do you really want to REMOVE\n" #~ "the plugin \"" #~ msgstr "" -#~ "Silmek İstediğinize Eminmisiniz\n" -#~ "O plugin i \"" +#~ "%s programını KALDIRMAK\n" +#~ "istediğinizden emin misiniz?" #~ msgid "" #~ "Do you really want to download\n" #~ "the plugin \"" #~ msgstr "" -#~ "İndirmek İstediğinize EMinmisiniz\n" -#~ "Bu plugin \"" - -#~ msgid "Equal to Socket A" -#~ msgstr "Soket A Eşitle" - -#~ msgid "Expert Setup" -#~ msgstr "Uzam Kurulum" - -#~ msgid "Fast zapping" -#~ msgstr "Hızlı Kanal Geçişi" - -#~ msgid "Games / Plugins" -#~ msgstr "Oyun / Plugins" - -#~ msgid "Hide error windows" -#~ msgstr "Hata Penceresini Gösterme" - -#~ msgid "Invert" -#~ msgstr "Tersçevir" +#~ "%s programını indirmek\n" +#~ "istediğinizden emin misiniz? \"" -#~ msgid "LCD" -#~ msgstr "LCD" +#~ msgid "Enable LAN" +#~ msgstr "LAN'ı Aç" -#~ msgid "LCD Setup" -#~ msgstr "LCD Kurulum" +#~ msgid "Enable WLAN" +#~ msgstr "WLAN'ı Aç" -#~ msgid "Language" -#~ msgstr "Lisan" - -#~ msgid "Loopthrough to Socket A" -#~ msgstr "Loopthrough to Socket A" - -#~ msgid "Movie Menu" -#~ msgstr "Film Menüsü" - -#~ msgid "Multi bouquets" -#~ msgstr "Çoklu buketler" - -#~ msgid "NIM " -#~ msgstr "NIM " - -#~ msgid "Network" -#~ msgstr "Ağ" - -#~ msgid "Nothing connected" -#~ msgstr "Hiçbirşey Bağlanmadı." - -#~ msgid "Parental Control" -#~ msgstr "Ebeveyn Kontrol" +#~ msgid "" +#~ "Enable the local network of your Dreambox.\n" +#~ "\n" +#~ msgstr "" +#~ "Dreambox'un yerel ağ bağlantısını aç.\n" +#~ "\n" -#~ msgid "Parental Lock" -#~ msgstr "Ebeveyn Kontol" +#~ msgid "Exit wizard and configure later manually" +#~ msgstr "Sihirbazdan çık ve ayarları daha sonra elle yap" -#~ msgid "Predefined satellite" -#~ msgstr "Tanımlanmış Uydular" +#~ msgid "" +#~ "No working wireless interface found.\n" +#~ " Please verify that you have attached a compatible WLAN USB Stick or " +#~ "enable you local network interface." +#~ msgstr "" +#~ "Çalışan kablosuz ağ arayüzü bulunamadı.\n" +#~ " Uyumlu WLAN USB donanımının takılı olduğundan emin olun veya yeral ağ " +#~ "arayüzünü kullanın." -#~ msgid "Record Splitsize" -#~ msgstr "Kayıt Aralıkları" +#~ msgid "No, let me choose default lists" +#~ msgstr "Hayır, öntanımlı listeleri seçmeme izin ver" -#~ msgid "Satconfig" -#~ msgstr "Uydu Ayarları" +#~ msgid "" +#~ "Please attach your Zydas ZD1211B chipset compatibe WLAN USB Stick to your " +#~ "Dreambox and press the OK button on your remote control to enable the " +#~ "built in wireless network support" +#~ msgstr "" +#~ "Lütfen dahili kablosuz ağ desteğini etkinleştirmek için, Zydas ZD1211B " +#~ "çipset uyumlu WLAN USB donanımını Dreambox'ınıza takın ve kumandanızdan " +#~ "OK tuşuna basın..." -#~ msgid "Satelliteconfig" -#~ msgstr "Uydu Yapılandırma" +#~ msgid "" +#~ "Please configure your local LAN internet connection by filling out the " +#~ "needed values.\n" +#~ "When you are ready please press OK to continue." +#~ msgstr "" +#~ "Lütfen ihtiyaç duyulan boş alanlara yerel ağ (LAN) ayarlarınızı girin.\n" +#~ "Hazır olduğunuzda devam etmek için OK tuşuna basın." -#~ msgid "Scan NIM" -#~ msgstr "NIM Ara" +#~ msgid "" +#~ "Please configure your wireless LAN internet connection by filling out the " +#~ "needed values.\n" +#~ "When you are ready please press OK to continue." +#~ msgstr "" +#~ "Kablosuz ağ bağlantınızı yapılandırmak için gerekli boşlukları doldurun.\n" +#~ "Hazır olduğunuzda devam etmek için OK tuşuna basın." -#~ msgid "Secondary cable from motorized LNB" -#~ msgstr "İkinci kablo LBN den motorize" +#~ msgid "Please select below the wireless network you want to connect to." +#~ msgstr "Lütfen bağlanmak istediğiniz kablosuz ağı seçin." -#~ msgid "Setup Lock" -#~ msgstr "Ayarları Kitle" +#~ msgid "" +#~ "Pressing OK enables the built in wireless LAN support of your Dreambox.\n" +#~ "Wlan USB Sticks with Zydas ZD1211B and RAlink RT73 Chipset are " +#~ "supported.\n" +#~ "Connect your Wlan USB Stick to your Dreambox before pressing OK.\n" +#~ "\n" +#~ msgstr "" +#~ "Dreambox'ınızda kablosuz ağ desteğini aktif hale getirmek için OK'a " +#~ "basın.\n" +#~ "WLAN USB donanımlarında, Zydas ZD1211B ve RAlink RT73 çipsetleri " +#~ "desteklenmektedir.\n" +#~ "OK'a basmadan önce WLAN USB donanımınızı Dreambox'ınıza takın.\n" -#~ msgid "Show Satposition" -#~ msgstr "Uydunun Pozisyonunu gör" +#~ msgid "" +#~ "Recording(s) are in progress or coming up in few seconds... really reboot " +#~ "now?" +#~ msgstr "" +#~ "KAYIT işlemi devam ediyor. Cihazı yeniden açmak istediğinizden emin " +#~ "misiniz?" -#~ msgid "Skip confirmations" -#~ msgstr "Ayarları geç" +#~ msgid "" +#~ "Recording(s) are in progress or coming up in few seconds... really " +#~ "restart now?" +#~ msgstr "" +#~ "KAYIT işlemi devam ediyor. Cihazı yeniden başlatmak istediğinizden emin " +#~ "misiniz?" -#~ msgid "Slot " -#~ msgstr "Yuva" +#~ msgid "" +#~ "Recording(s) are in progress or coming up in few seconds... really " +#~ "shutdown now?" +#~ msgstr "" +#~ "KAYIT işlemi devam ediyor. Cihazı kapatmak istediğinizden emin misiniz?" -#~ msgid "Socket " -#~ msgstr "Soket" +#~ msgid "Restart your wireless interface" +#~ msgstr "Kablosuz arabirimini yeniden başlat" #~ msgid "Step " #~ msgstr "Adım" -#~ msgid "Swap services" -#~ msgstr "Servis değiştir" - -#~ msgid "Timeshifting" -#~ msgstr "Zaman Duraksat" - -#~ msgid "Transpondertype" -#~ msgstr "Transponder Yaz" - -#~ msgid "UHF Modulator" -#~ msgstr "UHF Birimi" - #~ msgid "" -#~ "Unable to initialize harddisk.\n" -#~ "Please refer to the user manual.\n" -#~ "Error: " +#~ "Thank you for using the wizard. Your Dreambox is now ready to use.\n" +#~ "\n" +#~ "Your local LAN internet connection is working now.\n" +#~ "\n" +#~ "Please press OK to continue." #~ msgstr "" -#~ "Başlangıç Durumuna Getirilemedi harddisk.\n" -#~ "Lütfen İlgili Ref Kullanıcı Kitabına Bakın.\n" -#~ "Hata: " - -#~ msgid "Usage Settings" -#~ msgstr "Usül Ayarları" - -#~ msgid "Usage settings" -#~ msgstr "Kullanma Ayarları" - -#~ msgid "VCR Switch" -#~ msgstr "VCR Anahtarı" - -#~ msgid "Visualize positioner movement" -#~ msgstr "Pozisyoneri Sanal Olarak Göster" - -#~ msgid "add bouquet..." -#~ msgstr "Yeni bouquet..." - -#~ msgid "copy to favourites" -#~ msgstr "Favoriyi Kopyala" +#~ "Sihirbazı kullandığınız için teşekkür ederiz. Dreambox'ınız kullanıma " +#~ "hazır.\n" +#~ "\n" +#~ "Yerel ağ bağlantınız çalışıyor.\n" +#~ "\n" +#~ "Devam etmek için OK tuşuna basın." -#~ msgid "empty/unknown" -#~ msgstr "Boş/Tanımsız" +#~ msgid "" +#~ "Thank you for using the wizard. Your Dreambox is now ready to use.\n" +#~ "\n" +#~ "Your wireless internet connection is working now.\n" +#~ "\n" +#~ "Please press OK to continue." +#~ msgstr "" +#~ "Sihirbazı kullandığınız için teşekkür ederiz. Dreambox'ınız kullanıma " +#~ "hazır.\n" +#~ "\n" +#~ "Kablosuz ağ bağlantınız çalışıyor.\n" +#~ "\n" +#~ "Devam etmek için OK tuşuna basın." -#~ msgid "full /etc directory" -#~ msgstr "Tüm /etc Klasörü" +#~ msgid "" +#~ "Thank you for using the wizard. Your Dreambox is now ready to use.\n" +#~ "Please press OK to start using your Dreambox." +#~ msgstr "" +#~ "Sihirbazı kullandığınız için teşekkür ederiz. Dreambox'ınız kullanıma " +#~ "hazır.\n" +#~ "Dreambox'ınızı kullanmak için hazırsanız OK tuşuna basın." -#~ msgid "list" -#~ msgstr "Liste" +#~ msgid "" +#~ "Thank you for using the wizard. Your box is now ready to use.\n" +#~ "Please press OK to start using you Dreambox." +#~ msgstr "" +#~ "Sihirbazı kullandığınız için teşekkür ederiz. Dreambox'ınız kullanıma " +#~ "hazır.\n" +#~ "Dreambox'ınızı kullanmak için OK tuşuna basın." -#~ msgid "remove bouquet" -#~ msgstr "Buketi Sil" +#~ msgid "" +#~ "Welcome.\n" +#~ "\n" +#~ "If you want to connect your Dreambox to the Internet, this wizard will " +#~ "guide you through the basic network setup of your Dreambox.\n" +#~ "\n" +#~ "Press the OK button on your remote control to move to the next step." +#~ msgstr "" +#~ "Hoşgeldiniz.\n" +#~ "\n" +#~ "Bu sihirbaz Dreambox'ınızın ağ ayarlarını yapabilmeniz için yardımcı " +#~ "olacaktır.\n" +#~ "\n" +#~ "Kumandanızın OK tuşuna basarak sonraki adıma geçebilirsiniz." -#~ msgid "remove service" -#~ msgstr "servis Sil" +#~ msgid "" +#~ "Your local LAN internet connection is not working!\n" +#~ "Please choose what you want to do next." +#~ msgstr "" +#~ "Yerel ağ üzerinden internet bağlantınız çalışmıyor\n" +#~ "Lütfen ne yapmak istediğinizi bir sonraki adımda seçin" #~ msgid "" -#~ "scan done!\n" -#~ "%d services found!" +#~ "Your network is restarting.\n" +#~ "You will be automatically forwarded to the next step." #~ msgstr "" -#~ "Arama Bitti!\n" -#~ "%d Servis Bulundu !" +#~ "Ağ yeniden başlatılıyor.\n" +#~ "Otomatik olarak sonraki adıma yönlendirileceksiniz." #~ msgid "" -#~ "scan done!\n" -#~ "No service found!" +#~ "Your wired LAN Adapter could not be started.\n" +#~ "Do you want to reboot your Dreambox to apply the new configuration?\n" #~ msgstr "" -#~ "Arama Bitti!\n" -#~ " Servis Bulunamadı!" +#~ "Kablolu Ağ donanımınız başlatılamadı.\n" +#~ "Yeni ayarların geçerli olabilmesi için Dreambox'u yeniden başlatmak ister " +#~ "misiniz?\n" #~ msgid "" -#~ "scan done!\n" -#~ "One service found!" +#~ "Your wireless LAN Adapter could not be started.\n" +#~ "Do you want to reboot your Dreambox to apply the new configuration?\n" #~ msgstr "" -#~ "Arama Bitti!\n" -#~ "Bir Servis Bulundu !" +#~ "Kablosuz Ağ donanımınız başlatılamadı.\n" +#~ "Yeni ayarların geçerli olabilmesi için Dreambox'u yeniden başlatmak ister " +#~ "misiniz?\n" #~ msgid "" -#~ "scan in progress - %d %% done!\n" -#~ "%d services found!" +#~ "Your wireless internet connection is not working!\n" +#~ "Please choose what you want to do next." #~ msgstr "" -#~ "Arama İlerleme Durumu - %d %% Bitti!\n" -#~ "%d Servis Bulunamadı!" +#~ "Kablosuz internet bağlantınız çalışmıyor!\n" +#~ "Lütfen sonraki adımda ne yapmak istediğinizi seçiniz." + +#~ msgid "equal to Socket A" +#~ msgstr "Soket A'ya eşit" + +#~ msgid "full /etc directory" +#~ msgstr "/etc klasörünün tamamı" + +#~ msgid "minutes and" +#~ msgstr "dakika ve" + +#~ msgid "scan done! %d services found!" +#~ msgstr "kanal araması tamamlandı! %d kanal bulundu!" + +#~ msgid "scan done! No service found!" +#~ msgstr "kanal araması tamamlandı! Kanal bulunamadı!" + +#~ msgid "scan done! One service found!" +#~ msgstr "kanal araması tamamlandı! Bir kanal bulundu!" -#~ msgid "select Slot" -#~ msgstr "Yuva Seç" +#~ msgid "scan in progress - %d %% done! %d services found!" +#~ msgstr "kanal araması devam ediyor - %d %% tamamlandı! %d kanal bulundu!" -#~ msgid "use power delta" -#~ msgstr "Güç kullanma Deltası" +#~ msgid "seconds." +#~ msgstr "saniye." -- cgit v1.2.3 From ae6c45c7c6ae6c03fd535e40ddb5ce63ffa8e1f8 Mon Sep 17 00:00:00 2001 From: Fraxinas Date: Mon, 3 Nov 2008 20:48:01 +0100 Subject: save backup network configuration files and not only gui stuff from enigma2 and change the default backup location to harddisk (on behalf of sat-man) --- lib/python/Plugins/SystemPlugins/ConfigurationBackup/plugin.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/python/Plugins/SystemPlugins/ConfigurationBackup/plugin.py b/lib/python/Plugins/SystemPlugins/ConfigurationBackup/plugin.py index 9ff8c05d..7a918da6 100644 --- a/lib/python/Plugins/SystemPlugins/ConfigurationBackup/plugin.py +++ b/lib/python/Plugins/SystemPlugins/ConfigurationBackup/plugin.py @@ -104,8 +104,8 @@ class BackupSetup(Screen): self.list = [ ] self["config"] = ConfigList(self.list) self.backup = ConfigSubsection() - self.backup.type = ConfigSelection(choices = [("settings", _("only /etc/enigma2 directory")), ("var", _("/var directory")), ("skin", _("/usr/share/enigma2 directory"))], default="settings") - self.backup.location = ConfigSelection(choices = [("usb", _("USB Stick")), ("cf", _("CF Drive")), ("hdd", _("Harddisk"))]) + self.backup.type = ConfigSelection(choices = [("settings", _("enigma2 and network")), ("var", _("/var directory")), ("skin", _("/usr/share/enigma2 directory"))], default="settings") + self.backup.location = ConfigSelection(choices = [("hdd", _("Harddisk")), ("usb", _("USB Stick")), ("cf", _("CF Drive"))]) self.list.append(getConfigListEntry(_("Backup Mode"), self.backup.type)) self.list.append(getConfigListEntry(_("Backup Location"), self.backup.location)) @@ -132,7 +132,7 @@ class BackupSetup(Screen): self.path = BackupPath[self.backup.location.value] if self.backup.type.value == "settings": print "Backup Mode: Settings" - self.session.open(Console, title = "Backup running", cmdlist = ["tar -czvf " + self.path + "/" + str(dt) + "_settings_backup.tar.gz /etc/enigma2/"]) + self.session.open(Console, title = "Backup running", cmdlist = ["tar -czvf " + self.path + "/" + str(dt) + "_settings_backup.tar.gz /etc/enigma2/ /etc/network/interfaces /etc/wpa_supplicant.conf"]) elif self.backup.type.value == "var": print "Backup Mode: var" self.session.open(Console, title = "Backup running", cmdlist = [ "tar -czvf " + self.path + "/" + str(dt) + "_var_backup.tar.gz /var/"]) -- cgit v1.2.3 From f3078c3363b29cdb8ccf05cbb251392966137977 Mon Sep 17 00:00:00 2001 From: ghost Date: Mon, 3 Nov 2008 21:05:52 +0100 Subject: dont do SDT update when tuned to wrong transponder --- lib/dvb/pmt.cpp | 12 ++++++++++-- lib/dvb/scan.h | 1 + 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/lib/dvb/pmt.cpp b/lib/dvb/pmt.cpp index 6082bf4a..692428d7 100644 --- a/lib/dvb/pmt.cpp +++ b/lib/dvb/pmt.cpp @@ -524,8 +524,15 @@ void eDVBServicePMTHandler::SDTScanEvent(int event) eDebug("no channel list"); else { - m_dvb_scan->insertInto(db, true); - eDebug("sdt update done!"); + eDVBChannelID chid; + m_reference.getChannelID(chid); + if (chid == m_dvb_scan->getCurrentChannelID()) + { + m_dvb_scan->insertInto(db, true); + eDebug("sdt update done!"); + } + else + eDebug("ignore sdt update data.... incorrect transponder tuned!!!"); } break; } @@ -605,6 +612,7 @@ int eDVBServicePMTHandler::tune(eServiceReferenceDVB &ref, int use_decode_demux, if (ref.path.empty()) { + m_dvb_scan = 0; m_dvb_scan = new eDVBScan(m_channel, true, false); m_dvb_scan->connectEvent(slot(*this, &eDVBServicePMTHandler::SDTScanEvent), m_scan_event_connection); } diff --git a/lib/dvb/scan.h b/lib/dvb/scan.h index 95e3fb39..38ac784f 100644 --- a/lib/dvb/scan.h +++ b/lib/dvb/scan.h @@ -110,6 +110,7 @@ public: void getLastServiceName(std::string &name); RESULT getFrontend(ePtr &); RESULT getCurrentTransponder(ePtr &); + eDVBChannelID getCurrentChannelID() { return m_chid_current; } }; #endif -- cgit v1.2.3 From 229de887b7ee74c1ed0eae8a7bbabd6a758756eb Mon Sep 17 00:00:00 2001 From: ghost Date: Tue, 4 Nov 2008 11:30:56 +0100 Subject: more failsave code, remove imho unneeded invalidate calls --- lib/python/Screens/TimerEdit.py | 47 ++++++++++++++++++----------------------- 1 file changed, 20 insertions(+), 27 deletions(-) diff --git a/lib/python/Screens/TimerEdit.py b/lib/python/Screens/TimerEdit.py index 67c49cc5..800bab33 100644 --- a/lib/python/Screens/TimerEdit.py +++ b/lib/python/Screens/TimerEdit.py @@ -117,41 +117,40 @@ class TimerEditList(Screen): self.session.nav.RecordTimer.timeChanged(t) self.refill() self.updateState() - + + def removeAction(self, descr): + actions = self["actions"].actions + if descr in actions: + del actions[descr] + def updateState(self): cur = self["timerlist"].getCurrent() if cur: if self.key_red_choice != self.DELETE: self["actions"].actions.update({"red":self.removeTimerQuestion}) self["key_red"].setText(_("Delete")) - self["key_red"].instance.invalidate() self.key_red_choice = self.DELETE if cur.disabled and (self.key_yellow_choice != self.ENABLE): self["actions"].actions.update({"yellow":self.toggleDisabledState}) self["key_yellow"].setText(_("Enable")) - self["key_yellow"].instance.invalidate() self.key_yellow_choice = self.ENABLE elif cur.isRunning() and not cur.repeated and (self.key_yellow_choice != self.EMPTY): - del self["actions"].actions["yellow"] + self.removeAction("yellow") self["key_yellow"].setText(" ") - self["key_yellow"].instance.invalidate() self.key_yellow_choice = self.EMPTY elif ((not cur.isRunning())or cur.repeated ) and (not cur.disabled) and (self.key_yellow_choice != self.DISABLE): self["actions"].actions.update({"yellow":self.toggleDisabledState}) self["key_yellow"].setText(_("Disable")) - self["key_yellow"].instance.invalidate() self.key_yellow_choice = self.DISABLE else: if self.key_red_choice != self.EMPTY: - del self["actions"].actions["red"] + self.removeAction("red") self["key_red"].setText(" ") - self["key_red"].instance.invalidate() self.key_red_choice = self.EMPTY if self.key_yellow_choice != self.EMPTY: - del self["actions"].actions["yellow"] + self.removeAction("yellow") self["key_yellow"].setText(" ") - self["key_yellow"].instance.invalidate() self.key_yellow_choice = self.EMPTY showCleanup = True @@ -164,15 +163,12 @@ class TimerEditList(Screen): if showCleanup and (self.key_blue_choice != self.CLEANUP): self["actions"].actions.update({"blue":self.cleanupQuestion}) self["key_blue"].setText(_("Cleanup")) - self["key_blue"].instance.invalidate() self.key_blue_choice = self.CLEANUP elif (not showCleanup) and (self.key_blue_choice != self.EMPTY): - del self["actions"].actions["blue"] + self.removeAction("blue") self["key_blue"].setText(" ") - self["key_blue"].instance.invalidate() self.key_blue_choice = self.EMPTY - def fillTimerList(self): del self.list[:] @@ -399,23 +395,25 @@ class TimerSanityConflict(Screen): def down(self): self["list"].instance.moveSelection(self["list"].instance.moveDown) self["timer2"].moveToIndex(self["list"].getSelectedIndex()) - + + def removeAction(self, descr): + actions = self["actions"].actions + if descr in actions: + del actions[descr] + def updateState(self): if self.timer[0] is not None: if self.timer[0].disabled and self.key_green_choice != self.ENABLE: self["actions"].actions.update({"green":self.toggleTimer1}) self["key_green"].setText(_("Enable")) - self["key_green"].instance.invalidate() self.key_green_choice = self.ENABLE elif self.timer[0].isRunning() and not timer[0].repeated and self.key_green_choice != self.EMPTY: - del self["actions"].actions["green"] + self.removeAction("green") self["key_green"].setText(" ") - self["key_green"].instance.invalidate() self.key_green_choice = self.EMPTY elif (not self.timer[0].isRunning() or self.timer[0].repeated ) and self.key_green_choice != self.DISABLE: self["actions"].actions.update({"green":self.toggleTimer1}) self["key_green"].setText(_("Disable")) - self["key_green"].instance.invalidate() self.key_green_choice = self.DISABLE if len(self.timer) > 1: x = self["list"].getSelectedIndex() @@ -423,25 +421,20 @@ class TimerSanityConflict(Screen): if self.timer[x].disabled and self.key_blue_choice != self.ENABLE: self["actions"].actions.update({"blue":self.toggleTimer2}) self["key_blue"].setText(_("Enable")) - self["key_blue"].instance.invalidate() self.key_blue_choice = self.ENABLE elif self.timer[x].isRunning() and not timer[x].repeated and self.key_blue_choice != self.EMPTY: - del self["actions"].actions["blue"] + self.removeAction("blue") self["key_blue"].setText(" ") - self["key_blue"].instance.invalidate() self.key_blue_choice = self.EMPTY elif (not self.timer[x].isRunning() or self.timer[x].repeated ) and self.key_blue_choice != self.DISABLE: self["actions"].actions.update({"blue":self.toggleTimer2}) self["key_blue"].setText(_("Disable")) - self["key_blue"].instance.invalidate() self.key_blue_choice = self.DISABLE else: #FIXME.... this doesnt hide the buttons self.... just the text - del self["actions"].actions["yellow"] + self.removeAction("yellow") self["key_yellow"].setText(" ") - self["key_yellow"].instance.invalidate() self.key_yellow_choice = self.EMPTY - del self["actions"].actions["blue"] + self.removeAction("blue") self["key_blue"].setText(" ") - self["key_blue"].instance.invalidate() self.key_blue_choice = self.EMPTY -- cgit v1.2.3 From 61e2eca2450a20da4ecd5cc138058e221df9837f Mon Sep 17 00:00:00 2001 From: Fraxinas Date: Tue, 4 Nov 2008 15:27:06 +0100 Subject: implement blanking of dvd minus rw media --- lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py b/lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py index 0c375129..d4e6a375 100644 --- a/lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py +++ b/lib/python/Plugins/Extensions/DVDBurn/DVDToolbox.py @@ -150,7 +150,7 @@ class DVDformatJob(Job): DVDformatTask(self) def retry(self): - self.tasks[0].args += [ "-force" ] + self.tasks[0].args += self.tasks[0].retryargs Job.retry(self) class DVDformatTaskPostcondition(Condition): @@ -174,6 +174,7 @@ class DVDformatTask(Task): self.setTool("/bin/dvd+rw-format") self.args += [ "/dev/" + harddiskmanager.getCD() ] self.end = 1100 + self.retryargs = [ ] def prepare(self): self.error = None @@ -181,7 +182,10 @@ class DVDformatTask(Task): def processOutputLine(self, line): if line.startswith("- media is already formatted"): self.error = self.ERROR_ALREADYFORMATTED - self.force = True + self.retryargs = [ "-force" ] + if line.startswith("- media is not blank"): + self.error = self.ERROR_ALREADYFORMATTED + self.retryargs = [ "-blank" ] if line.startswith(":-( mounted media doesn't appear to be"): self.error = self.ERROR_NOTWRITEABLE -- cgit v1.2.3 From 73e179bb7dfd67800dce39a383a269b2d871d180 Mon Sep 17 00:00:00 2001 From: Fraxinas Date: Tue, 4 Nov 2008 23:03:42 +0100 Subject: don't crash when exitting dvd image selection without selection --- lib/python/Plugins/Extensions/DVDBurn/TitleList.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/python/Plugins/Extensions/DVDBurn/TitleList.py b/lib/python/Plugins/Extensions/DVDBurn/TitleList.py index 600411ce..19380af4 100644 --- a/lib/python/Plugins/Extensions/DVDBurn/TitleList.py +++ b/lib/python/Plugins/Extensions/DVDBurn/TitleList.py @@ -207,10 +207,11 @@ class TitleList(Screen, HelpableScreen): self.session.openWithCallback(self.JobViewCB, JobView, job) def burnISO(self, path, scope): - job = Process.DVDisoJob(self.project, path) - job_manager.AddJob(job) - job_manager.in_background = False - self.session.openWithCallback(self.JobViewCB, JobView, job) + if path: + job = Process.DVDisoJob(self.project, path) + job_manager.AddJob(job) + job_manager.in_background = False + self.session.openWithCallback(self.JobViewCB, JobView, job) def JobViewCB(self, in_background): job_manager.in_background = in_background -- cgit v1.2.3 From a1404d58d60d5dc369e89cb98f239a83d447a986 Mon Sep 17 00:00:00 2001 From: Fraxinas Date: Wed, 5 Nov 2008 09:00:27 +0100 Subject: don't crash when background jobs fail and user presses red key --- lib/python/Components/Task.py | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/python/Components/Task.py b/lib/python/Components/Task.py index f249f711..b276438f 100644 --- a/lib/python/Components/Task.py +++ b/lib/python/Components/Task.py @@ -265,6 +265,7 @@ class JobManager: from Tools import Notifications if self.in_background: from Screens.TaskView import JobView + self.in_background = False Notifications.AddNotification(JobView, self.active_job) if problems: from Screens.MessageBox import MessageBox -- cgit v1.2.3 From 938a550b0874cd87f475a638551d7046f729d1bc Mon Sep 17 00:00:00 2001 From: Fraxinas Date: Wed, 5 Nov 2008 12:52:46 +0100 Subject: nastily pretend the dvd minus rw bruning error never happened --- lib/python/Plugins/Extensions/DVDBurn/Process.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/lib/python/Plugins/Extensions/DVDBurn/Process.py b/lib/python/Plugins/Extensions/DVDBurn/Process.py index 7a03b7eb..9cca8f70 100644 --- a/lib/python/Plugins/Extensions/DVDBurn/Process.py +++ b/lib/python/Plugins/Extensions/DVDBurn/Process.py @@ -241,7 +241,11 @@ class WaitForResidentTasks(Task): class BurnTaskPostcondition(Condition): RECOVERABLE = True def check(self, task): - return task.error is None + if task.returncode == 0: + return True + elif task.error is None or task.error is task.ERROR_MINUSRWBUG: + return True + return False def getErrorMessage(self, task): return { @@ -257,7 +261,7 @@ class BurnTaskPostcondition(Condition): }[task.error] class BurnTask(Task): - ERROR_NOTWRITEABLE, ERROR_LOAD, ERROR_SIZE, ERROR_WRITE_FAILED, ERROR_DVDROM, ERROR_ISOFS, ERROR_FILETOOLARGE, ERROR_ISOTOOLARGE, ERROR_UNKNOWN = range(9) + ERROR_NOTWRITEABLE, ERROR_LOAD, ERROR_SIZE, ERROR_WRITE_FAILED, ERROR_DVDROM, ERROR_ISOFS, ERROR_FILETOOLARGE, ERROR_ISOTOOLARGE, ERROR_MINUSRWBUG, ERROR_UNKNOWN = range(10) def __init__(self, job, extra_args=[], tool="/bin/growisofs"): Task.__init__(self, job, job.name) self.weighting = 500 @@ -284,12 +288,17 @@ class BurnTask(Task): self.error = self.ERROR_NOTWRITEABLE if line.find("ASC=24h") != -1: self.error = self.ERROR_LOAD + if line.find("SK=5h/ASC=A8h/ACQ=04h") != -1: + self.error = self.ERROR_MINUSRWBUG else: self.error = self.ERROR_UNKNOWN print "BurnTask: unknown error %s" % line elif line.startswith(":-("): if line.find("No space left on device") != -1: self.error = self.ERROR_SIZE + elif self.error == self.ERROR_MINUSRWBUG: + print "*sigh* this is a known bug. we're simply gonna assume everything is fine." + self.postconditions = [] elif line.find("write failed") != -1: self.error = self.ERROR_WRITE_FAILED elif line.find("unable to open64(") != -1 and line.find(",O_RDONLY): No such file or directory") != -1: @@ -309,6 +318,11 @@ class BurnTask(Task): self.error = self.ERROR_FILETOOLARGE elif line.startswith("genisoimage: File too large."): self.error = self.ERROR_ISOTOOLARGE + + def setTool(self, tool): + self.cmd = tool + self.args = [tool] + self.global_preconditions.append(ToolExistsPrecondition()) class RemoveDVDFolder(Task): def __init__(self, job): -- cgit v1.2.3 From 317d39715811fcfab181641398b43582cdb4e22d Mon Sep 17 00:00:00 2001 From: ghost Date: Wed, 5 Nov 2008 13:05:08 +0100 Subject: also make in FD nonblocking --- lib/base/console.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/base/console.cpp b/lib/base/console.cpp index 5ca77d12..add87066 100644 --- a/lib/base/console.cpp +++ b/lib/base/console.cpp @@ -109,6 +109,7 @@ int eConsoleAppContainer::execute(const char *cmdline, const char * const argv[] // eDebug("pipe in = %d, out = %d, err = %d", fd[0], fd[1], fd[2]); + ::fcntl(fd[0], F_SETFL, O_NONBLOCK); ::fcntl(fd[1], F_SETFL, O_NONBLOCK); ::fcntl(fd[2], F_SETFL, O_NONBLOCK); in = eSocketNotifier::create(eApp, fd[0], eSocketNotifier::Read|eSocketNotifier::Priority|eSocketNotifier::Hungup ); -- cgit v1.2.3 From 8ab0666af66fdb08f955daa70b255a5841ea73fb Mon Sep 17 00:00:00 2001 From: Fraxinas Date: Wed, 5 Nov 2008 14:32:25 +0100 Subject: try to add dvdburn icon once again --- lib/python/Plugins/Extensions/DVDBurn/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/python/Plugins/Extensions/DVDBurn/Makefile.am b/lib/python/Plugins/Extensions/DVDBurn/Makefile.am index d5c558d1..cb65f56a 100644 --- a/lib/python/Plugins/Extensions/DVDBurn/Makefile.am +++ b/lib/python/Plugins/Extensions/DVDBurn/Makefile.am @@ -5,5 +5,5 @@ install_PYTHON = \ plugin.py \ DVDProject.py DVDTitle.py TitleCutter.py TitleList.py Process.py ProjectSettings.py DVDToolbox.py -install_DATA = *.xml *.jpg *.mpg *.mp2 +install_DATA = *.xml *.jpg *.mpg *.mp2 *.png -- cgit v1.2.3 From be092c47edfd4babfd3b4c5ea511710e6458343f Mon Sep 17 00:00:00 2001 From: Fraxinas Date: Wed, 5 Nov 2008 17:25:52 +0100 Subject: allow setting progress for current task from within resident task, implement rudimentary progress for mplextask in dvdburn (requires dvdauthor patch) --- lib/python/Components/Task.py | 12 ++++--- lib/python/Plugins/Extensions/DVDBurn/Process.py | 45 ++++++++++++++---------- 2 files changed, 33 insertions(+), 24 deletions(-) diff --git a/lib/python/Components/Task.py b/lib/python/Components/Task.py index b276438f..9a768425 100644 --- a/lib/python/Components/Task.py +++ b/lib/python/Components/Task.py @@ -45,6 +45,7 @@ class Job(object): def addTask(self, task): task.job = self + task.task_progress_changed = self.task_progress_changed_CB self.tasks.append(task) def start(self, callback): @@ -70,7 +71,7 @@ class Job(object): else: print "still waiting for %d resident task(s) %s to finish" % (len(self.resident_tasks), str(self.resident_tasks)) else: - self.tasks[self.current_task].run(self.taskCallback, self.task_progress_changed_CB) + self.tasks[self.current_task].run(self.taskCallback) self.state_changed() def taskCallback(self, task, res, stay_resident = False): @@ -151,7 +152,7 @@ class Task(object): not_met.append(precondition) return not_met - def run(self, callback, task_progress_changed): + def run(self, callback): failed_preconditions = self.checkPreconditions(True) + self.checkPreconditions(False) if len(failed_preconditions): callback(self, failed_preconditions) @@ -159,7 +160,6 @@ class Task(object): self.prepare() self.callback = callback - self.task_progress_changed = task_progress_changed from enigma import eConsoleAppContainer self.container = eConsoleAppContainer() self.container.appClosed.append(self.processFinished) @@ -235,7 +235,8 @@ class Task(object): if progress < 0: progress = 0 self.__progress = progress - self.task_progress_changed() + if self.task_progress_changed: + self.task_progress_changed() progress = property(getProgress, setProgress) @@ -372,7 +373,8 @@ class ToolExistsPrecondition(Condition): return _("A required tool (%s) was not found.") % (self.realpath) class AbortedPostcondition(Condition): - pass + def getErrorMessage(self, task): + return "Cancelled upon user request" class ReturncodePostcondition(Condition): def check(self, task): diff --git a/lib/python/Plugins/Extensions/DVDBurn/Process.py b/lib/python/Plugins/Extensions/DVDBurn/Process.py index 9cca8f70..49054596 100644 --- a/lib/python/Plugins/Extensions/DVDBurn/Process.py +++ b/lib/python/Plugins/Extensions/DVDBurn/Process.py @@ -10,8 +10,8 @@ class png2yuvTask(Task): self.dumpFile = outputfile self.weighting = 15 - def run(self, callback, task_progress_changed): - Task.run(self, callback, task_progress_changed) + def run(self, callback): + Task.run(self, callback) self.container.stdoutAvail.remove(self.processStdout) self.container.dumpToFile(self.dumpFile) @@ -26,8 +26,8 @@ class mpeg2encTask(Task): self.inputFile = inputfile self.weighting = 25 - def run(self, callback, task_progress_changed): - Task.run(self, callback, task_progress_changed) + def run(self, callback): + Task.run(self, callback) self.container.readFromFile(self.inputFile) def processOutputLine(self, line): @@ -42,8 +42,8 @@ class spumuxTask(Task): self.dumpFile = outputfile self.weighting = 15 - def run(self, callback, task_progress_changed): - Task.run(self, callback, task_progress_changed) + def run(self, callback): + Task.run(self, callback) self.container.stdoutAvail.remove(self.processStdout) self.container.dumpToFile(self.dumpFile) self.container.readFromFile(self.inputFile) @@ -212,7 +212,7 @@ class RemoveESFiles(Task): class DVDAuthorTask(Task): def __init__(self, job): Task.__init__(self, job, "Authoring DVD") - self.weighting = 300 + self.weighting = 20 self.setTool("/usr/bin/dvdauthor") self.CWD = self.job.workspace self.args += ["-x", self.job.workspace+"/dvdauthor.xml"] @@ -222,6 +222,14 @@ class DVDAuthorTask(Task): print "[DVDAuthorTask] ", line[:-1] if not self.menupreview and line.startswith("STAT: Processing"): self.callback(self, [], stay_resident=True) + elif line.startswith("STAT: VOBU"): + try: + progress = int(line.split("MB")[0].split(" ")[-1]) + if progress: + self.job.mplextask.progress = progress + print "[DVDAuthorTask] update mplextask progress:", self.job.mplextask.progress, "of", self.job.mplextask.end + except: + print "couldn't set mux progress" class DVDAuthorFinalTask(Task): def __init__(self, job): @@ -233,7 +241,7 @@ class WaitForResidentTasks(Task): def __init__(self, job): Task.__init__(self, job, "waiting for dvdauthor to finalize") - def run(self, callback, task_progress_changed): + def run(self, callback): print "waiting for %d resident task(s) %s to finish..." % (len(self.job.resident_tasks),str(self.job.resident_tasks)) if self.job.resident_tasks == 0: callback(self, []) @@ -334,23 +342,24 @@ class RemoveDVDFolder(Task): class CheckDiskspaceTask(Task): def __init__(self, job): Task.__init__(self, job, "Checking free space") - totalsize = 50*1024*1024 # require an extra safety 50 MB + totalsize = 0 # require an extra safety 50 MB maxsize = 0 for title in job.project.titles: titlesize = title.estimatedDiskspace if titlesize > maxsize: maxsize = titlesize totalsize += titlesize diskSpaceNeeded = totalsize + maxsize + job.estimateddvdsize = totalsize / 1024 / 1024 + totalsize += 50*1024*1024 # require an extra safety 50 MB self.global_preconditions.append(DiskspacePrecondition(diskSpaceNeeded)) self.weighting = 5 - def run(self, callback, task_progress_changed): + def run(self, callback): failed_preconditions = self.checkPreconditions(True) + self.checkPreconditions(False) if len(failed_preconditions): callback(self, failed_preconditions) return self.callback = callback - self.task_progress_changed = task_progress_changed Task.processFinished(self, 0) class PreviewTask(Task): @@ -361,9 +370,8 @@ class PreviewTask(Task): self.path = path self.weighting = 10 - def run(self, callback, task_progress_changed): + def run(self, callback): self.callback = callback - self.task_progress_changed = task_progress_changed if self.job.menupreview: self.previewProject() else: @@ -439,9 +447,8 @@ class ImagePrepareTask(Task): self.job = job self.Menus = job.Menus - def run(self, callback, task_progress_changed): + def run(self, callback): self.callback = callback - self.task_progress_changed = task_progress_changed # we are doing it this weird way so that the TaskView Screen actually pops up before the spinner comes from enigma import eTimer self.delayTimer = eTimer() @@ -451,7 +458,7 @@ class ImagePrepareTask(Task): def conduct(self): try: from ImageFont import truetype - from Image import open as Image_open + from Image import open as Image_open s = self.job.project.settings self.Menus.im_bg_orig = Image_open(s.menubg.getValue()) if self.Menus.im_bg_orig.size != (self.Menus.imgwidth, self.Menus.imgheight): @@ -475,9 +482,8 @@ class MenuImageTask(Task): self.menubgpngfilename = menubgpngfilename self.highlightpngfilename = highlightpngfilename - def run(self, callback, task_progress_changed): + def run(self, callback): self.callback = callback - self.task_progress_changed = task_progress_changed try: import ImageDraw, Image, os s = self.job.project.settings @@ -712,7 +718,8 @@ class DVDJob(Job): title_filename = self.workspace + "/dvd_title_%d.mpg" % (self.i+1) LinkTS(self, title.inputfile, link_name) demux = DemuxTask(self, link_name) - MplexTask(self, outputfile=title_filename, demux_task=demux) + self.mplextask = MplexTask(self, outputfile=title_filename, demux_task=demux) + self.mplextask.end = self.estimateddvdsize RemoveESFiles(self, demux) WaitForResidentTasks(self) PreviewTask(self, self.workspace + "/dvd/VIDEO_TS/") -- cgit v1.2.3 From 58ee3c3a218a0aa5d45e9c465eb9759375b4129c Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Mon, 17 Nov 2008 00:08:58 +0100 Subject: By Anders Holst: * I have checked the effect on DM800 of the margin before GOP:s, introduced by the "timing bugs" patch and needed for DM7025. As was previously noted, the margins are not needed on DM800. Fortunately it turns out also not to have any significant adverse effects: When jumping back or forward I expected some flickering, but there are none at all! There is only one small effect as far as I have found: When a cut list is used, there are somewhat more flickering at the cut points than without the margins. Since there are flickering also without the margins, this may be considered a less serious effect. If you consider this effect serious enough though, or think that it is cleaner to separate the code for DM7025 and DM800 since the margin is needed for one but not the other, then I can try to produce such a patch. Otherwise I suggest to wait with this. * In the original timing bugs patch there were a fix to stop playback after the last OUT cut. It did this by setting the size of the next source span to 0. But this turned out not to be a good idea: It seems that playback stops immediately when the next size is set to zero, and not when the buffer is used up. Therefore playback may stop some seconds before the actual end. If instead a jump is made to the last position in the file and a non-zero size is used there, then for some reason it plays up the whole buffer. Don't ask me why it is like this. A modification to this effect is anyway included below. * Rewind did not work at all for HD movies on DM800. The picture just freezes. It is because HD movies have another sequence at beginning of frames than normal movies. There is a rather simple fix, looking for both HD and normal sequences, in the trickmode playback code. (If the HD movie sequence condition seems complicated, it is because it has to make sure not to be accidentally triggered by normal movies.) --- lib/dvb/dvb.cpp | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/lib/dvb/dvb.cpp b/lib/dvb/dvb.cpp index 6edf9e87..7b05feb4 100644 --- a/lib/dvb/dvb.cpp +++ b/lib/dvb/dvb.cpp @@ -985,9 +985,9 @@ int eDVBChannelFilePush::filterRecordData(const unsigned char *_data, int len, s unsigned char *ts = data + ts_offset; int pid = ((ts[1] << 8) | ts[2]) & 0x1FFF; - if ((d[3] == 0) && (m_pid == pid)) /* picture start */ + if ((d[3] == 0 || d[3] == 0x09 && d[-1] == 0 && (ts[1] & 0x40)) && (m_pid == pid)) /* picture start */ { - int picture_type = (d[5] >> 3) & 7; + int picture_type = (d[3]==0 ? (d[5] >> 3) & 7 : (d[4] >> 5) + 1); d += 4; // eDebug("%d-frame at %d, offset in TS packet: %d, pid=%04x", picture_type, offset, offset % 188, pid); @@ -1413,10 +1413,13 @@ void eDVBChannel::getNextSourceSpan(off_t current_offset, size_t bytes_read, off start = current_offset; size = max; } else { - off_t tmp = align(m_source_span.rbegin()->second, blocksize); - if (current_offset == tmp) { - start = current_offset; - size = 0; + off_t tmp2, tmp = align(m_source_span.rbegin()->second, blocksize); + pts_t len; + getLength(len); + m_tstools.getOffset(tmp2, len, 1); + if (current_offset == tmp || current_offset == tmp2) { + start = tmp2; + size = max; } else { start = tmp - align(512*1024, blocksize); size = align(512*1024, blocksize); -- cgit v1.2.3 From 638123eeac3874577ca1454c3420b15dd4ccdbc0 Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Mon, 17 Nov 2008 00:10:33 +0100 Subject: By Anders Holst: only record MPEG-4 I-frames to ap-file --- lib/dvb/pvrparse.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/dvb/pvrparse.cpp b/lib/dvb/pvrparse.cpp index 35ba9091..dfc62249 100644 --- a/lib/dvb/pvrparse.cpp +++ b/lib/dvb/pvrparse.cpp @@ -370,7 +370,8 @@ int eMPEGStreamParserTS::processPacket(const unsigned char *pkt, off_t offset) eDebug("Sequence header but no valid PTS value."); } - if (pkt[3] == 0x09) /* MPEG4 AVC unit access delimiter */ + if (pkt[3] == 0x09 && /* MPEG4 AVC unit access delimiter */ + (pkt[4] >> 5) == 0) /* and I-frame */ { if (ptsvalid) { -- cgit v1.2.3 From 401863ab3c54d849a22cd0fb677dec487621ab97 Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Mon, 17 Nov 2008 15:35:42 +0100 Subject: lock on pids only if video startcode is in a pes header --- lib/dvb/dvb.cpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/lib/dvb/dvb.cpp b/lib/dvb/dvb.cpp index 7b05feb4..8afa70db 100644 --- a/lib/dvb/dvb.cpp +++ b/lib/dvb/dvb.cpp @@ -1031,10 +1031,20 @@ int eDVBChannelFilePush::filterRecordData(const unsigned char *_data, int len, s } } else if ((d[3] & 0xF0) == 0xE0) /* video stream */ { - if (m_pid != pid) + /* verify that this is actually a PES header, not just some ES data */ + if (ts[1] & 0x40) /* PUSI set */ { - eDebug("now locked to pid %04x", pid); - m_pid = pid; + int payload_start = 4; + if (ts[3] & 0x20) /* adaptation field present */ + payload_start += ts[4] + 1; /* skip AF */ + if (payload_start == (offset%184)) /* the 00 00 01 should be directly at the payload start, otherwise it's not a PES header */ + { + if (m_pid != pid) + { + eDebug("now locked to pid %04x (%02x %02x %02x %02x)", pid, ts[0], ts[1], ts[2], ts[3]); + m_pid = pid; + } + } } // m_pid = 0x6e; d += 4; -- cgit v1.2.3 From 6c8fd4b0dc66959d22e2b3612f00076699664756 Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Mon, 17 Nov 2008 15:36:15 +0100 Subject: remove ugly SIGUSR1 loop once again --- lib/base/filepush.cpp | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/lib/base/filepush.cpp b/lib/base/filepush.cpp index 1999707f..e99e956c 100644 --- a/lib/base/filepush.cpp +++ b/lib/base/filepush.cpp @@ -260,12 +260,9 @@ void eFilePushThread::stop() // fixmee.. here we need a better solution to ensure // that the thread context take notice of the signal // even when no syscall is in progress - while(!sendSignal(SIGUSR1)) - { - eDebug("send SIGUSR1 to thread context"); - usleep(5000); // wait msek - } - kill(); + eDebug("if enigma hangs here, the filepush thread is non-responsive. FIX THAT DAMN THREAD."); + sendSignal(SIGUSR1); + kill(0); } void eFilePushThread::pause() -- cgit v1.2.3 From 588010098dbcc24b82ea736feec6b6056cffd2e3 Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Mon, 17 Nov 2008 15:36:45 +0100 Subject: a few more debugging to debug the pvr state stuff --- lib/service/servicedvb.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/service/servicedvb.cpp b/lib/service/servicedvb.cpp index 954a3964..a873576d 100644 --- a/lib/service/servicedvb.cpp +++ b/lib/service/servicedvb.cpp @@ -1286,6 +1286,7 @@ RESULT eDVBServicePlay::pause(ePtr &ptr) RESULT eDVBServicePlay::setSlowMotion(int ratio) { + eDebug("eDVBServicePlay::setSlowMotion(%d)", ratio); if (m_decoder) return m_decoder->setSlowMotion(ratio); else @@ -1294,6 +1295,7 @@ RESULT eDVBServicePlay::setSlowMotion(int ratio) RESULT eDVBServicePlay::setFastForward(int ratio) { + eDebug("eDVBServicePlay::setFastForward(%d)", ratio); int skipmode, ffratio; if (ratio > 8) @@ -1354,6 +1356,7 @@ RESULT eDVBServicePlay::getLength(pts_t &len) RESULT eDVBServicePlay::pause() { + eDebug("eDVBServicePlay::pause"); if (!m_is_paused && m_decoder) { m_is_paused = 1; @@ -1364,6 +1367,7 @@ RESULT eDVBServicePlay::pause() RESULT eDVBServicePlay::unpause() { + eDebug("eDVBServicePlay::unpause"); if (m_is_paused && m_decoder) { m_is_paused = 0; -- cgit v1.2.3 From a9efd192b545113282c7c7891a231570f49f27e6 Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Mon, 17 Nov 2008 17:19:06 +0100 Subject: fix comment, don't memmem over end of packet --- lib/dvb/dvb.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/dvb/dvb.cpp b/lib/dvb/dvb.cpp index 3ad086de..07cc611b 100644 --- a/lib/dvb/dvb.cpp +++ b/lib/dvb/dvb.cpp @@ -973,7 +973,7 @@ int eDVBChannelFilePush::filterRecordData(const unsigned char *_data, int len, s } #endif -#if 1 /* not yet */ +#if 1 /* This codepath is required on Broadcom-based Dreamboxes (DM800, DM8000) and strips away non-I-frames. */ if (!m_iframe_search) return len; @@ -982,7 +982,7 @@ int eDVBChannelFilePush::filterRecordData(const unsigned char *_data, int len, s // eDebug("filterRecordData, size=%d (mod 188=%d), first byte is %02x", len, len %188, data[0]); unsigned char *d = data; - while ((d = (unsigned char*)memmem(d, data + len - d, "\x00\x00\x01", 3))) + while ((d + 3 < data + len) && (d = (unsigned char*)memmem(d, data + len - d, "\x00\x00\x01", 3))) { int offset = d - data; int ts_offset = offset - offset % 188; /* offset to the start of TS packet */ @@ -1054,7 +1054,6 @@ int eDVBChannelFilePush::filterRecordData(const unsigned char *_data, int len, s d += 4; } else d += 4; /* ignore */ - } if (m_iframe_state == 1) -- cgit v1.2.3 From 67a09e962e20c1a2becd8b8699b542779941b6e7 Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Mon, 17 Nov 2008 17:19:39 +0100 Subject: performance fix: don't redraw if in/out list is the same --- lib/python/Components/Renderer/PositionGauge.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/python/Components/Renderer/PositionGauge.py b/lib/python/Components/Renderer/PositionGauge.py index 5fa8c356..3f93d82e 100644 --- a/lib/python/Components/Renderer/PositionGauge.py +++ b/lib/python/Components/Renderer/PositionGauge.py @@ -50,9 +50,10 @@ class PositionGauge(Renderer): return self.__cutlist def setCutlist(self, cutlist): - self.__cutlist = cutlist - if self.instance is not None: - self.instance.setInOutList(cutlist) + if self.__cutlist != cutlist: + self.__cutlist = cutlist + if self.instance is not None: + self.instance.setInOutList(cutlist) cutlist = property(getCutlist, setCutlist) -- cgit v1.2.3 From 39bd88513deee4a1a00993212c76e503fdd47fe7 Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Mon, 17 Nov 2008 22:54:04 +0100 Subject: fix typo --- lib/dvb/dvb.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/dvb/dvb.cpp b/lib/dvb/dvb.cpp index 07cc611b..28012e7a 100644 --- a/lib/dvb/dvb.cpp +++ b/lib/dvb/dvb.cpp @@ -1041,7 +1041,7 @@ int eDVBChannelFilePush::filterRecordData(const unsigned char *_data, int len, s int payload_start = 4; if (ts[3] & 0x20) /* adaptation field present */ payload_start += ts[4] + 1; /* skip AF */ - if (payload_start == (offset%184)) /* the 00 00 01 should be directly at the payload start, otherwise it's not a PES header */ + if (payload_start == (offset%188)) /* the 00 00 01 should be directly at the payload start, otherwise it's not a PES header */ { if (m_pid != pid) { -- cgit v1.2.3 From 3aedbe22cf74b72ad0c3e2bc1869e914701e6574 Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Tue, 18 Nov 2008 00:39:59 +0100 Subject: experimental dm8000 recording fix, doesn't belong here --- lib/python/Components/Renderer/FrontpanelLed.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/python/Components/Renderer/FrontpanelLed.py b/lib/python/Components/Renderer/FrontpanelLed.py index 7bb584e5..cd329b56 100644 --- a/lib/python/Components/Renderer/FrontpanelLed.py +++ b/lib/python/Components/Renderer/FrontpanelLed.py @@ -6,15 +6,24 @@ class FrontpanelLed(Element): Element.__init__(self) def changed(self, *args, **kwargs): - if self.source.value: + if self.source.value or 1: pattern = 0x55555555 + pattern_4bit = 0x84fc8c04 speed = 20 else: pattern = 0 + pattern_4bit = 0xffffffff speed = 1 try: open("/proc/stb/fp/led0_pattern", "w").write("%08x" % pattern) + except IOError: + pass + try: + open("/proc/stb/fp/led_pattern", "w").write("%08x" % pattern_4bit) + except IOError: + pass + try: open("/proc/stb/fp/led_pattern_speed", "w").write("%d" % speed) except IOError: pass -- cgit v1.2.3 From 4f7990ff2a55874b9eb65e3c9cd47dacb9f76deb Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Tue, 18 Nov 2008 00:40:19 +0100 Subject: rework decoder states --- lib/dvb/decoder.cpp | 208 ++++++++++++++++------------------ lib/dvb/decoder.h | 42 +++++-- lib/dvb/idvb.h | 33 ++---- lib/python/Screens/InfoBarGenerics.py | 17 ++- lib/service/iservice.h | 2 + lib/service/servicedvb.cpp | 40 ++++--- lib/service/servicedvb.h | 1 + 7 files changed, 177 insertions(+), 166 deletions(-) diff --git a/lib/dvb/decoder.cpp b/lib/dvb/decoder.cpp index 6ad39225..66b923a6 100644 --- a/lib/dvb/decoder.cpp +++ b/lib/dvb/decoder.cpp @@ -39,7 +39,7 @@ DEFINE_REF(eDVBAudio); eDVBAudio::eDVBAudio(eDVBDemux *demux, int dev) - :m_demux(demux), m_dev(dev), m_is_freezed(0) + :m_demux(demux), m_dev(dev) { char filename[128]; #if HAVE_DVB_API_VERSION < 3 @@ -194,7 +194,7 @@ int eDVBAudio::startPid(int pid, int type) */ } - eDebugNoNewLine("AUDIO_SET_BYPASS - "); + eDebugNoNewLine("AUDIO_SET_BYPASS(%d) - ", bypass); if (::ioctl(m_fd, AUDIO_SET_BYPASS_MODE, bypass) < 0) eDebug("failed (%m)"); else @@ -240,28 +240,20 @@ void eDVBAudio::flush() void eDVBAudio::freeze() { - if (!m_is_freezed) - { - eDebugNoNewLine("AUDIO_PAUSE - "); - if (::ioctl(m_fd, AUDIO_PAUSE) < 0) - eDebug("failed (%m)"); - else - eDebug("ok"); - m_is_freezed=1; - } + eDebugNoNewLine("AUDIO_PAUSE - "); + if (::ioctl(m_fd, AUDIO_PAUSE) < 0) + eDebug("failed (%m)"); + else + eDebug("ok"); } void eDVBAudio::unfreeze() { - if (m_is_freezed) - { - eDebugNoNewLine("AUDIO_CONTINUE - "); - if (::ioctl(m_fd, AUDIO_CONTINUE) < 0) - eDebug("failed (%m)"); - else - eDebug("ok"); - m_is_freezed=0; - } + eDebugNoNewLine("AUDIO_CONTINUE - "); + if (::ioctl(m_fd, AUDIO_CONTINUE) < 0) + eDebug("failed (%m)"); + else + eDebug("ok"); } void eDVBAudio::setChannel(int channel) @@ -299,7 +291,7 @@ eDVBAudio::~eDVBAudio() DEFINE_REF(eDVBVideo); eDVBVideo::eDVBVideo(eDVBDemux *demux, int dev) - :m_demux(demux), m_dev(dev), m_is_slow_motion(0), m_is_fast_forward(0), m_is_freezed(0) + :m_demux(demux), m_dev(dev) { char filename[128]; #if HAVE_DVB_API_VERSION < 3 @@ -461,34 +453,25 @@ void eDVBVideo::flush() void eDVBVideo::freeze() { - if (!m_is_freezed) - { - eDebugNoNewLine("VIDEO_FREEZE - "); - if (::ioctl(m_fd, VIDEO_FREEZE) < 0) - eDebug("failed (%m)"); - else - eDebug("ok"); - m_is_freezed=1; - } + eDebugNoNewLine("VIDEO_FREEZE - "); + if (::ioctl(m_fd, VIDEO_FREEZE) < 0) + eDebug("failed (%m)"); + else + eDebug("ok"); } void eDVBVideo::unfreeze() { - if (m_is_freezed) - { - eDebugNoNewLine("VIDEO_CONTINUE - "); - if (::ioctl(m_fd, VIDEO_CONTINUE) < 0) - eDebug("failed (%m)"); - else - eDebug("ok"); - m_is_freezed=0; - } + eDebugNoNewLine("VIDEO_CONTINUE - "); + if (::ioctl(m_fd, VIDEO_CONTINUE) < 0) + eDebug("failed (%m)"); + else + eDebug("ok"); } int eDVBVideo::setSlowMotion(int repeat) { - eDebugNoNewLine("VIDEO_SLOWMOTION - "); - m_is_slow_motion = repeat; + eDebugNoNewLine("VIDEO_SLOWMOTION(%d) - ", repeat); int ret = ::ioctl(m_fd, VIDEO_SLOWMOTION, repeat); if (ret < 0) eDebug("failed(%m)"); @@ -499,8 +482,7 @@ int eDVBVideo::setSlowMotion(int repeat) int eDVBVideo::setFastForward(int skip) { - eDebugNoNewLine("VIDEO_FAST_FORWARD - "); - m_is_fast_forward = skip; + eDebugNoNewLine("VIDEO_FAST_FORWARD(%d) - ", skip); int ret = ::ioctl(m_fd, VIDEO_FAST_FORWARD, skip); if (ret < 0) eDebug("failed(%m)"); @@ -527,11 +509,6 @@ int eDVBVideo::getPTS(pts_t &now) eDVBVideo::~eDVBVideo() { - if (m_is_slow_motion) - setSlowMotion(0); - if (m_is_fast_forward) - setFastForward(0); - unfreeze(); if (m_fd >= 0) ::close(m_fd); if (m_fd_demux >= 0) @@ -750,14 +727,14 @@ int eTSMPEGDecoder::setState() { int res = 0; - int noaudio = m_is_sm || m_is_ff || m_is_trickmode; + int noaudio = (m_state != statePlay) && (m_state != statePause); int nott = noaudio; /* actually same conditions */ if ((noaudio && m_audio) || (!m_audio && !noaudio)) - m_changed |= changeAudio; + m_changed |= changeAudio | changeState; if ((nott && m_text) || (!m_text && !nott)) - m_changed |= changeText; + m_changed |= changeText | changeState; bool changed = !!m_changed; #if HAVE_DVB_API_VERSION < 3 @@ -900,6 +877,39 @@ int eTSMPEGDecoder::setState() m_changed &= ~changeText; } #endif + + if (m_changed & changeState) + { + /* play, slowmotion, fast-forward */ + int state_table[6][4] = + { + /* [stateStop] = */ {0, 0, 0}, + /* [statePause] = */ {0, 0, 0}, + /* [statePlay] = */ {1, 0, 0}, + /* [stateDecoderFastForward] = */ {1, 0, m_ff_sm_ratio}, + /* [stateHighspeedFastForward] = */ {1, 0, 1}, + /* [stateSlowMotion] = */ {1, m_ff_sm_ratio, 0} + }; + int *s = state_table[m_state]; + if (m_video) + { + m_video->setSlowMotion(s[1]); + m_video->setFastForward(s[2]); + if (s[0]) + m_video->unfreeze(); + else + m_video->freeze(); + } + if (m_audio) + { + if (s[0]) + m_audio->unfreeze(); + else + m_audio->freeze(); + } + m_changed &= ~changeState; + } + if (changed && !m_video && m_audio && m_radio_pic.length()) showSinglePic(m_radio_pic.c_str()); @@ -946,7 +956,7 @@ eTSMPEGDecoder::eTSMPEGDecoder(eDVBDemux *demux, int decoder) { demux->connectEvent(slot(*this, &eTSMPEGDecoder::demux_event), m_demux_event_conn); CONNECT(m_showSinglePicTimer->timeout, eTSMPEGDecoder::finishShowSinglePic); - m_is_ff = m_is_sm = m_is_trickmode = 0; + m_state = stateStop; } eTSMPEGDecoder::~eTSMPEGDecoder() @@ -1028,82 +1038,61 @@ RESULT eTSMPEGDecoder::setSyncMaster(int who) return -1; } -RESULT eTSMPEGDecoder::start() -{ - RESULT r; - r = setState(); - if (r) - return r; - return unfreeze(); -} - - /* preroll is start in freezed mode. */ -RESULT eTSMPEGDecoder::preroll() +RESULT eTSMPEGDecoder::set() { return setState(); } -RESULT eTSMPEGDecoder::freeze(int cont) -{ - if (m_video) - m_video->freeze(); - - if (m_audio) - m_audio->freeze(); - - return 0; -} - -RESULT eTSMPEGDecoder::unfreeze() -{ - if (m_video) - m_video->unfreeze(); - - if (m_audio) - m_audio->unfreeze(); - - return 0; -} - -RESULT eTSMPEGDecoder::setSinglePictureMode(int when) +RESULT eTSMPEGDecoder::play() { - return -1; + if (m_state == statePlay) + return 0; + m_state = statePlay; + m_changed |= changeState; + return setState(); } -RESULT eTSMPEGDecoder::setPictureSkipMode(int what) +RESULT eTSMPEGDecoder::pause() { - return -1; + if (m_state == statePause) + return 0; + m_state = statePause; + m_changed |= changeState; + return setState(); } RESULT eTSMPEGDecoder::setFastForward(int frames_to_skip) { - m_is_ff = frames_to_skip != 0; + if ((m_state == stateDecoderFastForward) && (m_ff_sm_ratio == frames_to_skip)) + return 0; - setState(); - unfreeze(); // audio might be restarted and still in preroll (freezed) state. + m_state = stateDecoderFastForward; + m_ff_sm_ratio = frames_to_skip; + m_changed |= changeState; + return setState(); - if (m_video) - return m_video->setFastForward(frames_to_skip); - else - return -1; +// return m_video->setFastForward(frames_to_skip); } RESULT eTSMPEGDecoder::setSlowMotion(int repeat) { - m_is_sm = repeat != 0; + if ((m_state == stateSlowMotion) && (m_ff_sm_ratio == repeat)) + return 0; - setState(); - unfreeze(); // audio might be restarted and still in preroll (freezed) state. - - if (m_video) - return m_video->setSlowMotion(repeat); - else - return -1; + m_state = stateSlowMotion; + m_ff_sm_ratio = repeat; + m_changed |= changeState; + return setState(); } -RESULT eTSMPEGDecoder::setZoom(int what) +RESULT eTSMPEGDecoder::setTrickmode() { - return -1; + if (m_state == stateTrickmode) + return 0; + + m_state = stateTrickmode; + m_changed |= changeState; + return setState(); } RESULT eTSMPEGDecoder::flush() @@ -1127,13 +1116,6 @@ void eTSMPEGDecoder::demux_event(int event) } } -RESULT eTSMPEGDecoder::setTrickmode(int what) -{ - m_is_trickmode = what; - setState(); - return 0; -} - RESULT eTSMPEGDecoder::getPTS(int what, pts_t &pts) { if (what == 0) /* auto */ diff --git a/lib/dvb/decoder.h b/lib/dvb/decoder.h index 05e07ef9..04501fe6 100644 --- a/lib/dvb/decoder.h +++ b/lib/dvb/decoder.h @@ -119,10 +119,12 @@ private: changeVideo = 1, changeAudio = 2, changePCR = 4, - changeText = 8 + changeText = 8, + changeState = 16, }; int m_changed, m_decoder; - int m_is_ff, m_is_sm, m_is_trickmode; + int m_state; + int m_ff_sm_ratio; int setState(); ePtr m_demux_event_conn; ePtr m_video_event_conn; @@ -148,17 +150,33 @@ public: RESULT setSyncPCR(int pcrpid); RESULT setTextPID(int textpid); RESULT setSyncMaster(int who); - RESULT start(); - RESULT preroll(); - RESULT freeze(int cont); - RESULT unfreeze(); - RESULT setSinglePictureMode(int when); - RESULT setPictureSkipMode(int what); - RESULT setFastForward(int frames_to_skip); - RESULT setSlowMotion(int repeat); - RESULT setZoom(int what); + + /* + The following states exist: + + - stop: data source closed, no playback + - pause: data source active, decoder paused + - play: data source active, decoder consuming + - decoder fast forward: data source linear, decoder drops frames + - trickmode, highspeed reverse: data source fast forwards / reverses, decoder just displays frames as fast as it can + - slow motion: decoder displays frames multiple times + */ + enum { + stateStop, + statePause, + statePlay, + stateDecoderFastForward, + stateTrickmode, + stateSlowMotion + }; + RESULT set(); /* just apply settings, keep state */ + RESULT play(); /* -> play */ + RESULT pause(); /* -> pause */ + RESULT setFastForward(int frames_to_skip); /* -> decoder fast forward */ + RESULT setSlowMotion(int repeat); /* -> slow motion **/ + RESULT setTrickmode(); /* -> highspeed fast forward */ + RESULT flush(); - RESULT setTrickmode(int what); RESULT showSinglePic(const char *filename); RESULT setRadioPic(const std::string &filename); /* what 0=auto, 1=video, 2=audio. */ diff --git a/lib/dvb/idvb.h b/lib/dvb/idvb.h index cda05894..bd1c7035 100644 --- a/lib/dvb/idvb.h +++ b/lib/dvb/idvb.h @@ -662,37 +662,24 @@ public: /** Set Sync mode to either audio or video master */ virtual RESULT setSyncMaster(int who)=0; - /** Apply settings with starting video */ - virtual RESULT start()=0; - /** Apply settings but don't start yet */ - virtual RESULT preroll()=0; + /** Apply settings but don't change state */ + virtual RESULT set()=0; + /* all those apply settings, then transition to the given state */ - /** Freeze frame. Either continue decoding (without display) or halt. */ - virtual RESULT freeze(int cont)=0; - /** Continue after freeze. */ - virtual RESULT unfreeze()=0; + /** play */ + virtual RESULT play()=0; + /** Freeze frame. */ + virtual RESULT pause()=0; /** fast forward by skipping frames. 0 is disabled, 2 is twice-the-speed, ... */ virtual RESULT setFastForward(int skip=0)=0; - // stop on .. Picture - enum { spm_I, spm_Ref, spm_Any }; - /** Stop on specific decoded picture. For I-Frame display. */ - virtual RESULT setSinglePictureMode(int when)=0; - - enum { pkm_B, pkm_PB }; - /** Fast forward by skipping either B or P/B pictures */ - virtual RESULT setPictureSkipMode(int what)=0; - /** Slow Motion by repeating pictures */ virtual RESULT setSlowMotion(int repeat)=0; - - enum { zoom_Normal, zoom_PanScan, zoom_Letterbox, zoom_Fullscreen }; - /** Set Zoom. mode *must* be fitting. */ - virtual RESULT setZoom(int what)=0; - - virtual RESULT setTrickmode(int what) = 0; + /** Display any complete data as fast as possible */ + virtual RESULT setTrickmode()=0; + virtual RESULT getPTS(int what, pts_t &pts) = 0; virtual RESULT showSinglePic(const char *filename) = 0; diff --git a/lib/python/Screens/InfoBarGenerics.py b/lib/python/Screens/InfoBarGenerics.py index cdaa2c1e..409018de 100644 --- a/lib/python/Screens/InfoBarGenerics.py +++ b/lib/python/Screens/InfoBarGenerics.py @@ -779,12 +779,21 @@ class InfoBarSeek: print "not pauseable." state = self.SEEK_STATE_PLAY - oldstate = self.seekstate self.seekstate = state - for i in range(3): - if oldstate[i] != self.seekstate[i]: - (self.session.nav.pause, pauseable.setFastForward, pauseable.setSlowMotion)[i](self.seekstate[i]) + if pauseable is not None: + if self.seekstate[0]: + print "resolved to PAUSE" + pauseable.pause() + elif self.seekstate[1]: + print "resolved to FAST FORWARD" + pauseable.setFastForward(self.seekstate[1]) + elif self.seekstate[2]: + print "resolved to SLOW MOTION" + pauseable.setSlowMotion(self.seekstate[2]) + else: + print "resolved to PLAY" + pauseable.unpause() for c in self.onPlayStateChanged: c(self.seekstate) diff --git a/lib/service/iservice.h b/lib/service/iservice.h index 02fc4508..e27752a2 100644 --- a/lib/service/iservice.h +++ b/lib/service/iservice.h @@ -392,6 +392,8 @@ class iPauseableService: public iObject ~iPausableService(); #endif public: + + /* this will set the *state* directly. So just call a SINGLE function of those at a time. */ virtual RESULT pause()=0; virtual RESULT unpause()=0; diff --git a/lib/service/servicedvb.cpp b/lib/service/servicedvb.cpp index 7e6c0337..af3ab206 100644 --- a/lib/service/servicedvb.cpp +++ b/lib/service/servicedvb.cpp @@ -1281,7 +1281,9 @@ RESULT eDVBServicePlay::pause(ePtr &ptr) RESULT eDVBServicePlay::setSlowMotion(int ratio) { + assert(ratio); /* The API changed: instead of calling setSlowMotion(0), call play! */ eDebug("eDVBServicePlay::setSlowMotion(%d)", ratio); + setFastForward_internal(0); if (m_decoder) return m_decoder->setSlowMotion(ratio); else @@ -1291,6 +1293,12 @@ RESULT eDVBServicePlay::setSlowMotion(int ratio) RESULT eDVBServicePlay::setFastForward(int ratio) { eDebug("eDVBServicePlay::setFastForward(%d)", ratio); + assert(ratio); + return setFastForward_internal(ratio); +} + +RESULT eDVBServicePlay::setFastForward_internal(int ratio) +{ int skipmode, ffratio; if (ratio > 8) @@ -1323,7 +1331,12 @@ RESULT eDVBServicePlay::setFastForward(int ratio) if (!m_decoder) return -1; - return m_decoder->setFastForward(ffratio); + if (ffratio == 0) + return 0; + else if (ffratio != 1) + return m_decoder->setFastForward(ffratio); + else + return m_decoder->setTrickmode(); } RESULT eDVBServicePlay::seek(ePtr &ptr) @@ -1352,10 +1365,10 @@ RESULT eDVBServicePlay::getLength(pts_t &len) RESULT eDVBServicePlay::pause() { eDebug("eDVBServicePlay::pause"); - if (!m_is_paused && m_decoder) + setFastForward_internal(0); + if (m_decoder) { - m_is_paused = 1; - return m_decoder->freeze(0); + return m_decoder->pause(); } else return -1; } @@ -1363,10 +1376,10 @@ RESULT eDVBServicePlay::pause() RESULT eDVBServicePlay::unpause() { eDebug("eDVBServicePlay::unpause"); - if (m_is_paused && m_decoder) + setFastForward_internal(0); + if (m_decoder) { - m_is_paused = 0; - return m_decoder->unfreeze(); + return m_decoder->play(); } else return -1; } @@ -1448,9 +1461,8 @@ RESULT eDVBServicePlay::getPlayPosition(pts_t &pos) RESULT eDVBServicePlay::setTrickmode(int trick) { - if (m_decoder) - m_decoder->setTrickmode(trick); - return 0; + /* currently unimplemented */ + return -1; } RESULT eDVBServicePlay::isCurrentlySeekable() @@ -1761,7 +1773,7 @@ RESULT eDVBServicePlay::selectTrack(unsigned int i) { int ret = selectAudioStream(i); - if (m_decoder->start()) + if (m_decoder->play()) return -5; return ret; @@ -2486,12 +2498,12 @@ void eDVBServicePlay::updateDecoder() m_teletext_parser->start(program.textPid); if (!m_is_primary) - m_decoder->setTrickmode(1); + m_decoder->setTrickmode(); if (m_is_paused) - m_decoder->preroll(); + m_decoder->pause(); else - m_decoder->start(); + m_decoder->play(); if (vpid > 0 && vpid < 0x2000) ; diff --git a/lib/service/servicedvb.h b/lib/service/servicedvb.h index d19b92d6..c19e1ed5 100644 --- a/lib/service/servicedvb.h +++ b/lib/service/servicedvb.h @@ -218,6 +218,7 @@ private: int m_current_audio_stream; int selectAudioStream(int n = -1); + RESULT setFastForward_internal(int ratio); /* timeshift */ ePtr m_record; -- cgit v1.2.3 From 979cdde152f5998de6593f1d3b6998bb224d5c97 Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Fri, 13 Feb 2009 01:13:59 +0100 Subject: fix merge --- lib/dvb/decoder.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/dvb/decoder.cpp b/lib/dvb/decoder.cpp index f73dbdd9..6f0ead65 100644 --- a/lib/dvb/decoder.cpp +++ b/lib/dvb/decoder.cpp @@ -295,7 +295,6 @@ eDVBAudio::~eDVBAudio() DEFINE_REF(eDVBVideo); eDVBVideo::eDVBVideo(eDVBDemux *demux, int dev) -<<<<<<< HEAD:lib/dvb/decoder.cpp : m_demux(demux), m_dev(dev), m_width(-1), m_height(-1), m_framerate(-1), m_aspect(-1), m_progressive(-1) { -- cgit v1.2.3 From dce87891f204f8e1f7151c4a3ba00b9dd048e795 Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Fri, 13 Feb 2009 03:41:57 +0100 Subject: - While recording, collect startcodes and save them into ".sc"-files - this allows finding iframes for fast forward/reverse more easily - when in fast forward, strictly just output good (=complete iframes) data (this might break dm7025, we will fix this later) - draw smaller, fixed-size bar in position gauge --- lib/dvb/decoder.cpp | 4 +- lib/dvb/demux.cpp | 28 ++- lib/dvb/demux.h | 2 +- lib/dvb/dvb.cpp | 56 +++-- lib/dvb/idemux.h | 2 +- lib/dvb/pvrparse.cpp | 302 ++++++++++++++++++++------ lib/dvb/pvrparse.h | 26 ++- lib/dvb/tstools.cpp | 70 +++++- lib/dvb/tstools.h | 2 + lib/gui/epositiongauge.cpp | 2 +- lib/python/Components/Converter/StringList.py | 6 + lib/python/Components/Renderer/Listbox.py | 4 + lib/service/servicedvb.cpp | 18 +- lib/service/servicedvbrecord.cpp | 10 +- 14 files changed, 416 insertions(+), 116 deletions(-) diff --git a/lib/dvb/decoder.cpp b/lib/dvb/decoder.cpp index 6f0ead65..a4cffb77 100644 --- a/lib/dvb/decoder.cpp +++ b/lib/dvb/decoder.cpp @@ -1071,7 +1071,9 @@ RESULT eTSMPEGDecoder::setAC3Delay(int delay) } eTSMPEGDecoder::eTSMPEGDecoder(eDVBDemux *demux, int decoder) - :m_demux(demux), m_changed(0), m_decoder(decoder), m_video_clip_fd(-1), m_showSinglePicTimer(eTimer::create(eApp)) + : m_demux(demux), + m_vpid(-1), m_vtype(-1), m_apid(-1), m_atype(-1), m_pcrpid(-1), m_textpid(-1), + m_changed(0), m_decoder(decoder), m_video_clip_fd(-1), m_showSinglePicTimer(eTimer::create(eApp)) { demux->connectEvent(slot(*this, &eTSMPEGDecoder::demux_event), m_demux_event_conn); CONNECT(m_showSinglePicTimer->timeout, eTSMPEGDecoder::finishShowSinglePic); diff --git a/lib/dvb/demux.cpp b/lib/dvb/demux.cpp index 810b10a5..918ecec6 100644 --- a/lib/dvb/demux.cpp +++ b/lib/dvb/demux.cpp @@ -402,9 +402,10 @@ class eDVBRecordFileThread: public eFilePushThread { public: eDVBRecordFileThread(); - void setTimingPID(int pid); + void setTimingPID(int pid, int type); - void saveTimingInformation(const std::string &filename); + void startSaveMetaInformation(const std::string &filename); + void stopSaveMetaInformation(); int getLastPTS(pts_t &pts); protected: int filterRecordData(const unsigned char *data, int len, size_t ¤t_span_remaining); @@ -422,14 +423,19 @@ eDVBRecordFileThread::eDVBRecordFileThread() m_current_offset = 0; } -void eDVBRecordFileThread::setTimingPID(int pid) +void eDVBRecordFileThread::setTimingPID(int pid, int type) { - m_ts_parser.setPid(pid); + m_ts_parser.setPid(pid, type); } -void eDVBRecordFileThread::saveTimingInformation(const std::string &filename) +void eDVBRecordFileThread::startSaveMetaInformation(const std::string &filename) { - m_stream_info.save(filename.c_str()); + m_stream_info.startSave(filename.c_str()); +} + +void eDVBRecordFileThread::stopSaveMetaInformation() +{ + m_stream_info.stopSave(); } int eDVBRecordFileThread::getLastPTS(pts_t &pts) @@ -520,6 +526,9 @@ RESULT eDVBTSRecorder::start() ::ioctl(m_source_fd, DMX_START); #endif + + if (m_target_filename != "") + m_thread->startSaveMetaInformation(m_target_filename); m_thread->start(m_source_fd, m_target_fd); m_running = 1; @@ -553,11 +562,11 @@ RESULT eDVBTSRecorder::removePID(int pid) return 0; } -RESULT eDVBTSRecorder::setTimingPID(int pid) +RESULT eDVBTSRecorder::setTimingPID(int pid, int type) { if (m_running) return -1; - m_thread->setTimingPID(pid); + m_thread->setTimingPID(pid, type); return 0; } @@ -590,8 +599,7 @@ RESULT eDVBTSRecorder::stop() close(m_source_fd); m_source_fd = -1; - if (m_target_filename != "") - m_thread->saveTimingInformation(m_target_filename + ".ap"); + m_thread->stopSaveMetaInformation(); return 0; } diff --git a/lib/dvb/demux.h b/lib/dvb/demux.h index 14501b98..7a697d49 100644 --- a/lib/dvb/demux.h +++ b/lib/dvb/demux.h @@ -94,7 +94,7 @@ public: RESULT addPID(int pid); RESULT removePID(int pid); - RESULT setTimingPID(int pid); + RESULT setTimingPID(int pid, int type); RESULT setTargetFD(int fd); RESULT setTargetFilename(const char *filename); diff --git a/lib/dvb/dvb.cpp b/lib/dvb/dvb.cpp index c320fc78..4bbed519 100644 --- a/lib/dvb/dvb.cpp +++ b/lib/dvb/dvb.cpp @@ -974,7 +974,7 @@ int eDVBChannelFilePush::filterRecordData(const unsigned char *_data, int len, s } #endif -#if 1 /* This codepath is required on Broadcom-based Dreamboxes (DM800, DM8000) and strips away non-I-frames. */ +#if 0 if (!m_iframe_search) return len; @@ -1272,6 +1272,21 @@ void eDVBChannel::getNextSourceSpan(off_t current_offset, size_t bytes_read, off eDebug("getNextSourceSpan, current offset is %08llx, m_skipmode_m = %d!", current_offset, m_skipmode_m); current_offset += align(m_skipmode_m, blocksize); + + if (m_skipmode_m) + { + eDebug("we are at %llx, and we try to find the iframe here:", current_offset); + size_t iframe_len; + off_t iframe_start = current_offset; + + if (m_tstools.findIFrame(iframe_start, iframe_len, (m_skipmode_m < 0) ? -1 : +1)) + eDebug("failed"); + else + { + current_offset = align(iframe_start, blocksize); + max = align(iframe_len, blocksize); + } + } while (!m_cue->m_seek_requests.empty()) { @@ -1348,6 +1363,10 @@ void eDVBChannel::getNextSourceSpan(off_t current_offset, size_t bytes_read, off eDebug("get offset for pts=%lld failed!", pts); continue; } + + size_t iframe_len; + /* try to align to iframe */ + m_tstools.findIFrame(offset, iframe_len, pts < 0 ? -1 : 1); eDebug("ok, resolved skip (rel: %d, diff %lld), now at %08llx", relative, pts, offset); current_offset = align(offset, blocksize); /* in case tstools return non-aligned offset */ @@ -1417,30 +1436,23 @@ void eDVBChannel::getNextSourceSpan(off_t current_offset, size_t bytes_read, off } } - if (m_source_span.empty()) { - if ((current_offset < -m_skipmode_m) && (m_skipmode_m < 0)) - { - eDebug("reached SOF"); - m_skipmode_m = 0; - m_pvr_thread->sendEvent(eFilePushThread::evtUser); - } + if ((current_offset < -m_skipmode_m) && (m_skipmode_m < 0)) + { + eDebug("reached SOF"); + m_skipmode_m = 0; + m_pvr_thread->sendEvent(eFilePushThread::evtUser); + } + + if (m_source_span.empty()) + { start = current_offset; size = max; - } else { - off_t tmp2, tmp = align(m_source_span.rbegin()->second, blocksize); - pts_t len; - getLength(len); - m_tstools.getOffset(tmp2, len, 1); - if (current_offset == tmp || current_offset == tmp2) { - start = tmp2; - size = max; - } else { - start = tmp - align(512*1024, blocksize); - size = align(512*1024, blocksize); - } + eDebug("NO CUESHEET. (%08llx, %d)", start, size); + } else + { + start = current_offset; + size = 0; } - - eDebug("END OF CUESHEET. (%08llx, %d)", start, size); return; } diff --git a/lib/dvb/idemux.h b/lib/dvb/idemux.h index 9432afb6..e92b1e75 100644 --- a/lib/dvb/idemux.h +++ b/lib/dvb/idemux.h @@ -30,7 +30,7 @@ public: virtual RESULT addPID(int pid) = 0; virtual RESULT removePID(int pid) = 0; - virtual RESULT setTimingPID(int pid) = 0; + virtual RESULT setTimingPID(int pid, int type) = 0; virtual RESULT setTargetFD(int fd) = 0; /* for saving additional meta data. */ diff --git a/lib/dvb/pvrparse.cpp b/lib/dvb/pvrparse.cpp index 71cbd602..1393bf77 100644 --- a/lib/dvb/pvrparse.cpp +++ b/lib/dvb/pvrparse.cpp @@ -6,9 +6,36 @@ #error no byte order defined! #endif -int eMPEGStreamInformation::save(const char *filename) +eMPEGStreamInformation::eMPEGStreamInformation() + : m_structure_cache_valid(0), m_structure_read(0), m_structure_write(0) { - FILE *f = fopen(filename, "wb"); +} + +eMPEGStreamInformation::~eMPEGStreamInformation() +{ + if (m_structure_read) + fclose(m_structure_read); + if (m_structure_write) + fclose(m_structure_write); +} + +int eMPEGStreamInformation::startSave(const char *filename) +{ + m_filename = filename; + m_structure_write = fopen((m_filename + ".sc").c_str(), "wb"); + return 0; +} + +int eMPEGStreamInformation::stopSave(void) +{ + if (m_structure_write) + { + fclose(m_structure_write); + m_structure_write = 0; + } + if (m_filename == "") + return -1; + FILE *f = fopen((m_filename + ".ap").c_str(), "wb"); if (!f) return -1; @@ -31,7 +58,11 @@ int eMPEGStreamInformation::save(const char *filename) int eMPEGStreamInformation::load(const char *filename) { - FILE *f = fopen(filename, "rb"); + m_filename = filename; + if (m_structure_read) + fclose(m_structure_read); + m_structure_read = fopen((std::string(m_filename) + ".sc").c_str(), "rb"); + FILE *f = fopen((std::string(m_filename) + ".ap").c_str(), "rb"); if (!f) return -1; m_access_points.clear(); @@ -284,6 +315,117 @@ int eMPEGStreamInformation::getNextAccessPoint(pts_t &ts, const pts_t &start, in return 0; } +void eMPEGStreamInformation::writeStructureEntry(off_t offset, structure_data data) +{ + unsigned long long d[2]; +#if BYTE_ORDER == BIG_ENDIAN + d[0] = offset; + d[1] = data; +#else + d[0] = bswap_64(offset); + d[1] = bswap_64(data); +#endif + if (m_structure_write) + fwrite(d, sizeof(d), 1, m_structure_write); +} + +int eMPEGStreamInformation::getStructureEntry(off_t &offset, unsigned long long &data, int get_next) +{ + if (!m_structure_read) + { + eDebug("getStructureEntry failed because of no m_structure_read"); + return -1; + } + + const int struture_cache_entries = sizeof(m_structure_cache) / 16; + if ((!m_structure_cache_valid) || ((off_t)m_structure_cache[0] > offset) || ((off_t)m_structure_cache[(struture_cache_entries - (get_next ? 2 : 1)) * 2] <= offset)) + { + fseek(m_structure_read, 0, SEEK_END); + int l = ftell(m_structure_read); + unsigned long long d[2]; + const int entry_size = sizeof d; + + /* do a binary search */ + int count = l / entry_size; + int i = 0; + + while (count) + { + int step = count >> 1; + + fseek(m_structure_read, (i + step) * entry_size, SEEK_SET); + if (!fread(d, 1, entry_size, m_structure_read)) + { + eDebug("read error at entry %d", i); + return -1; + } + +#if BYTE_ORDER != BIG_ENDIAN + d[0] = bswap_64(d[0]); + d[1] = bswap_64(d[1]); +#endif +// eDebug("%d: %08llx > %llx", i, d[0], d[1]); + + if (d[0] < (unsigned long long)offset) + { + i += step + 1; + count -= step + 1; + } else + count = step; + } + + eDebug("found %d", i); + + /* put that in the middle */ + i -= struture_cache_entries / 2; + if (i < 0) + i = 0; + eDebug("cache starts at %d", i); + fseek(m_structure_read, i * entry_size, SEEK_SET); + int num = fread(m_structure_cache, entry_size, struture_cache_entries, m_structure_read); + eDebug("%d entries", num); + for (i = 0; i < struture_cache_entries; ++i) + { + if (i < num) + { +#if BYTE_ORDER != BIG_ENDIAN + m_structure_cache[i * 2] = bswap_64(m_structure_cache[i * 2]); + m_structure_cache[i * 2 + 1] = bswap_64(m_structure_cache[i * 2 + 1]); +#endif + } else + { + m_structure_cache[i * 2] = 0x7fffffffffffffffULL; /* fill with harmless content */ + m_structure_cache[i * 2 + 1] = 0; + } + } + m_structure_cache_valid = 1; + } + + int i = 0; + while ((off_t)m_structure_cache[i * 2] <= offset) + { + ++i; + if (i == struture_cache_entries) + { + eDebug("structure data consistency fail!, we are looking for %llx, but last entry is %llx", offset, m_structure_cache[i*2-2]); + return -1; + } + } + if (!i) + { + eDebug("structure data (first entry) consistency fail!"); + return -1; + } + + if (!get_next) + --i; + +// eDebug("[%d] looked for %llx, found %llx=%llx", sizeof offset, offset, m_structure_cache[i * 2], m_structure_cache[i * 2 + 1]); + offset = m_structure_cache[i * 2]; + data = m_structure_cache[i * 2 + 1]; + return 0; +} + eMPEGStreamParserTS::eMPEGStreamParserTS(eMPEGStreamInformation &streaminfo): m_streaminfo(streaminfo), m_pktptr(0), m_pid(-1), m_need_next_packet(0), m_skip(0), m_last_pts_valid(0) { } @@ -293,16 +435,15 @@ int eMPEGStreamParserTS::processPacket(const unsigned char *pkt, off_t offset) if (!wantPacket(pkt)) eWarning("something's wrong."); - const unsigned char *end = pkt + 188; + const unsigned char *end = pkt + 188, *begin = pkt; - if (!(pkt[3] & 0x10)) - { - eWarning("[TSPARSE] PUSI set but no payload."); - return 0; - } + int pusi = !!(pkt[1] & 0x40); - if (pkt[3] & 0x20) // adaption field present? - pkt += pkt[4] + 4 + 1; /* skip adaption field and header */ + if (!(pkt[3] & 0x10)) /* no payload? */ + return 0; + + if (pkt[3] & 0x20) // adaptation field present? + pkt += pkt[4] + 4 + 1; /* skip adaptation field and header */ else pkt += 4; /* skip header */ @@ -311,78 +452,96 @@ int eMPEGStreamParserTS::processPacket(const unsigned char *pkt, off_t offset) eWarning("[TSPARSE] dropping huge adaption field"); return 0; } - - // ok, we now have the start of the payload, aligned with the PES packet start. - if (pkt[0] || pkt[1] || (pkt[2] != 1)) - { - eWarning("broken startcode"); - return 0; - } - - + pts_t pts = 0; int ptsvalid = 0; - if (pkt[7] & 0x80) // PTS present? + if (pusi) { - pts = ((unsigned long long)(pkt[ 9]&0xE)) << 29; - pts |= ((unsigned long long)(pkt[10]&0xFF)) << 22; - pts |= ((unsigned long long)(pkt[11]&0xFE)) << 14; - pts |= ((unsigned long long)(pkt[12]&0xFF)) << 7; - pts |= ((unsigned long long)(pkt[13]&0xFE)) >> 1; - ptsvalid = 1; - - m_last_pts = pts; - m_last_pts_valid = 1; - -#if 0 - int sec = pts / 90000; - int frm = pts % 90000; - int min = sec / 60; - sec %= 60; - int hr = min / 60; - min %= 60; - int d = hr / 24; - hr %= 24; + // ok, we now have the start of the payload, aligned with the PES packet start. + if (pkt[0] || pkt[1] || (pkt[2] != 1)) + { + eWarning("broken startcode"); + return 0; + } + + if (pkt[7] & 0x80) // PTS present? + { + pts = ((unsigned long long)(pkt[ 9]&0xE)) << 29; + pts |= ((unsigned long long)(pkt[10]&0xFF)) << 22; + pts |= ((unsigned long long)(pkt[11]&0xFE)) << 14; + pts |= ((unsigned long long)(pkt[12]&0xFF)) << 7; + pts |= ((unsigned long long)(pkt[13]&0xFE)) >> 1; + ptsvalid = 1; + + m_last_pts = pts; + m_last_pts_valid = 1; + + #if 0 + int sec = pts / 90000; + int frm = pts % 90000; + int min = sec / 60; + sec %= 60; + int hr = min / 60; + min %= 60; + int d = hr / 24; + hr %= 24; + + eDebug("pts: %016llx %d:%02d:%02d:%02d:%05d", pts, d, hr, min, sec, frm); + #endif + } - eDebug("pts: %016llx %d:%02d:%02d:%02d:%05d", pts, d, hr, min, sec, frm); -#endif + /* advance to payload */ + pkt += pkt[8] + 9; } - - /* advance to payload */ - pkt += pkt[8] + 9; - /* sometimes, there are zeros before the startcode. */ while (pkt < (end-4)) - if (pkt[0] || pkt[1] || pkt[2]) - break; - else - pkt++; - - /* if startcode found */ -// eDebug("%02x %02x %02x %02x", pkt[0], pkt[1], pkt[2], pkt[3]); - if (!(pkt[0] || pkt[1] || (pkt[2] != 1))) { - if (pkt[3] == 0xb3) /* sequence header */ + int pkt_offset = pkt - begin; + if (!(pkt[0] || pkt[1] || (pkt[2] != 1))) { - if (ptsvalid) +// eDebug("SC %02x %02x %02x %02x, %02x", pkt[0], pkt[1], pkt[2], pkt[3], pkt[4]); + int sc = pkt[3]; + + if (m_streamtype == 0) /* mpeg2 */ { - m_streaminfo.m_access_points[offset] = pts; -// eDebug("Sequence header at %llx, pts %llx", offset, pts); - } else - /*eDebug("Sequence header but no valid PTS value.")*/; - } + if ((sc == 0x00) || (sc == 0xb3) || (sc == 0xb8)) /* picture, sequence, group start code */ + { + unsigned long long data = sc | (pkt[4] << 8) | (pkt[5] << 16) | (pkt[6] << 24); + m_streaminfo.writeStructureEntry(offset + pkt_offset, data & 0xFFFFFFFFULL); + } + if (pkt[3] == 0xb3) /* sequence header */ + { + if (ptsvalid) + { + m_streaminfo.m_access_points[offset] = pts; + // eDebug("Sequence header at %llx, pts %llx", offset, pts); + } else + /*eDebug("Sequence header but no valid PTS value.")*/; + } + } - if (pkt[3] == 0x09 && /* MPEG4 AVC unit access delimiter */ - (pkt[4] >> 5) == 0) /* and I-frame */ - { - if (ptsvalid) + if (m_streamtype == 1) /* H.264 */ { - m_streaminfo.m_access_points[offset] = pts; -// eDebug("MPEG4 AVC UAD at %llx, pts %llx", offset, pts); - } else - /*eDebug("MPEG4 AVC UAD but no valid PTS value.")*/; + if (sc == 0x09) + { + /* store image type */ + unsigned long long data = sc | (pkt[4] << 8); + m_streaminfo.writeStructureEntry(offset + pkt_offset, data); + } + if (pkt[3] == 0x09 && /* MPEG4 AVC NAL unit access delimiter */ + (pkt[4] >> 5) == 0) /* and I-frame */ + { + if (ptsvalid) + { + m_streaminfo.m_access_points[offset] = pts; + // eDebug("MPEG4 AVC UAD at %llx, pts %llx", offset, pts); + } else + /*eDebug("MPEG4 AVC UAD but no valid PTS value.")*/; + } + } } + ++pkt; } return 0; } @@ -405,7 +564,7 @@ inline int eMPEGStreamParserTS::wantPacket(const unsigned char *hdr) const if (hdr[1] & 0x40) /* pusi set: yes. */ return 1; - return 0; + return m_streamtype == 0; /* we need all packets for MPEG2, but only PUSI packets for H.264 */ } void eMPEGStreamParserTS::parseData(off_t offset, const void *data, unsigned int len) @@ -520,10 +679,11 @@ void eMPEGStreamParserTS::parseData(off_t offset, const void *data, unsigned int } } -void eMPEGStreamParserTS::setPid(int _pid) +void eMPEGStreamParserTS::setPid(int _pid, int type) { m_pktptr = 0; m_pid = _pid; + m_streamtype = type; } int eMPEGStreamParserTS::getLastPTS(pts_t &last_pts) diff --git a/lib/dvb/pvrparse.h b/lib/dvb/pvrparse.h index 20d33470..28c0314a 100644 --- a/lib/dvb/pvrparse.h +++ b/lib/dvb/pvrparse.h @@ -12,6 +12,8 @@ class eMPEGStreamInformation { public: + eMPEGStreamInformation(); + ~eMPEGStreamInformation(); /* we order by off_t here, since the timestamp may */ /* wrap around. */ /* we only record sequence start's pts values here. */ @@ -23,7 +25,8 @@ public: /* these are non-fixed up pts value (like m_access_points), just used to accelerate stuff. */ std::multimap m_pts_to_offset; - int save(const char *filename); + int startSave(const char *filename); + int stopSave(void); int load(const char *filename); /* recalculates timestampDeltas */ @@ -46,6 +49,23 @@ public: int getNextAccessPoint(pts_t &ts, const pts_t &start, int direction); bool empty(); + + typedef unsigned long long structure_data; + /* this is usually: + sc | (other_information << 8) + but is really specific to the used video encoder. + */ + void writeStructureEntry(off_t offset, structure_data data); + + /* get a structure entry at given offset (or previous one, if no exact match was found). + optionall, return next element. Offset will be returned. this allows you to easily + get previous and next structure elements. */ + int getStructureEntry(off_t &offset, unsigned long long &data, int get_next); + + std::string m_filename; + int m_structure_cache_valid; + unsigned long long m_structure_cache[1024]; + FILE *m_structure_read, *m_structure_write; }; /* Now we define the parser's state: */ @@ -54,7 +74,7 @@ class eMPEGStreamParserTS public: eMPEGStreamParserTS(eMPEGStreamInformation &streaminfo); void parseData(off_t offset, const void *data, unsigned int len); - void setPid(int pid); + void setPid(int pid, int streamtype); int getLastPTS(pts_t &last_pts); private: eMPEGStreamInformation &m_streaminfo; @@ -62,7 +82,7 @@ private: int m_pktptr; int processPacket(const unsigned char *pkt, off_t offset); inline int wantPacket(const unsigned char *hdr) const; - int m_pid; + int m_pid, m_streamtype; int m_need_next_packet; int m_skip; int m_last_pts_valid; diff --git a/lib/dvb/tstools.cpp b/lib/dvb/tstools.cpp index bd7ebce2..7ac86f08 100644 --- a/lib/dvb/tstools.cpp +++ b/lib/dvb/tstools.cpp @@ -32,7 +32,10 @@ int eDVBTSTools::openFile(const char *filename, int nostreaminfo) closeFile(); if (!nostreaminfo) - m_streaminfo.load((std::string(filename) + ".ap").c_str()); + { + eDebug("loading streaminfo for %s", filename); + m_streaminfo.load(filename); + } if (!m_streaminfo.empty()) m_use_streaminfo = 1; @@ -562,3 +565,68 @@ int eDVBTSTools::findPMT(int &pmt_pid, int &service_id) return -1; } + +int eDVBTSTools::findIFrame(off_t &_offset, size_t &len, int direction) +{ + off_t offset = _offset; +// eDebug("trying to find iFrame at %llx", offset); + + if (!m_use_streaminfo) + { + eDebug("can't get next iframe without streaminfo"); + return -1; + } + + /* let's find the iframe before the given offset */ + unsigned long long data; + while (1) + { + if (m_streaminfo.getStructureEntry(offset, data, (direction == 0) ? 1 : 0)) + { + eDebug("getting structure info for origin offset failed."); + return -1; + } + if (offset == 0x7fffffffffffffffLL) /* eof */ + { + eDebug("reached eof"); + return -1; + } + /* data is usually the start code in the lower 8 bit, and the next byte <<8. we extract the picture type from there */ + /* we know that we aren't recording startcode 0x09 for mpeg2, so this is safe */ + int is_start = (data & 0xE0FF) == 0x0009; /* H.264 NAL unit access delimiter with I-frame*/ + is_start |= (data & 0x3800FF) == 0x080000; /* MPEG2 picture start code with I-frame */ +// eDebug("%08llx@%llx -> %d", data, offset, is_start); + if (is_start) + break; + + if (direction == -1) + --offset; /* move to previous entry */ + else if (direction == +1) + direction = 0; + } + /* let's find the next frame after the given offset */ + off_t start = offset; + + do { + if (m_streaminfo.getStructureEntry(offset, data, 1)) + { + eDebug("get next failed"); + return -1; + } + if (offset == 0x7fffffffffffffffLL) /* eof */ + { + eDebug("reached eof (while looking for end of iframe)"); + return -1; + } +// eDebug("%08llx@%llx", data, offset); + } while (((data & 0xFF) != 9) && ((data & 0xFF) != 0x00)); /* next frame */ + + /* align to TS pkt start */ + start = start - (start % 188); + offset = offset - (offset % 188); + + len = offset - start; + _offset = start; +// eDebug("result: offset=%llx, len: %ld", offset, (int)len); + return 0; +} diff --git a/lib/dvb/tstools.h b/lib/dvb/tstools.h index 4bc04729..a8e0751e 100644 --- a/lib/dvb/tstools.h +++ b/lib/dvb/tstools.h @@ -55,6 +55,8 @@ public: int takeSample(off_t off, pts_t &p); int findPMT(int &pmt_pid, int &service_id); + + int findIFrame(off_t &offset, size_t &len, int direction); private: int m_pid; int m_maxrange; diff --git a/lib/gui/epositiongauge.cpp b/lib/gui/epositiongauge.cpp index b3ee5111..ff98c080 100644 --- a/lib/gui/epositiongauge.cpp +++ b/lib/gui/epositiongauge.cpp @@ -144,7 +144,7 @@ int ePositionGauge::event(int event, void *data, void *data2) { painter.setForegroundColor(gRGB(m_foreground_color)); int xi = scale(in), xo = scale(out); - painter.fill(eRect(xi, 10, xo-xi, s.height()-14)); + painter.fill(eRect(xi, (s.height()-4) / 2, xo-xi, 4)); } in = m_length; diff --git a/lib/python/Components/Converter/StringList.py b/lib/python/Components/Converter/StringList.py index c9488db0..08794b34 100644 --- a/lib/python/Components/Converter/StringList.py +++ b/lib/python/Components/Converter/StringList.py @@ -19,8 +19,11 @@ class StringList(Converter): def selectionChanged(self, index): self.source.selectionChanged(index) # update all non-master targets + print "changed selection in listbox!" for x in self.downstream_elements: + print "downstream element", x if x is not self.master: + print "is not master, so update to index", index x.index = index @cached @@ -43,3 +46,6 @@ class StringList(Converter): self.master.index = index index = property(getIndex, setIndex) + + def entry_changed(self, index): + self.downstream_elements.entry_changed(index) \ No newline at end of file diff --git a/lib/python/Components/Renderer/Listbox.py b/lib/python/Components/Renderer/Listbox.py index 8e510b4c..7a895330 100644 --- a/lib/python/Components/Renderer/Listbox.py +++ b/lib/python/Components/Renderer/Listbox.py @@ -78,3 +78,7 @@ class Listbox(Renderer, object): def changed(self, what): self.content = self.source.content + + def entry_changed(self, index): + if self.instance is not None: + self.instance.entryChanged(index) diff --git a/lib/service/servicedvb.cpp b/lib/service/servicedvb.cpp index 33cd865e..e3d960d4 100644 --- a/lib/service/servicedvb.cpp +++ b/lib/service/servicedvb.cpp @@ -370,13 +370,17 @@ int eStaticServiceDVBPVRInformation::getLength(const eServiceReference &ref) struct stat s; stat(ref.path.c_str(), &s); - if (tstools.openFile(ref.path.c_str())) + if (tstools.openFile(ref.path.c_str(), 1)) return 0; /* check if cached data is still valid */ if (m_parser.m_data_ok && (s.st_size == m_parser.m_filesize) && (m_parser.m_length)) return m_parser.m_length / 90000; + /* open again, this time with stream info */ + if (tstools.openFile(ref.path.c_str())) + return 0; + /* otherwise, re-calc length and update meta file */ pts_t len; if (tstools.calcLen(len)) @@ -502,6 +506,7 @@ RESULT eDVBPVRServiceOfflineOperations::getListOfFilenames(std::list= 0)) + { + eDebug("timeshift EOF, so let's go live"); switchToLive(); + } break; } } @@ -1173,9 +1181,9 @@ RESULT eDVBServicePlay::setFastForward_internal(int ratio) if (!m_decoder) return -1; - + if (ffratio == 0) - return 0; + return m_decoder->play(); else if (ffratio != 1) return m_decoder->setFastForward(ffratio); else @@ -1211,6 +1219,7 @@ RESULT eDVBServicePlay::pause() setFastForward_internal(0); if (m_decoder) { + m_is_paused = 1; return m_decoder->pause(); } else return -1; @@ -1222,6 +1231,7 @@ RESULT eDVBServicePlay::unpause() setFastForward_internal(0); if (m_decoder) { + m_is_paused = 0; return m_decoder->play(); } else return -1; @@ -2136,6 +2146,8 @@ void eDVBServicePlay::switchToLive() if (!m_timeshift_active) return; + eDebug("SwitchToLive"); + m_cue = 0; m_decoder = 0; m_decode_demux = 0; diff --git a/lib/service/servicedvbrecord.cpp b/lib/service/servicedvbrecord.cpp index c2767e8d..5b7b5d8c 100644 --- a/lib/service/servicedvbrecord.cpp +++ b/lib/service/servicedvbrecord.cpp @@ -270,7 +270,7 @@ int eDVBServiceRecord::doRecord() if (program.pmtPid != -1) pids_to_record.insert(program.pmtPid); // PMT - int timing_pid = -1; + int timing_pid = -1, timing_pid_type = -1; eDebugNoNewLine("RECORD: have %d video stream(s)", program.videoStreams.size()); if (!program.videoStreams.empty()) @@ -283,7 +283,10 @@ int eDVBServiceRecord::doRecord() pids_to_record.insert(i->pid); if (timing_pid == -1) + { timing_pid = i->pid; + timing_pid_type = i->type; + } if (i != program.videoStreams.begin()) eDebugNoNewLine(", "); @@ -302,7 +305,10 @@ int eDVBServiceRecord::doRecord() pids_to_record.insert(i->pid); if (timing_pid == -1) + { timing_pid = i->pid; + timing_pid_type = -1; + } if (i != program.audioStreams.begin()) eDebugNoNewLine(", "); @@ -358,7 +364,7 @@ int eDVBServiceRecord::doRecord() } if (timing_pid != -1) - m_record->setTimingPID(timing_pid); + m_record->setTimingPID(timing_pid, timing_pid_type); m_pids_active = pids_to_record; -- cgit v1.2.3 From 8351aa6cc857d1113b38f34e9c2dbd3e47ec9ffa Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Fri, 13 Feb 2009 14:05:55 +0100 Subject: fix timeshift, a bit --- lib/service/servicedvb.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/lib/service/servicedvb.cpp b/lib/service/servicedvb.cpp index e3d960d4..4773d097 100644 --- a/lib/service/servicedvb.cpp +++ b/lib/service/servicedvb.cpp @@ -2205,7 +2205,7 @@ void eDVBServicePlay::updateDecoder() eDVBServicePMTHandler &h = m_timeshift_active ? m_service_handler_timeshift : m_service_handler; eDVBServicePMTHandler::program program; - if (h.getProgramInfo(program)) + if (h.getProgramInfo(program) && m_service_handler.getProgramInfo(program)) eDebug("getting program info failed."); else { @@ -2318,10 +2318,9 @@ void eDVBServicePlay::updateDecoder() m_teletext_parser->start(program.textPid); - if (!m_is_primary) +/* if (!m_is_primary) m_decoder->setTrickmode(); - - if (m_is_paused) + else */ if (m_is_paused) m_decoder->pause(); else m_decoder->play(); @@ -2346,7 +2345,7 @@ void eDVBServicePlay::updateDecoder() m_dvb_service->setCacheEntry(eDVBService::cPCRPID, pcrpid); m_dvb_service->setCacheEntry(eDVBService::cTPID, tpid); } - } + } m_have_video_pid = (vpid > 0 && vpid < 0x2000); } -- cgit v1.2.3 From 5698c2b573e69c2e62ee8212893f620f0588c208 Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Fri, 13 Feb 2009 14:40:56 +0100 Subject: better fix for timeshift --- lib/dvb/pmt.cpp | 5 ++++- lib/service/servicedvb.cpp | 4 ++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/dvb/pmt.cpp b/lib/dvb/pmt.cpp index 279ec74f..0198c8f7 100644 --- a/lib/dvb/pmt.cpp +++ b/lib/dvb/pmt.cpp @@ -605,12 +605,15 @@ void eDVBServicePMTHandler::SDTScanEvent(int event) } } -int eDVBServicePMTHandler::tune(eServiceReferenceDVB &ref, int use_decode_demux, eCueSheet *cue, bool simulate) +int eDVBServicePMTHandler::tune(eServiceReferenceDVB &ref, int use_decode_demux, eCueSheet *cue, bool simulate, eDVBService *service) { RESULT res=0; m_reference = ref; m_use_decode_demux = use_decode_demux; + + /* use given service as backup. This is used for timeshift where we want to clone the live stream using the cache, but in fact have a PVR channel */ + m_service = service; /* is this a normal (non PVR) channel? */ if (ref.path.empty()) diff --git a/lib/service/servicedvb.cpp b/lib/service/servicedvb.cpp index 4773d097..8a609095 100644 --- a/lib/service/servicedvb.cpp +++ b/lib/service/servicedvb.cpp @@ -2189,7 +2189,7 @@ void eDVBServicePlay::switchToTimeshift() r.path = m_timeshift_file; m_cue = new eCueSheet(); - m_service_handler_timeshift.tune(r, 1, m_cue); /* use the decoder demux for everything */ + m_service_handler_timeshift.tune(r, 1, m_cue, 0, m_dvb_service); /* use the decoder demux for everything */ eDebug("eDVBServicePlay::switchToTimeshift, in pause mode now."); pause(); @@ -2205,7 +2205,7 @@ void eDVBServicePlay::updateDecoder() eDVBServicePMTHandler &h = m_timeshift_active ? m_service_handler_timeshift : m_service_handler; eDVBServicePMTHandler::program program; - if (h.getProgramInfo(program) && m_service_handler.getProgramInfo(program)) + if (h.getProgramInfo(program)) eDebug("getting program info failed."); else { -- cgit v1.2.3 From 5c8125ecf32d5c9199a6ff79302bdac2aefdf108 Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Fri, 13 Feb 2009 14:44:53 +0100 Subject: define a foreground color, so we can see in/out positions --- data/skin.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/skin.xml b/data/skin.xml index e2dbacdd..ca1e97d0 100755 --- a/data/skin.xml +++ b/data/skin.xml @@ -310,7 +310,7 @@ Position - + Gauge -- cgit v1.2.3 From d043db1c05a2d5c66b6faddd6f18d18a5a832515 Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Fri, 13 Feb 2009 14:45:13 +0100 Subject: allow service to be overridden for pvr services --- lib/dvb/pmt.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/dvb/pmt.h b/lib/dvb/pmt.h index 3e22174b..cabc6ace 100644 --- a/lib/dvb/pmt.h +++ b/lib/dvb/pmt.h @@ -204,7 +204,7 @@ public: int getChannel(eUsePtr &channel); void resetCachedProgram() { m_have_cached_program = false; } - int tune(eServiceReferenceDVB &ref, int use_decode_demux, eCueSheet *sg=0, bool simulate=false); + int tune(eServiceReferenceDVB &ref, int use_decode_demux, eCueSheet *sg=0, bool simulate=false, eDVBService *service = 0); void free(); private: bool m_have_cached_program; -- cgit v1.2.3 From c178c52d01ede2b9c474fd4a3677acdecf18f0c6 Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Fri, 13 Feb 2009 14:45:41 +0100 Subject: show decoder state --- lib/dvb/decoder.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/dvb/decoder.cpp b/lib/dvb/decoder.cpp index a4cffb77..edefd764 100644 --- a/lib/dvb/decoder.cpp +++ b/lib/dvb/decoder.cpp @@ -855,6 +855,9 @@ int eTSMPEGDecoder::setState() if ((nott && m_text) || (!m_text && !nott)) m_changed |= changeText | changeState; + const char *decoder_states[] = {"stop", "pause", "play", "decoderfastforward", "trickmode", "slowmotion"}; + eDebug("decoder state: %s, vpid=%d, apid=%d", decoder_states[m_state], m_vpid, m_apid); + bool changed = !!m_changed; #if HAVE_DVB_API_VERSION < 3 bool checkAVSync = m_changed & (changeAudio|changeVideo|changePCR); -- cgit v1.2.3 From eccbf5ccedceaf21d4d2557e5ef12ef9a53930ca Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Fri, 13 Feb 2009 14:45:58 +0100 Subject: decoder_play is already called in caller --- lib/service/servicedvb.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/service/servicedvb.cpp b/lib/service/servicedvb.cpp index 8a609095..81157ae5 100644 --- a/lib/service/servicedvb.cpp +++ b/lib/service/servicedvb.cpp @@ -1183,7 +1183,7 @@ RESULT eDVBServicePlay::setFastForward_internal(int ratio) return -1; if (ffratio == 0) - return m_decoder->play(); + ; /* return m_decoder->play(); is done in caller*/ else if (ffratio != 1) return m_decoder->setFastForward(ffratio); else -- cgit v1.2.3 From 166db5a9c9222c82939eede51d964c706039ebe8 Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Wed, 18 Feb 2009 03:09:08 +0100 Subject: optional fuzzing support --- lib/dvb/demux.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/lib/dvb/demux.cpp b/lib/dvb/demux.cpp index 918ecec6..11465186 100644 --- a/lib/dvb/demux.cpp +++ b/lib/dvb/demux.cpp @@ -5,6 +5,13 @@ #include #include +// #define FUZZING 1 + +#if FUZZING + /* change every 1:FUZZING_PROPABILITY byte */ +#define FUZZING_PROPABILITY 100 +#endif + #if HAVE_DVB_API_VERSION < 3 #include @@ -178,6 +185,14 @@ void eDVBSectionReader::data(int) __u8 data[4096]; // max. section size int r; r = ::read(fd, data, 4096); +#if FUZZING + int j; + for (j = 0; j < r; ++j) + { + if (!(rand()%FUZZING_PROPABILITY)) + data[j] ^= rand(); + } +#endif if(r < 0) { eWarning("ERROR reading section - %m\n"); @@ -243,11 +258,13 @@ RESULT eDVBSectionReader::start(const eDVBSectionFilterMask &mask) #else sct.flags = DMX_IMMEDIATE_START; #endif +#if !FUZZING if (mask.flags & eDVBSectionFilterMask::rfCRC) { sct.flags |= DMX_CHECK_CRC; checkcrc = 1; } else +#endif checkcrc = 0; memcpy(sct.filter.filter, mask.data, DMX_FILTER_SIZE); -- cgit v1.2.3