From 9a98c77126d596ef4ca4f7f63d95e498eb15e682 Mon Sep 17 00:00:00 2001 From: vanhofen Date: Tue, 27 Jun 2017 23:45:57 +0200 Subject: [PATCH 01/12] audioplayer: change scanXmlData() arguments order ... switch url <-> name to get the same order as in other used functions (cherry picked from commit f97a29a785cf021e6deaa6382aae8300b646bc01) Signed-off-by: Thilo Graf Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/d75a3b0f58c7f6a2328387d5fc6799a486add595 Author: vanhofen Date: 2017-06-27 (Tue, 27 Jun 2017) Origin message was: ------------------ - audioplayer: change scanXmlData() arguments order ... switch url <-> name to get the same order as in other used functions (cherry picked from commit f97a29a785cf021e6deaa6382aae8300b646bc01) Signed-off-by: Thilo Graf ------------------ This commit was generated by Migit --- src/gui/audioplayer.cpp | 6 +++--- src/gui/audioplayer.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/gui/audioplayer.cpp b/src/gui/audioplayer.cpp index 91d0a3085..9ce933e3d 100644 --- a/src/gui/audioplayer.cpp +++ b/src/gui/audioplayer.cpp @@ -1141,7 +1141,7 @@ void CAudioPlayerGui::readDir_ic(void) { xmlDocPtr answer_parser = parseXml(answer.c_str()); scanBox->hide(); - scanXmlData(answer_parser, "server_name", "listen_url", "bitrate", true); + scanXmlData(answer_parser, "listen_url", "server_name", "bitrate", true); } else scanBox->hide(); @@ -1152,10 +1152,10 @@ void CAudioPlayerGui::readDir_ic(void) void CAudioPlayerGui::scanXmlFile(std::string filename) { xmlDocPtr answer_parser = parseXmlFile(filename.c_str()); - scanXmlData(answer_parser, "name", "url"); + scanXmlData(answer_parser, "url", "name"); } -void CAudioPlayerGui::scanXmlData(xmlDocPtr answer_parser, const char *nametag, const char *urltag, const char *bitratetag, bool usechild) +void CAudioPlayerGui::scanXmlData(xmlDocPtr answer_parser, const char *urltag, const char *nametag, const char *bitratetag, bool usechild) { #define IC_typetag "server_type" diff --git a/src/gui/audioplayer.h b/src/gui/audioplayer.h index c99f6dbc5..3f945c993 100644 --- a/src/gui/audioplayer.h +++ b/src/gui/audioplayer.h @@ -176,7 +176,7 @@ class CAudioPlayerGui : public CMenuTarget /** * Processes a loaded XML file/data of internet audiostreams or playlists */ - void scanXmlData(xmlDocPtr answer_parser, const char *nametag, const char *urltag, const char *bitratetag = NULL, bool usechild = false); + void scanXmlData(xmlDocPtr answer_parser, const char *urltag, const char *nametag, const char *bitratetag = NULL, bool usechild = false); /** * Reads the icecast directory (XML file) and calls scanXmlData From 684cf8076b2fb3a9308e688c1fc2075deedf8443 Mon Sep 17 00:00:00 2001 From: vanhofen Date: Tue, 27 Jun 2017 23:45:57 +0200 Subject: [PATCH 02/12] audiodec: unify cover handling (cherry picked from commit c5dbede1d3f23e7c88ea62a188809d65fda9b0ae) Signed-off-by: Thilo Graf Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/99d72a0b8a0f31cc1ad7a85d0f80bcdebb94d681 Author: vanhofen Date: 2017-06-27 (Tue, 27 Jun 2017) Origin message was: ------------------ - audiodec: unify cover handling (cherry picked from commit c5dbede1d3f23e7c88ea62a188809d65fda9b0ae) Signed-off-by: Thilo Graf ------------------ This commit was generated by Migit --- src/driver/audiodec/ffmpegdec.cpp | 8 +++++--- src/driver/audiodec/mp3dec.cpp | 5 +++-- src/global.h | 2 ++ 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/driver/audiodec/ffmpegdec.cpp b/src/driver/audiodec/ffmpegdec.cpp index 19c48a9eb..ef2583775 100644 --- a/src/driver/audiodec/ffmpegdec.cpp +++ b/src/driver/audiodec/ffmpegdec.cpp @@ -33,15 +33,19 @@ #include #include #include + +#include #include #include #include // UTF8 #include "ffmpegdec.h" + extern "C" { #include #include #include } + #if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(55, 28, 1) #define av_frame_alloc avcodec_alloc_frame #define av_frame_unref avcodec_get_frame_defaults @@ -63,8 +67,6 @@ extern cAudio * audioDecoder; #define ProgName "FfmpegDec" -#define COVERDIR "/tmp/cover" - static OpenThreads::Mutex mutex; static int cover_count = 0; @@ -521,7 +523,7 @@ bool CFfmpegDec::SetMetaData(FILE *_in, CAudioMetaData* m, bool save_cover) if (save_cover && (avc->streams[i]->disposition & AV_DISPOSITION_ATTACHED_PIC)) { mkdir(COVERDIR, 0755); std::string cover(COVERDIR); - cover += "/" + to_string(cover_count++) + ".jpg"; + cover += "/cover_" + to_string(cover_count++) + ".jpg"; FILE *f = fopen(cover.c_str(), "wb"); if (f) { AVPacket *pkt = &avc->streams[i]->attached_pic; diff --git a/src/driver/audiodec/mp3dec.cpp b/src/driver/audiodec/mp3dec.cpp index 69c11d5b4..c555add3f 100644 --- a/src/driver/audiodec/mp3dec.cpp +++ b/src/driver/audiodec/mp3dec.cpp @@ -1388,9 +1388,10 @@ bool CMP3Dec::SaveCover(FILE * in, CAudioMetaData * const m) data = id3_field_getbinarydata(field, &size); if ( data ) { + mkdir(COVERDIR, 0755); std::ostringstream cover; - cover.str(""); - cover << "/tmp/cover_" << cover_count++ << ".jpg"; + cover.str(COVERDIR); + cover << "/cover_" << cover_count++ << ".jpg"; FILE * pFile; pFile = fopen ( cover.str().c_str() , "wb" ); if (pFile) diff --git a/src/global.h b/src/global.h index 7bde595f7..6d3c5497e 100644 --- a/src/global.h +++ b/src/global.h @@ -47,6 +47,8 @@ #define NEUTRINO_SCAN_SETTINGS_FILE CONFIGDIR "/scan.conf" #define NEUTRINO_PARENTALLOCKED_FILE DATADIR "/neutrino/.plocked" +#define COVERDIR "/tmp/cover" + #define LOGODIR ICONSDIR "/logo" #define LOGODIR_VAR ICONSDIR_VAR "/logo" From a82d0e9e58d85713faeb0ae5cc571fdf427083af Mon Sep 17 00:00:00 2001 From: vanhofen Date: Tue, 27 Jun 2017 23:45:57 +0200 Subject: [PATCH 03/12] audioplayer: fix coordinates to clear title-box (cherry picked from commit 519de5279c8065322c46a33b5059adaa49eb84f8) Signed-off-by: Thilo Graf Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/4b4cf14d6ba0e1ae0964a98709213948ef6c9be2 Author: vanhofen Date: 2017-06-27 (Tue, 27 Jun 2017) Origin message was: ------------------ - audioplayer: fix coordinates to clear title-box (cherry picked from commit 519de5279c8065322c46a33b5059adaa49eb84f8) Signed-off-by: Thilo Graf ------------------ This commit was generated by Migit --- src/gui/audioplayer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/audioplayer.cpp b/src/gui/audioplayer.cpp index 9ce933e3d..cf33438a4 100644 --- a/src/gui/audioplayer.cpp +++ b/src/gui/audioplayer.cpp @@ -1697,7 +1697,7 @@ void CAudioPlayerGui::paintTitleBox() return; if (m_state == CAudioPlayerGui::STOP && m_show_playlist) - m_frameBuffer->paintBackgroundBoxRel(m_x, m_y, m_width, m_title_height); + m_frameBuffer->paintBackgroundBoxRel(m_x, m_y, m_width + OFFSET_SHADOW, m_title_height + OFFSET_SHADOW); else { // shadow From dc545ddf1d3fb191afdbd77267964be8d5bf999c Mon Sep 17 00:00:00 2001 From: vanhofen Date: Wed, 28 Jun 2017 19:53:38 +0200 Subject: [PATCH 04/12] audiometadata: add logo to metadata # Conflicts: # src/driver/audiometadata.cpp # src/driver/audiometadata.h cherry-picked from 9c58e2fc21eb701d44bedfe26b5dfd01fe800ceb Signed-off-by: Thilo Graf Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/b66ea2f9cc712b1708daa3e49adb063cd91e0f94 Author: vanhofen Date: 2017-06-28 (Wed, 28 Jun 2017) Origin message was: ------------------ - audiometadata: add logo to metadata # Conflicts: # src/driver/audiometadata.cpp # src/driver/audiometadata.h cherry-picked from 9c58e2fc21eb701d44bedfe26b5dfd01fe800ceb Signed-off-by: Thilo Graf ------------------ This commit was generated by Migit --- src/driver/audiometadata.cpp | 6 +++++- src/driver/audiometadata.h | 2 ++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/driver/audiometadata.cpp b/src/driver/audiometadata.cpp index 7dbe1bd08..8d48a0f10 100644 --- a/src/driver/audiometadata.cpp +++ b/src/driver/audiometadata.cpp @@ -64,6 +64,7 @@ CAudioMetaData::CAudioMetaData( const CAudioMetaData& src ) hasInfoOrXingTag( src.hasInfoOrXingTag ), artist( src.artist ), title( src.title ), album( src.album ), sc_station( src.sc_station ), date( src.date ), genre( src.genre ), track( src.track ),cover(src.cover), + logo( src.logo ), url( src.url ), cover_temporary( false ), changed( src.changed ) { @@ -97,9 +98,10 @@ void CAudioMetaData::operator=( const CAudioMetaData& src ) genre = src.genre; track = src.track; cover = src.cover; + logo = src.logo; + url = src.url; sc_station = src.sc_station; changed = src.changed; - changed = src.changed; cover_temporary = false; } @@ -125,6 +127,8 @@ void CAudioMetaData::clear() if (cover_temporary && !cover.empty()) unlink(cover.c_str()); cover.clear(); + logo.clear(); + url.clear(); cover_temporary=false; changed=false; } diff --git a/src/driver/audiometadata.h b/src/driver/audiometadata.h index 3f25fd79e..5220b0877 100644 --- a/src/driver/audiometadata.h +++ b/src/driver/audiometadata.h @@ -96,6 +96,8 @@ public: std::string genre; std::string track; std::string cover; + std::string logo; + std::string url; bool cover_temporary; bool changed; }; From b7f6c11c5939ea3fa8f9d2d1c4f1153a89a06696 Mon Sep 17 00:00:00 2001 From: vanhofen Date: Tue, 27 Jun 2017 23:45:57 +0200 Subject: [PATCH 05/12] audioplayer: fix position of meta data in titlebox (cherry picked from commit b49ce6f0e77f39d7264affceddf10aa7ea46ed24) Signed-off-by: Thilo Graf Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/f0c70b854cf7ceffe37a852ead9b5bea8b250feb Author: vanhofen Date: 2017-06-27 (Tue, 27 Jun 2017) Origin message was: ------------------ - audioplayer: fix position of meta data in titlebox (cherry picked from commit b49ce6f0e77f39d7264affceddf10aa7ea46ed24) Signed-off-by: Thilo Graf ------------------ This commit was generated by Migit --- src/gui/audioplayer.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/gui/audioplayer.cpp b/src/gui/audioplayer.cpp index cf33438a4..439856702 100644 --- a/src/gui/audioplayer.cpp +++ b/src/gui/audioplayer.cpp @@ -2093,8 +2093,12 @@ void CAudioPlayerGui::updateMetaData() if (updateMeta || updateScreen) { int cover_width = m_title_height + 2*OFFSET_INNER_MID; - m_frameBuffer->paintBoxRel(m_x + cover_width, m_y + OFFSET_INNER_SMALL + 2*m_item_height + OFFSET_INNER_SMALL, m_width - cover_width - OFFSET_INNER_MID, m_meta_height, COL_MENUHEAD_PLUS_0); - int xstart = ((m_width - 2*OFFSET_INNER_MID - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->getRenderWidth(m_metainfo))/2); + m_frameBuffer->paintBoxRel(m_x + cover_width, m_y + OFFSET_INNER_SMALL + 2*m_item_height + OFFSET_INNER_SMALL, m_width - OFFSET_INNER_MID - cover_width, m_meta_height, COL_MENUHEAD_PLUS_0); + + int w = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->getRenderWidth(m_metainfo); + int xstart = (m_width - w)/2; + if (xstart < OFFSET_INNER_MID) + xstart = OFFSET_INNER_MID; g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->RenderString(m_x + xstart, m_y + OFFSET_INNER_SMALL + 2*m_item_height + OFFSET_INNER_SMALL + m_meta_height, m_width - 2*xstart, m_metainfo, COL_MENUHEAD_TEXT); } } From fd6a3a90671a953218301a78eb50ab648b6f8dad Mon Sep 17 00:00:00 2001 From: vanhofen Date: Wed, 28 Jun 2017 11:29:03 +0200 Subject: [PATCH 06/12] audioplayer: reset idle time to avoid screensaver ... when returning from filebrowser (cherry picked from commit e65e21a0b8af97f8d097c2d436c39cb2d60a1505) Signed-off-by: Thilo Graf Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/bab708281acb3b12d8a8d48d0c5a69f08f482e69 Author: vanhofen Date: 2017-06-28 (Wed, 28 Jun 2017) Origin message was: ------------------ - audioplayer: reset idle time to avoid screensaver ... when returning from filebrowser (cherry picked from commit e65e21a0b8af97f8d097c2d436c39cb2d60a1505) Signed-off-by: Thilo Graf ------------------ This commit was generated by Migit --- src/gui/audioplayer.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gui/audioplayer.cpp b/src/gui/audioplayer.cpp index 439856702..c4ae07f58 100644 --- a/src/gui/audioplayer.cpp +++ b/src/gui/audioplayer.cpp @@ -1451,6 +1451,7 @@ bool CAudioPlayerGui::openFilebrowser(void) result = true; } + m_idletime = time(NULL); CVFD::getInstance()->setMode(CVFD::MODE_AUDIO); paintLCD(); // if playlist is turned off -> start playing immediately From 9ac898c88263c0b9957024115d1e4230c3ecd8e4 Mon Sep 17 00:00:00 2001 From: vanhofen Date: Wed, 28 Jun 2017 11:29:03 +0200 Subject: [PATCH 07/12] audioplayer: fix round borders in footer when playlist is hidden ... and use large roundings as in the other gui-elements cherry-picked from 102866f71d4f33912727d00f22ba1dde2b21d297 Signed-off-by: Thilo Graf Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/bb7b9e2207a062e52d3e063c8654c48b59d6c101 Author: vanhofen Date: 2017-06-28 (Wed, 28 Jun 2017) Origin message was: ------------------ - audioplayer: fix round borders in footer when playlist is hidden ... and use large roundings as in the other gui-elements cherry-picked from 102866f71d4f33912727d00f22ba1dde2b21d297 Signed-off-by: Thilo Graf ------------------ This commit was generated by Migit --- src/gui/audioplayer.cpp | 44 ++++++++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 18 deletions(-) diff --git a/src/gui/audioplayer.cpp b/src/gui/audioplayer.cpp index c4ae07f58..c360a281f 100644 --- a/src/gui/audioplayer.cpp +++ b/src/gui/audioplayer.cpp @@ -1605,7 +1605,6 @@ void CAudioPlayerGui::paintHead() CComponentsHeader header(m_x, m_y + m_title_height + OFFSET_SHADOW + OFFSET_INTER, m_width, m_header_height, LOCALE_AUDIOPLAYER_HEAD, NEUTRINO_ICON_AUDIO); header.enableShadow( CC_SHADOW_RIGHT | CC_SHADOW_CORNER_TOP_RIGHT | CC_SHADOW_CORNER_BOTTOM_RIGHT, -1, true); - header.setCorner(RADIUS_MID, CORNER_TOP); if (m_inetmode) header.setCaption(LOCALE_INETRADIO_NAME); @@ -1630,52 +1629,61 @@ void CAudioPlayerGui::paintFoot() { NEUTRINO_ICON_BUTTON_INFO, LOCALE_PICTUREVIEWER_HEAD } }; + int radius = RADIUS_LARGE; int button_y = m_y + m_height - OFFSET_SHADOW - m_info_height - OFFSET_INTER - OFFSET_SHADOW - 2*m_button_height; + int button_x = m_x; + int button_width = m_width; + + // ensure to get round corners in footer + if (!m_show_playlist && radius) + { + button_x += radius; + button_width -= 2*radius; + } // shadow - m_frameBuffer->paintBoxRel(m_x + OFFSET_SHADOW, button_y + OFFSET_SHADOW, m_width, 2*m_button_height, COL_SHADOW_PLUS_0, RADIUS_MID, (m_show_playlist ? CORNER_BOTTOM : CORNER_ALL)); - - m_frameBuffer->paintBoxRel(m_x, button_y, m_width, 2*m_button_height, COL_MENUFOOT_PLUS_0, RADIUS_MID, (m_show_playlist ? CORNER_BOTTOM : CORNER_ALL)); + m_frameBuffer->paintBoxRel(m_x + OFFSET_SHADOW, button_y + OFFSET_SHADOW, m_width, 2*m_button_height, COL_SHADOW_PLUS_0, radius, (m_show_playlist ? CORNER_BOTTOM : CORNER_ALL)); + m_frameBuffer->paintBoxRel(m_x, button_y, m_width, 2*m_button_height, COL_MENUFOOT_PLUS_0, radius, (m_show_playlist ? CORNER_BOTTOM : CORNER_ALL)); if (!m_playlist.empty()) - ::paintButtons(m_x, button_y + m_button_height, m_width, 3, SecondLineButtons, m_width, m_button_height); + ::paintButtons(button_x, button_y + m_button_height, button_width, 3, SecondLineButtons, button_width, m_button_height); if (m_key_level == 0) { if (m_playlist.empty()) { if (m_inetmode) - ::paintButtons(m_x, button_y, m_width, 2, AudioPlayerButtons[7], m_width, m_button_height); + ::paintButtons(button_x, button_y, button_width, 2, AudioPlayerButtons[7], button_width, m_button_height); else - ::paintButtons(m_x, button_y, m_width, 1, &(AudioPlayerButtons[7][0]), m_width, m_button_height); + ::paintButtons(button_x, button_y, button_width, 1, &(AudioPlayerButtons[7][0]), button_width, m_button_height); } else if (m_inetmode) - ::paintButtons(m_x, button_y, m_width, 4, AudioPlayerButtons[8], m_width, m_button_height); + ::paintButtons(button_x, button_y, button_width, 4, AudioPlayerButtons[8], button_width, m_button_height); else - ::paintButtons(m_x, button_y, m_width, 4, AudioPlayerButtons[1], m_width, m_button_height); + ::paintButtons(button_x, button_y, button_width, 4, AudioPlayerButtons[1], button_width, m_button_height); } else if (m_key_level == 1) { if (m_curr_audiofile.FileType != CFile::STREAM_AUDIO) - ::paintButtons(m_x, button_y, m_width, 4, AudioPlayerButtons[0], m_width, m_button_height); + ::paintButtons(button_x, button_y, button_width, 4, AudioPlayerButtons[0], button_width, m_button_height); else - ::paintButtons(m_x, button_y, m_width, 2, AudioPlayerButtons[6], m_width, m_button_height); + ::paintButtons(button_x, button_y, button_width, 2, AudioPlayerButtons[6], button_width, m_button_height); } else // key_level == 2 { if (m_state == CAudioPlayerGui::STOP) { if (m_select_title_by_name) - ::paintButtons(m_x, button_y, m_width, 2, AudioPlayerButtons[5], m_width, m_button_height); + ::paintButtons(button_x, button_y, button_width, 2, AudioPlayerButtons[5], button_width, m_button_height); else - ::paintButtons(m_x, button_y, m_width, 2, AudioPlayerButtons[4], m_width, m_button_height); + ::paintButtons(button_x, button_y, button_width, 2, AudioPlayerButtons[4], button_width, m_button_height); } else { if (m_select_title_by_name) - ::paintButtons(m_x, button_y, m_width, 2, AudioPlayerButtons[3], m_width, m_button_height); + ::paintButtons(button_x, button_y, button_width, 2, AudioPlayerButtons[3], button_width, m_button_height); else - ::paintButtons(m_x, button_y, m_width, 2, AudioPlayerButtons[2], m_width, m_button_height); + ::paintButtons(button_x, button_y, button_width, 2, AudioPlayerButtons[2], button_width, m_button_height); } } } @@ -1702,10 +1710,10 @@ void CAudioPlayerGui::paintTitleBox() else { // shadow - m_frameBuffer->paintBoxRel(m_x + OFFSET_SHADOW, m_y + OFFSET_SHADOW, m_width, m_title_height, COL_SHADOW_PLUS_0, RADIUS_MID); + m_frameBuffer->paintBoxRel(m_x + OFFSET_SHADOW, m_y + OFFSET_SHADOW, m_width, m_title_height, COL_SHADOW_PLUS_0, RADIUS_LARGE); - m_frameBuffer->paintBoxRel(m_x, m_y, m_width, m_title_height, COL_MENUHEAD_PLUS_0, RADIUS_MID); - m_frameBuffer->paintBoxFrame(m_x, m_y, m_width, m_title_height, OFFSET_INNER_MIN, COL_FRAME_PLUS_0, RADIUS_MID); + m_frameBuffer->paintBoxRel(m_x, m_y, m_width, m_title_height, COL_MENUHEAD_PLUS_0, RADIUS_LARGE); + m_frameBuffer->paintBoxFrame(m_x, m_y, m_width, m_title_height, 2, COL_FRAME_PLUS_0, RADIUS_LARGE); paintCover(); From ec16de6f289636b12f1ed7e994a67d2550ac41cf Mon Sep 17 00:00:00 2001 From: vanhofen Date: Wed, 28 Jun 2017 15:58:40 +0200 Subject: [PATCH 08/12] audioplayer: reset idle time to avoid screensaver ... when returning from shoutcast-filebrowser (cherry picked from commit a07fbc0cd627e47f0a73f1b09de9e6e0700dbf68) Signed-off-by: Thilo Graf Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/b62bb3715f32b62fd6c25d3f7c08ac9760bc5520 Author: vanhofen Date: 2017-06-28 (Wed, 28 Jun 2017) Origin message was: ------------------ - audioplayer: reset idle time to avoid screensaver ... when returning from shoutcast-filebrowser (cherry picked from commit a07fbc0cd627e47f0a73f1b09de9e6e0700dbf68) Signed-off-by: Thilo Graf ------------------ This commit was generated by Migit --- src/gui/audioplayer.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gui/audioplayer.cpp b/src/gui/audioplayer.cpp index c360a281f..bc18229b3 100644 --- a/src/gui/audioplayer.cpp +++ b/src/gui/audioplayer.cpp @@ -1523,6 +1523,7 @@ bool CAudioPlayerGui::openSCbrowser(void) #endif result = true; } + m_idletime = time(NULL); CVFD::getInstance()->setMode(CVFD::MODE_AUDIO); paintLCD(); // if playlist is turned off -> start playing immediately From 6c9584034575a5f08a38203853fc5aebd5e9122f Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Wed, 28 Jun 2017 20:36:51 +0200 Subject: [PATCH 09/12] CComponentsFooter: remove FIXME tag fixed since 1b2eea185fc3a50a027d7834c340a184b1eb62e4 Obsolete wrong types caused this. Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/47f7426aa727985aa0cdb06cfc77b26ceef698af Author: Thilo Graf Date: 2017-06-28 (Wed, 28 Jun 2017) ------------------ This commit was generated by Migit --- src/gui/components/cc_frm_footer.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/components/cc_frm_footer.cpp b/src/gui/components/cc_frm_footer.cpp index 74b48d754..913de581e 100644 --- a/src/gui/components/cc_frm_footer.cpp +++ b/src/gui/components/cc_frm_footer.cpp @@ -123,8 +123,8 @@ void CComponentsFooter::setButtonLabels(const struct button_label_cc * const con * If already existing some items then subtract those width from footer width. * ...so we have the possible usable size for button container. */ - if(!v_cc_items.empty()){ //FIXME: footer container seems always not empty here, so here j initialized with = 1. I dont't know where it comes from! dbt! - for (size_t j= 1; j< size(); j++) + if(!v_cc_items.empty()){ + for (size_t j= 0; j< size(); j++) w_chain -= getCCItem(j)->getWidth(); } From 9b0650d695426be6c0a606937e021082d5d9ea12 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Wed, 28 Jun 2017 21:24:09 +0200 Subject: [PATCH 10/12] settings.h: add define for minimal frame width Mostly we are using a frame width of 2 lines. This should ensure correct scaling with other screen resolution. Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/6aaa4031972d7a82c3f4c5683122ff819478e4cf Author: Thilo Graf Date: 2017-06-28 (Wed, 28 Jun 2017) ------------------ This commit was generated by Migit --- src/system/settings.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/system/settings.h b/src/system/settings.h index 34de4f54f..fd72578b2 100644 --- a/src/system/settings.h +++ b/src/system/settings.h @@ -938,6 +938,8 @@ const time_settings_struct_t timing_setting[SNeutrinoSettings::TIMING_SETTING_CO #define SCROLLBAR_WIDTH (OFFSET_INNER_MID + 2*OFFSET_INNER_MIN) +#define FRAME_MIN_WIDTH CFrameBuffer::getInstance()->scale2Res(2) + #define DETAILSLINE_WIDTH CFrameBuffer::getInstance()->scale2Res(16) #define BIGFONT_FACTOR 1.5 From 43d2aeee1c9535d80eb1dd3c76090aac7a579304 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Wed, 28 Jun 2017 22:03:12 +0200 Subject: [PATCH 11/12] CAudioPlayerGui: add cc scquare objekt as title box, fix caption bg colors Use of cc square object saves unnecessary paintBoxRel() calls. BgColors of metatdata and time display were different to titlebox body color, but was not to see with all themes. btw: time box was too much on the right side. Frame of titelbox was overpainted but was not very noticeable if frame width < 2. Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/86742b1d72a5a306fb5181f1ec418f4c5c4c09c9 Author: Thilo Graf Date: 2017-06-28 (Wed, 28 Jun 2017) ------------------ This commit was generated by Migit --- src/gui/audioplayer.cpp | 40 +++++++++++++++++++++++++--------------- src/gui/audioplayer.h | 1 + 2 files changed, 26 insertions(+), 15 deletions(-) diff --git a/src/gui/audioplayer.cpp b/src/gui/audioplayer.cpp index bc18229b3..34e022b86 100644 --- a/src/gui/audioplayer.cpp +++ b/src/gui/audioplayer.cpp @@ -154,6 +154,7 @@ CAudioPlayerGui::CAudioPlayerGui(bool inetmode) m_inetmode = inetmode; m_detailsline = NULL; m_infobox = NULL; + m_titlebox = NULL; Init(); } @@ -209,6 +210,7 @@ CAudioPlayerGui::~CAudioPlayerGui() m_title2Pos.clear(); delete m_detailsline; delete m_infobox; + delete m_titlebox; } const struct button_label AudioPlayerButtons[][4] = @@ -1707,15 +1709,23 @@ void CAudioPlayerGui::paintTitleBox() return; if (m_state == CAudioPlayerGui::STOP && m_show_playlist) - m_frameBuffer->paintBackgroundBoxRel(m_x, m_y, m_width + OFFSET_SHADOW, m_title_height + OFFSET_SHADOW); + { + if (m_titlebox) + { + m_titlebox->kill(); + delete m_titlebox; m_titlebox = NULL; + } + } else { - // shadow - m_frameBuffer->paintBoxRel(m_x + OFFSET_SHADOW, m_y + OFFSET_SHADOW, m_width, m_title_height, COL_SHADOW_PLUS_0, RADIUS_LARGE); - - m_frameBuffer->paintBoxRel(m_x, m_y, m_width, m_title_height, COL_MENUHEAD_PLUS_0, RADIUS_LARGE); - m_frameBuffer->paintBoxFrame(m_x, m_y, m_width, m_title_height, 2, COL_FRAME_PLUS_0, RADIUS_LARGE); - + // title box + if (!m_titlebox) + { + m_titlebox = new CComponentsShapeSquare(m_x, m_y, m_width, m_title_height, NULL, CC_SHADOW_ON); + m_titlebox->enableFrame(true, FRAME_MIN_WIDTH); + m_titlebox->setCorner(RADIUS_LARGE); + } + m_titlebox->paint(false); paintCover(); // first line (Track number) @@ -1738,7 +1748,7 @@ void CAudioPlayerGui::paintTitleBox() int xstart = (m_width - w)/2; if (xstart < OFFSET_INNER_MID) xstart = OFFSET_INNER_MID; - g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(m_x + xstart, m_y + OFFSET_INNER_SMALL + 1*m_item_height, m_width - 2*OFFSET_INNER_MID, tmp, COL_MENUHEAD_TEXT); + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(m_x + xstart, m_y + OFFSET_INNER_SMALL + 1*m_item_height, m_width - 2*OFFSET_INNER_MID, tmp, COL_MENUHEAD_TEXT); //caption "current track" // second line (Artist/Title...) GetMetaData(m_curr_audiofile); @@ -1763,7 +1773,7 @@ void CAudioPlayerGui::paintTitleBox() xstart = (m_width - w)/2; if (xstart < OFFSET_INNER_MID) xstart = OFFSET_INNER_MID; - g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(m_x + xstart, m_y + OFFSET_INNER_SMALL + 2*m_item_height, m_width - 2*OFFSET_INNER_MID, tmp, COL_MENUHEAD_TEXT); + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(m_x + xstart, m_y + OFFSET_INNER_SMALL + 2*m_item_height, m_width - 2*OFFSET_INNER_MID, tmp, COL_MENUHEAD_TEXT); //artist - title // reset so fields get painted always m_metainfo.clear(); @@ -2103,7 +2113,7 @@ void CAudioPlayerGui::updateMetaData() if (updateMeta || updateScreen) { int cover_width = m_title_height + 2*OFFSET_INNER_MID; - m_frameBuffer->paintBoxRel(m_x + cover_width, m_y + OFFSET_INNER_SMALL + 2*m_item_height + OFFSET_INNER_SMALL, m_width - OFFSET_INNER_MID - cover_width, m_meta_height, COL_MENUHEAD_PLUS_0); + m_frameBuffer->paintBoxRel(m_x + cover_width, m_y + OFFSET_INNER_SMALL + 2*m_item_height + OFFSET_INNER_SMALL, m_width - OFFSET_INNER_MID - cover_width, m_meta_height, m_titlebox->getColorBody()); int w = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->getRenderWidth(m_metainfo); int xstart = (m_width - w)/2; @@ -2151,7 +2161,7 @@ void CAudioPlayerGui::updateTimes(const bool force) if (m_inetmode) w_total_time = 0; - int x_total_time = m_x + m_width - OFFSET_INNER_MID - w_total_time; + int x_total_time = m_x + m_width - OFFSET_INNER_MID - w_total_time - 2*m_titlebox->getFrameThickness(); // played time offset to align this value on the right side int o_played_time = std::max(w_faked_time - w_played_time, 0); int x_faked_time = m_x + m_width - OFFSET_INNER_MID - w_total_time - w_faked_time; @@ -2160,20 +2170,20 @@ void CAudioPlayerGui::updateTimes(const bool force) if (updateTotal && !m_inetmode) { - m_frameBuffer->paintBoxRel(x_total_time, y_times, w_total_time + OFFSET_INNER_MID, m_item_height, COL_MENUHEAD_PLUS_0); + m_frameBuffer->paintBoxRel(x_total_time, y_times, w_total_time + OFFSET_INNER_MID, m_item_height, m_titlebox->getColorBody()); if (m_time_total > 0) { - g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x_total_time, y_times + m_item_height, w_total_time, total_time, COL_MENUHEAD_TEXT); + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x_total_time, y_times + m_item_height, w_total_time, total_time, COL_MENUHEAD_TEXT); //total time } } if (updatePlayed || (m_state == CAudioPlayerGui::PAUSE)) { - m_frameBuffer->paintBoxRel(x_faked_time, y_times, w_faked_time, m_item_height, COL_MENUHEAD_PLUS_0); + m_frameBuffer->paintBoxRel(x_faked_time, y_times, w_faked_time, m_item_height, m_titlebox->getColorBody()); struct timeval tv; gettimeofday(&tv, NULL); if ((m_state != CAudioPlayerGui::PAUSE) || (tv.tv_sec & 1)) { - g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x_played_time, y_times + m_item_height, w_played_time, played_time, COL_MENUHEAD_TEXT); + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x_played_time, y_times + m_item_height, w_played_time, played_time, COL_MENUHEAD_TEXT); //elapsed time } } } diff --git a/src/gui/audioplayer.h b/src/gui/audioplayer.h index 3f945c993..8cb914a12 100644 --- a/src/gui/audioplayer.h +++ b/src/gui/audioplayer.h @@ -128,6 +128,7 @@ class CAudioPlayerGui : public CMenuTarget bool m_inetmode; CComponentsDetailsLine *m_detailsline; CComponentsInfoBox *m_infobox; + CComponentsShapeSquare *m_titlebox; SMSKeyInput m_SMSKeyInput; From 8d1a669301e16544f42d7e88ffe2cef94a3d2261 Mon Sep 17 00:00:00 2001 From: Michael Liebmann Date: Thu, 29 Jun 2017 15:03:16 +0200 Subject: [PATCH 12/12] lib-libtuxtxt-tuxtxt.cpp avoid segfault, supplement to 6771de1 Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/a6344b352790fe63bb4c84c2d4a5fc3ab5a05029 Author: Michael Liebmann Date: 2017-06-29 (Thu, 29 Jun 2017) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- lib/libtuxtxt/tuxtxt.cpp | 44 ++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/lib/libtuxtxt/tuxtxt.cpp b/lib/libtuxtxt/tuxtxt.cpp index d5d093a6a..102efd4c1 100644 --- a/lib/libtuxtxt/tuxtxt.cpp +++ b/lib/libtuxtxt/tuxtxt.cpp @@ -47,6 +47,9 @@ static int cfg_national_subset; static int screen_x, screen_y, screen_w, screen_h; +void FillRect(int x, int y, int w, int h, fb_pixel_t color, bool modeFullColor=false); +void FillBorder(fb_pixel_t color, bool modeFullColor=false); + fb_pixel_t *getFBp(int *y) { if (*y < (int)var_screeninfo.yres) @@ -56,34 +59,31 @@ fb_pixel_t *getFBp(int *y) return lbb; } -void FillRect(int x, int y, int w, int h, int color) +void FillRect(int x, int y, int w, int h, fb_pixel_t color, bool modeFullColor/*=false*/) { - if(color < 0 || SIZECOLTABLE < color){ - printf("FIXME array size %i color %i not in range\n",SIZECOLTABLE,color); - return; - } fb_pixel_t *p = getFBp(&y); MARK_FB(x, y, w, h); p += x + y * stride; - if (w > 0) + if (w > 0) { + fb_pixel_t col = (modeFullColor) ? color : bgra[color]; for (int count = 0; count < h; count++) { fb_pixel_t *dest0 = p; for (int i = 0; i < w; i++) - *(dest0++) = bgra[color]; + *(dest0++) = col; p += stride; } + } } - -void FillBorder(int color) +void FillBorder(fb_pixel_t color, bool modeFullColor/*=false*/) { int ys = (var_screeninfo.yres-var_screeninfo.yoffset); - FillRect(0 , ys ,StartX ,var_screeninfo.yres ,color); - FillRect(StartX, ys ,displaywidth,StartY ,color); - FillRect(StartX, ys+StartY+25*fontheight,displaywidth,var_screeninfo.yres-(StartY+25*fontheight),color); + FillRect(0 , ys ,StartX ,var_screeninfo.yres ,color, modeFullColor); + FillRect(StartX, ys ,displaywidth,StartY ,color, modeFullColor); + FillRect(StartX, ys+StartY+25*fontheight,displaywidth,var_screeninfo.yres-(StartY+25*fontheight),color, modeFullColor); if (screenmode == 0 ) - FillRect(StartX+displaywidth, ys,var_screeninfo.xres-(StartX+displaywidth),var_screeninfo.yres ,color); + FillRect(StartX+displaywidth, ys,var_screeninfo.xres-(StartX+displaywidth),var_screeninfo.yres ,color, modeFullColor); } int getIndexOfPageInHotlist() @@ -258,7 +258,7 @@ void RenderClearMenuLineBB(char *p, tstPageAttr *attrcol, tstPageAttr *attr) memset(p-TOPMENUCHARS, ' ', TOPMENUCHARS); /* init with spaces */ } -void ClearBB(int color) +void ClearBB(fb_pixel_t color) { FillRect(0, (var_screeninfo.yres - var_screeninfo.yoffset), var_screeninfo.xres, var_screeninfo.yres, color); } @@ -270,7 +270,7 @@ void ClearFB(int /*color*/) } #if 0 //never used -void ClearB(int color) +void ClearB(fb_pixel_t color) { FillRect(0, 0, var_screeninfo.xres, var_screeninfo.yres, color); /* framebuffer */ FillRect(0, var_screeninfo.yres, var_screeninfo.xres, var_screeninfo.yres, color); /* backbuffer */ @@ -841,7 +841,7 @@ int eval_triplet(int iOData, tstCachedPage *pstCachedPage, { *pAPy = RowAddress2Row(iAddress); /* new Active Row */ - int color = iData & 0x1f; + fb_pixel_t color = iData & 0x1f; int row = *pAPy0 + *pAPy; int maxrow; #if TUXTXT_DEBUG @@ -892,7 +892,7 @@ int eval_triplet(int iOData, tstCachedPage *pstCachedPage, *pAPx = *pAPy = 0; /* new Active Position 0,0 */ if (*endcol == 40) /* active object */ { - int color = iData & 0x1f; + fb_pixel_t color = iData & 0x1f; int row = *pAPy0; // + *pAPy; int maxrow; @@ -4096,7 +4096,7 @@ void RenderDRCS( //FIX ME } -void DrawVLine(int x, int y, int l, int color) +void DrawVLine(int x, int y, int l, fb_pixel_t color) { fb_pixel_t *p = getFBp(&y); MARK_FB(x, y, 0, l); @@ -4109,7 +4109,7 @@ void DrawVLine(int x, int y, int l, int color) } } -void DrawHLine(int x, int y, int l, int color) +void DrawHLine(int x, int y, int l, fb_pixel_t color) { int ltmp; fb_pixel_t *p = getFBp(&y); @@ -4130,7 +4130,7 @@ void FillRectMosaicSeparated(int x, int y, int w, int h, int fgcolor, int bgcolo } } -void FillTrapez(int x0, int y0, int l0, int xoffset1, int h, int l1, int color) +void FillTrapez(int x0, int y0, int l0, int xoffset1, int h, int l1, fb_pixel_t color) { fb_pixel_t *p = getFBp(&y0); MARK_FB(x0, y0, l0, h); @@ -4789,7 +4789,7 @@ void RenderChar(int Char, tstPageAttr *Attribute, int zoom, int yoffset) { for (Bit = 0x80; Bit; Bit >>= 1) { - int color; + fb_pixel_t color; if (--pixtodo < 0) break; @@ -5559,7 +5559,7 @@ void CopyBB2FB() /* adapt background of backbuffer if changed */ if (StartX > 0 && *lfb != *lbb) { - FillBorder(*lbb); + FillBorder(*lbb, true); // ClearBB(*(lfb + var_screeninfo.xres * var_screeninfo.yoffset)); }