diff --git a/data/locale/deutsch.locale b/data/locale/deutsch.locale index 242a65ea6..fb97cedf5 100644 --- a/data/locale/deutsch.locale +++ b/data/locale/deutsch.locale @@ -543,6 +543,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 @@ -2367,6 +2369,7 @@ 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 ... diff --git a/data/locale/english.locale b/data/locale/english.locale index 9a2b0a27f..9f3ba5738 100644 --- a/data/locale/english.locale +++ b/data/locale/english.locale @@ -543,6 +543,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 @@ -2367,6 +2369,7 @@ 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 ... diff --git a/src/driver/record.cpp b/src/driver/record.cpp index 747662fa9..8be35dd28 100644 --- a/src/driver/record.cpp +++ b/src/driver/record.cpp @@ -176,6 +176,18 @@ 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 + //NI #if 0 int CRecordInstance::GetStatus() @@ -263,8 +275,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 eb4ec9fa0..34a83fd52 100644 --- a/src/gui/record_setup.cpp +++ b/src/gui/record_setup.cpp @@ -255,6 +255,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 2f9d8eae8..9c11a2e97 100644 --- a/src/neutrino.cpp +++ b/src/neutrino.cpp @@ -756,6 +756,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); @@ -1611,6 +1615,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 ab245ed02..8a08d24e7 100644 --- a/src/system/locals.h +++ b/src/system/locals.h @@ -570,6 +570,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, @@ -2394,6 +2396,7 @@ typedef enum 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, diff --git a/src/system/locals_intern.h b/src/system/locals_intern.h index 8ce0cace6..2a6dc7e51 100644 --- a/src/system/locals_intern.h +++ b/src/system/locals_intern.h @@ -570,6 +570,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", @@ -2394,6 +2396,7 @@ const char * locale_real_names[] = "recording.already_found_check", "recording.end", "recording.end_text", + "recording.failed", "recording.fill_text", "recording.is_running", "recording.start", diff --git a/src/system/settings.h b/src/system/settings.h index e9bddc108..adc25c204 100644 --- a/src/system/settings.h +++ b/src/system/settings.h @@ -505,6 +505,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;