diff --git a/data/locale/deutsch.locale b/data/locale/deutsch.locale index a4dc26d10..8a08e7394 100644 --- a/data/locale/deutsch.locale +++ b/data/locale/deutsch.locale @@ -479,6 +479,8 @@ extra.lodirection Längengrad-Ausrichtung extra.longitude Längengrad extra.menu_left_exit "links" = Menü zurück extra.north Norden +extra.record_bufsize Schreib-Puffer-Größe +extra.record_bufsize_dmx DMX-Puffer-Größe extra.record_time Maximale Aufnahmedauer extra.record_time_ts Maximale Timeshiftdauer extra.rotor_swap Rotor dreht Ost/West @@ -2170,6 +2172,10 @@ rclock.title Fernbedienung sperren rclock.unlockmsg Fernbedienung reaktiviert recording.already_found %s\nwurde bereits gefunden. Trotzdem aufnehmen? recording.already_found_check Prüfe Aufnahmen +recording.end Aufnahmeende festlegen +recording.end_text Soll die Aufnahme zum Ende der aktuellen Sendung stoppen? +recording.failed Aufzeichnung ist fehlgeschlagen! +recording.fill_text Das Aufnahmemedium ist zu %d%% gefüllt. Trotzdem aufnehmen? recording.is_running Folgende Aufnahme läuft bereits! Neue Aufnahme starten? recording.start Starte Aufnahme, bitte warten ... recording.startstop_msg Meldung bei Aufnahme Start/Ende diff --git a/data/locale/english.locale b/data/locale/english.locale index e0b387cd8..0c790bd5c 100644 --- a/data/locale/english.locale +++ b/data/locale/english.locale @@ -479,6 +479,8 @@ extra.lodirection LoDirection extra.longitude Longitude extra.menu_left_exit "Left" = menu back extra.north North +extra.record_bufsize Write buffer size +extra.record_bufsize_dmx DMX buffer size extra.record_time Maximal recording duration extra.record_time_ts Maximal timeshift duration extra.rotor_swap Swap rotor east/west @@ -2170,6 +2172,10 @@ rclock.title Lock remote control rclock.unlockmsg Remote control unlocked recording.already_found %s\nwas already found. Nevertheless start record? recording.already_found_check Check recordings +recording.end Set record end +recording.end_text Stop this record at the end of current show? +recording.failed Recording failed! +recording.fill_text Record medium is filled up to %d%%. Nevertheless start record? recording.is_running This channel already recording. Start new record? recording.start Start recording, please wait ... recording.startstop_msg Message when recording is start/stop diff --git a/src/driver/record.cpp b/src/driver/record.cpp index b596d3f96..4c1178ff2 100644 --- a/src/driver/record.cpp +++ b/src/driver/record.cpp @@ -174,6 +174,19 @@ void CRecordInstance::WaitRecMsg(time_t StartTime, time_t WaitTime) usleep(100000); } +#if HAVE_ARM_HARDWARE +void recordingFailureHelper(void *data) +{ + CRecordInstance *inst = (CRecordInstance *) data; + std::string errormsg = std::string(g_Locale->getText(LOCALE_RECORDING_FAILED)) + "\n" + std::string(inst->GetFileName()); + CHintBox hintBox(LOCALE_MESSAGEBOX_INFO, errormsg.c_str()); + hintBox.paint(); + sleep(3); + hintBox.hide(); +} +#endif + + int CRecordInstance::GetStatus() { if (record) @@ -181,6 +194,7 @@ int CRecordInstance::GetStatus() return 0; } + record_error_msg_t CRecordInstance::Start(CZapitChannel * channel) { time_t msg_start_time = time(0); @@ -258,8 +272,15 @@ record_error_msg_t CRecordInstance::Start(CZapitChannel * channel) apids[numpids++] = allpids.PIDs.pmtpid; #endif +#if HAVE_ARM_HARDWARE + if(record == NULL) { + record = new cRecord(channel->getRecordDemux(), g_settings.recording_bufsize_dmx * 1024 * 1024, g_settings.recording_bufsize * 1024 * 1024); + record->setFailureCallback(&recordingFailureHelper, this); + } +#else if(record == NULL) record = new cRecord(channel->getRecordDemux() /*RECORD_DEMUX*/); +#endif record->Open(); diff --git a/src/gui/record_setup.cpp b/src/gui/record_setup.cpp index 9daf40fdb..d95d51f8a 100644 --- a/src/gui/record_setup.cpp +++ b/src/gui/record_setup.cpp @@ -247,6 +247,16 @@ int CRecordSetup::showRecordSetup() cover->setHint("", LOCALE_MENU_HINT_RECORD_AUTO_COVER); recordingSettings->addItem(cover); +#if HAVE_ARM_HARDWARE + CMenuOptionNumberChooser *ch; + ch = new CMenuOptionNumberChooser(LOCALE_EXTRA_RECORD_BUFSIZE, &g_settings.recording_bufsize, true, 1, 25, NULL); + ch->setNumberFormat("%d MB"); + recordingSettings->addItem(ch); + ch = new CMenuOptionNumberChooser(LOCALE_EXTRA_RECORD_BUFSIZE_DMX, &g_settings.recording_bufsize_dmx, true, 1, 25, NULL); + ch->setNumberFormat("%d MB"); + recordingSettings->addItem(ch); +#endif + recordingSettings->addItem(GenericMenuSeparatorLine); //timeshift diff --git a/src/neutrino.cpp b/src/neutrino.cpp index bd97b9988..a12b103c2 100644 --- a/src/neutrino.cpp +++ b/src/neutrino.cpp @@ -713,6 +713,10 @@ int CNeutrinoApp::loadSetup(const char * fname) g_settings.recording_stream_subtitle_pids = configfile.getBool("recordingmenu.stream_subtitle_pids", true); g_settings.recording_stream_pmt_pid = configfile.getBool("recordingmenu.stream_pmt_pid" , false); g_settings.recording_filename_template = configfile.getString("recordingmenu.filename_template" , "%C_%T_%d_%t"); +#if HAVE_ARM_HARDWARE + g_settings.recording_bufsize = configfile.getInt32("recording_bufsize", 4); + g_settings.recording_bufsize_dmx = configfile.getInt32("recording_bufsize_dmx", 2); +#endif g_settings.recording_choose_direct_rec_dir = configfile.getInt32( "recording_choose_direct_rec_dir", 0 ); g_settings.recording_epg_for_filename = configfile.getBool("recording_epg_for_filename" , true); g_settings.recording_epg_for_end = configfile.getBool("recording_epg_for_end" , true); @@ -1499,6 +1503,10 @@ void CNeutrinoApp::saveSetup(const char * fname) configfile.setBool ("shutdown_timer_record_type" , g_settings.shutdown_timer_record_type ); configfile.setBool ("recordingmenu.stream_vtxt_pid" , g_settings.recording_stream_vtxt_pid ); +#if HAVE_ARM_HARDWARE + configfile.setInt32 ("recording_bufsize" , g_settings.recording_bufsize); + configfile.setInt32 ("recording_bufsize_dmx" , g_settings.recording_bufsize_dmx); +#endif configfile.setBool ("recordingmenu.stream_subtitle_pids" , g_settings.recording_stream_subtitle_pids ); configfile.setBool ("recordingmenu.stream_pmt_pid" , g_settings.recording_stream_pmt_pid ); configfile.setString("recordingmenu.filename_template" , g_settings.recording_filename_template ); diff --git a/src/system/locals.h b/src/system/locals.h index 7c1b6683f..3a538bfca 100644 --- a/src/system/locals.h +++ b/src/system/locals.h @@ -506,6 +506,8 @@ typedef enum LOCALE_EXTRA_LONGITUDE, LOCALE_EXTRA_MENU_LEFT_EXIT, LOCALE_EXTRA_NORTH, + LOCALE_EXTRA_RECORD_BUFSIZE, + LOCALE_EXTRA_RECORD_BUFSIZE_DMX, LOCALE_EXTRA_RECORD_TIME, LOCALE_EXTRA_RECORD_TIME_TS, LOCALE_EXTRA_ROTOR_SWAP, @@ -2197,6 +2199,10 @@ typedef enum LOCALE_RCLOCK_UNLOCKMSG, LOCALE_RECORDING_ALREADY_FOUND, LOCALE_RECORDING_ALREADY_FOUND_CHECK, + LOCALE_RECORDING_END, + LOCALE_RECORDING_END_TEXT, + LOCALE_RECORDING_FAILED, + LOCALE_RECORDING_FILL_TEXT, LOCALE_RECORDING_IS_RUNNING, LOCALE_RECORDING_START, LOCALE_RECORDING_STARTSTOP_MSG, diff --git a/src/system/locals_intern.h b/src/system/locals_intern.h index d1f9bb2a4..cc7ce9048 100644 --- a/src/system/locals_intern.h +++ b/src/system/locals_intern.h @@ -506,6 +506,8 @@ const char * locale_real_names[] = "extra.longitude", "extra.menu_left_exit", "extra.north", + "extra.record_bufsize", + "extra.record_bufsize_dmx", "extra.record_time", "extra.record_time_ts", "extra.rotor_swap", @@ -2197,6 +2199,10 @@ const char * locale_real_names[] = "rclock.unlockmsg", "recording.already_found", "recording.already_found_check", + "recording.end", + "recording.end_text", + "recording.failed", + "recording.fill_text", "recording.is_running", "recording.start", "recording.startstop_msg", diff --git a/src/system/settings.h b/src/system/settings.h index 1e16d8ac0..585b46e61 100644 --- a/src/system/settings.h +++ b/src/system/settings.h @@ -500,6 +500,10 @@ struct SNeutrinoSettings int recording_audio_pids_std; int recording_audio_pids_alt; int recording_audio_pids_ac3; +#if HAVE_ARM_HARDWARE + int recording_bufsize; + int recording_bufsize_dmx; +#endif int recording_stream_vtxt_pid; int recording_stream_subtitle_pids; int recording_stream_pmt_pid;