From 2539465ea11dea456e13c35b42729947cb1ccd02 Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Sat, 11 Nov 2017 16:29:28 +0100 Subject: [PATCH 01/15] try to fix freeze with subtitle file , use gst_element_get_state only if need Origin commit data ------------------ Branch: master Commit: https://github.com/neutrino-images/ni-libstb-hal/commit/4846492757738151c38874f0f9444484334ecbe6 Author: Jacek Jendrzej Date: 2017-11-11 (Sat, 11 Nov 2017) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- libarmbox/playback_gst.cpp | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/libarmbox/playback_gst.cpp b/libarmbox/playback_gst.cpp index a553ea2..2afc737 100644 --- a/libarmbox/playback_gst.cpp +++ b/libarmbox/playback_gst.cpp @@ -843,21 +843,23 @@ bool cPlayback::SetPosition(int position, bool absolute) { lt_info("%s: pos %d abs %d playing %d\n", __func__, position, absolute, playing); - gint64 time_nanoseconds; - gint64 pos; - GstFormat fmt = GST_FORMAT_TIME; - GstState state; if(m_gst_playbin) { - gst_element_get_state(m_gst_playbin, &state, NULL, GST_CLOCK_TIME_NONE); - - if ( (state == GST_STATE_PAUSED) && first) - { - init_jump = position; - first = false; - return false; + if(first){ + GstState state; + gst_element_get_state(m_gst_playbin, &state, NULL, GST_CLOCK_TIME_NONE); + if ( (state == GST_STATE_PAUSED) && first) + { + init_jump = position; + first = false; + return false; + } } + + gint64 time_nanoseconds; + gint64 pos; + GstFormat fmt = GST_FORMAT_TIME; if (!absolute) { gst_element_query_position(m_gst_playbin, fmt, &pos); From 4c59329d978e372616e3c678ed3c6b91b863f133 Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Sat, 11 Nov 2017 16:52:38 +0100 Subject: [PATCH 02/15] return false in decoder have no time Origin commit data ------------------ Branch: master Commit: https://github.com/neutrino-images/ni-libstb-hal/commit/72579547e36fc23f78bfd127e680f91b40d4c8c2 Author: Jacek Jendrzej Date: 2017-11-11 (Sat, 11 Nov 2017) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- libarmbox/playback_gst.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libarmbox/playback_gst.cpp b/libarmbox/playback_gst.cpp index 2afc737..2b8202d 100644 --- a/libarmbox/playback_gst.cpp +++ b/libarmbox/playback_gst.cpp @@ -815,12 +815,16 @@ bool cPlayback::GetPosition(int &position, int &duration) if (!GST_CLOCK_TIME_IS_VALID(pts)) { lt_info( "%s - %d failed\n", __FUNCTION__, __LINE__); + return false; } } else { if(!gst_element_query_position(m_gst_playbin, fmt, &pts)) + { lt_info( "%s - %d failed\n", __FUNCTION__, __LINE__); + return false; + } } position = pts / 1000000.0; // duration From 9ed727e7b464f9191f479087fbdf7b1e84a5083e Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Sat, 11 Nov 2017 16:55:02 +0100 Subject: [PATCH 03/15] check if tag is gst list Origin commit data ------------------ Branch: master Commit: https://github.com/neutrino-images/ni-libstb-hal/commit/93fc10c8e95a7a79f755415bc99531e47408a728 Author: Jacek Jendrzej Date: 2017-11-11 (Sat, 11 Nov 2017) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- libarmbox/playback_gst.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/libarmbox/playback_gst.cpp b/libarmbox/playback_gst.cpp index 2b8202d..e13a6d1 100644 --- a/libarmbox/playback_gst.cpp +++ b/libarmbox/playback_gst.cpp @@ -250,9 +250,12 @@ GstBusSyncReply Gst_bus_call(GstBus *bus, GstMessage *msg, gpointer user_data) case GST_MESSAGE_TAG: { - GstTagList *tags, *result; + GstTagList *tags = NULL, *result = NULL; gst_message_parse_tag(msg, &tags); + if(tags != NULL || !GST_IS_TAG_LIST(tags)) + break; + result = gst_tag_list_merge(m_stream_tags, tags, GST_TAG_MERGE_REPLACE); if (result) { From b75c67db532bdca94c24d4a303977194f307c63b Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Sat, 11 Nov 2017 17:08:51 +0100 Subject: [PATCH 04/15] fix last commit, broken check logic Origin commit data ------------------ Branch: master Commit: https://github.com/neutrino-images/ni-libstb-hal/commit/745959abf644b718f7c26527902e6c92cc85e762 Author: Jacek Jendrzej Date: 2017-11-11 (Sat, 11 Nov 2017) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- libarmbox/playback_gst.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libarmbox/playback_gst.cpp b/libarmbox/playback_gst.cpp index e13a6d1..3c7317a 100644 --- a/libarmbox/playback_gst.cpp +++ b/libarmbox/playback_gst.cpp @@ -253,7 +253,9 @@ GstBusSyncReply Gst_bus_call(GstBus *bus, GstMessage *msg, gpointer user_data) GstTagList *tags = NULL, *result = NULL; gst_message_parse_tag(msg, &tags); - if(tags != NULL || !GST_IS_TAG_LIST(tags)) + if(tags == NULL) + break; + if(!GST_IS_TAG_LIST(tags)) break; result = gst_tag_list_merge(m_stream_tags, tags, GST_TAG_MERGE_REPLACE); From ce9bbe1248da80477e09716f2b645dd30b91e4fd Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Fri, 10 Nov 2017 16:17:40 +0100 Subject: [PATCH 05/15] move gchar * sourceName = gst_object_get_name(source); Origin commit data ------------------ Branch: master Commit: https://github.com/neutrino-images/ni-libstb-hal/commit/f9daec20902cb27a2934be24db3a58230e6eb44d Author: Jacek Jendrzej Date: 2017-11-10 (Fri, 10 Nov 2017) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- libarmbox/playback_gst.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/libarmbox/playback_gst.cpp b/libarmbox/playback_gst.cpp index 3c7317a..0de0930 100644 --- a/libarmbox/playback_gst.cpp +++ b/libarmbox/playback_gst.cpp @@ -188,8 +188,6 @@ void playbinNotifySource(GObject *object, GParamSpec *param_spec, gpointer user_ GstBusSyncReply Gst_bus_call(GstBus *bus, GstMessage *msg, gpointer user_data) { - gchar * sourceName; - // source GstObject * source; source = GST_MESSAGE_SRC(msg); @@ -197,8 +195,6 @@ GstBusSyncReply Gst_bus_call(GstBus *bus, GstMessage *msg, gpointer user_data) if (!GST_IS_OBJECT(source)) return GST_BUS_DROP; - sourceName = gst_object_get_name(source); - switch (GST_MESSAGE_TYPE(msg)) { case GST_MESSAGE_EOS: @@ -214,6 +210,7 @@ GstBusSyncReply Gst_bus_call(GstBus *bus, GstMessage *msg, gpointer user_data) GError *err; gst_message_parse_error(msg, &err, &debug); g_free (debug); + gchar * sourceName = gst_object_get_name(source); lt_info_c( "%s:%s - GST_MESSAGE_ERROR: %s (%i) from %s\n", FILENAME, __FUNCTION__, err->message, err->code, sourceName ); if ( err->domain == GST_STREAM_ERROR ) { @@ -226,6 +223,8 @@ GstBusSyncReply Gst_bus_call(GstBus *bus, GstMessage *msg, gpointer user_data) } } g_error_free(err); + if(sourceName) + g_free(sourceName); end_eof = 1; // NOTE: just to exit @@ -241,8 +240,12 @@ GstBusSyncReply Gst_bus_call(GstBus *bus, GstMessage *msg, gpointer user_data) g_free (debug); if ( inf->domain == GST_STREAM_ERROR && inf->code == GST_STREAM_ERROR_DECODE ) { + gchar * sourceName = gst_object_get_name(source); if ( g_strrstr(sourceName, "videosink") ) lt_info_c( "%s:%s - GST_MESSAGE_INFO: videosink\n", FILENAME, __FUNCTION__ ); //FIXME: how shall playback handle this event??? + if(sourceName) + g_free(sourceName); + } g_error_free(inf); break; @@ -393,8 +396,6 @@ GstBusSyncReply Gst_bus_call(GstBus *bus, GstMessage *msg, gpointer user_data) default: break; } - if(sourceName) - g_free(sourceName); return GST_BUS_DROP; } From 77afaff3044ab005647d0fcd0b507a727fe5b78e Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Sun, 12 Nov 2017 08:57:41 +0100 Subject: [PATCH 06/15] Revert "return false in decoder have no time" This reverts commit 6f006f1ce9026cccddfe87a88fb3ebaa1f6a9e98. Origin commit data ------------------ Branch: master Commit: https://github.com/neutrino-images/ni-libstb-hal/commit/88d4c165ec336478305db09711033f4373262bfd Author: Jacek Jendrzej Date: 2017-11-12 (Sun, 12 Nov 2017) ------------------ This commit was generated by Migit --- libarmbox/playback_gst.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/libarmbox/playback_gst.cpp b/libarmbox/playback_gst.cpp index 0de0930..3435ff8 100644 --- a/libarmbox/playback_gst.cpp +++ b/libarmbox/playback_gst.cpp @@ -821,7 +821,6 @@ bool cPlayback::GetPosition(int &position, int &duration) if (!GST_CLOCK_TIME_IS_VALID(pts)) { lt_info( "%s - %d failed\n", __FUNCTION__, __LINE__); - return false; } } else @@ -829,7 +828,6 @@ bool cPlayback::GetPosition(int &position, int &duration) if(!gst_element_query_position(m_gst_playbin, fmt, &pts)) { lt_info( "%s - %d failed\n", __FUNCTION__, __LINE__); - return false; } } position = pts / 1000000.0; From c5edbead791bf15ac7f46728b8cedfbd75f6d9f1 Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Sun, 12 Nov 2017 08:58:18 +0100 Subject: [PATCH 07/15] init mpegts Origin commit data ------------------ Branch: master Commit: https://github.com/neutrino-images/ni-libstb-hal/commit/0f958a7ef9ebd97ec79e15974e1ced8183552263 Author: Jacek Jendrzej Date: 2017-11-12 (Sun, 12 Nov 2017) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- libarmbox/playback_gst.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libarmbox/playback_gst.cpp b/libarmbox/playback_gst.cpp index 3435ff8..b7a6548 100644 --- a/libarmbox/playback_gst.cpp +++ b/libarmbox/playback_gst.cpp @@ -411,6 +411,8 @@ cPlayback::cPlayback(int num) gst_version (&major, &minor, µ, &nano); + gst_mpegts_initialize(); + if (nano == 1) nano_str = "(CVS)"; else if (nano == 2) From e7740be1e5fae4c0a5a73e95c966453bdad81235 Mon Sep 17 00:00:00 2001 From: TangoCash Date: Mon, 13 Nov 2017 20:20:12 +0100 Subject: [PATCH 08/15] align to changes Origin commit data ------------------ Branch: master Commit: https://github.com/neutrino-images/ni-libstb-hal/commit/f7a69a642c8b2b22dbd7d9df5fe6e95f7a74527b Author: TangoCash Date: 2017-11-13 (Mon, 13 Nov 2017) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- include/hardware_caps.h | 1 + 1 file changed, 1 insertion(+) diff --git a/include/hardware_caps.h b/include/hardware_caps.h index 1a8952f..92da189 100644 --- a/include/hardware_caps.h +++ b/include/hardware_caps.h @@ -38,6 +38,7 @@ typedef struct hw_caps int display_yres; int display_can_set_brightness; int display_can_deepstandby; + int display_has_statusline; char boxvendor[64]; char boxname[64]; char boxarch[64]; From f3d8b44e60e55386db576140e352802e508f3c5d Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Mon, 13 Nov 2017 09:44:47 +0100 Subject: [PATCH 09/15] try to fix possible race condition Origin commit data ------------------ Branch: master Commit: https://github.com/neutrino-images/ni-libstb-hal/commit/3c12a78dddf0d425ee141372a81666fc40232ec3 Author: Jacek Jendrzej Date: 2017-11-13 (Mon, 13 Nov 2017) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- libarmbox/playback_gst.cpp | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/libarmbox/playback_gst.cpp b/libarmbox/playback_gst.cpp index b7a6548..e4b19d9 100644 --- a/libarmbox/playback_gst.cpp +++ b/libarmbox/playback_gst.cpp @@ -72,6 +72,8 @@ GstElement * audioSink = NULL; GstElement * videoSink = NULL; gchar * uri = NULL; GstTagList * m_stream_tags = NULL; +pthread_mutex_t mutex_tag_ist; + static int end_eof = 0; #define HTTP_TIMEOUT 30 // taken from record.h @@ -261,6 +263,8 @@ GstBusSyncReply Gst_bus_call(GstBus *bus, GstMessage *msg, gpointer user_data) if(!GST_IS_TAG_LIST(tags)) break; + pthread_mutex_lock (&mutex_tag_ist); + result = gst_tag_list_merge(m_stream_tags, tags, GST_TAG_MERGE_REPLACE); if (result) { @@ -268,6 +272,8 @@ GstBusSyncReply Gst_bus_call(GstBus *bus, GstMessage *msg, gpointer user_data) { gst_tag_list_unref(tags); gst_tag_list_unref(result); + + pthread_mutex_unlock (&mutex_tag_ist); break; } if (m_stream_tags) @@ -276,6 +282,8 @@ GstBusSyncReply Gst_bus_call(GstBus *bus, GstMessage *msg, gpointer user_data) gst_tag_list_unref(result); } + pthread_mutex_unlock (&mutex_tag_ist); + const GValue *gv_image = gst_tag_list_get_value_index(tags, GST_TAG_IMAGE, 0); if ( gv_image ) { @@ -413,6 +421,8 @@ cPlayback::cPlayback(int num) gst_mpegts_initialize(); + pthread_mutex_init (&mutex_tag_ist, NULL); + if (nano == 1) nano_str = "(CVS)"; else if (nano == 2) @@ -437,8 +447,10 @@ cPlayback::~cPlayback() { lt_info( "%s:%s\n", FILENAME, __FUNCTION__); //FIXME: all deleting stuff is done in Close() + pthread_mutex_lock (&mutex_tag_ist); if (m_stream_tags) gst_tag_list_unref(m_stream_tags); + pthread_mutex_unlock (&mutex_tag_ist); } //Used by Fileplay @@ -530,9 +542,11 @@ bool cPlayback::Start(char *filename, int /*vpid*/, int /*vtype*/, int /*apid*/, mAudioStream = 0; init_jump = -1; + pthread_mutex_lock (&mutex_tag_ist); if (m_stream_tags) gst_tag_list_unref(m_stream_tags); m_stream_tags = NULL; + pthread_mutex_unlock (&mutex_tag_ist); unlink("/tmp/.id3coverart"); @@ -1030,14 +1044,21 @@ void cPlayback::GetMetadata(std::vector &keys, std::vector Date: Wed, 15 Nov 2017 23:25:55 +0100 Subject: [PATCH 10/15] cleanup Origin commit data ------------------ Branch: master Commit: https://github.com/neutrino-images/ni-libstb-hal/commit/900dd63a2eda27455d22e5a735ceaf3e21b80163 Author: TangoCash Date: 2017-11-15 (Wed, 15 Nov 2017) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- libarmbox/audio.cpp | 65 ---------------------------------- libarmbox/audio_lib.h | 11 ------ libarmbox/audio_mixer.cpp | 68 ----------------------------------- libarmbox/audio_mixer.h | 36 ------------------- libarmbox/dmx.cpp | 39 ++------------------- libarmbox/pwrmngr.cpp | 74 ++------------------------------------- libarmbox/video.cpp | 5 --- 7 files changed, 4 insertions(+), 294 deletions(-) delete mode 100644 libarmbox/audio_mixer.cpp delete mode 100644 libarmbox/audio_mixer.h diff --git a/libarmbox/audio.cpp b/libarmbox/audio.cpp index 7cbe499..8064633 100644 --- a/libarmbox/audio.cpp +++ b/libarmbox/audio.cpp @@ -27,26 +27,17 @@ cAudio::cAudio(void *, void *, void *) clipfd = -1; mixer_fd = -1; -/* - mixerAnalog = mixerHDMI = mixerSPDIF = NULL; - volumeAnalog = volumeHDMI = volumeSPDIF = 0; - mixersMuted = false -*/ - openDevice(); Muted = false; } cAudio::~cAudio(void) { - //closeMixers(); closeDevice(); } void cAudio::openDevice(void) { - //openMixers(); - if (fd < 0) { if ((fd = open(AUDIO_DEVICE, O_RDWR)) < 0) @@ -60,8 +51,6 @@ void cAudio::openDevice(void) void cAudio::closeDevice(void) { - //closeMixers(); - if (fd > -1) { close(fd); fd = -1; @@ -424,57 +413,3 @@ void cAudio::setBypassMode(bool disable) if (ioctl(fd, AUDIO_SET_BYPASS_MODE, mode) < 0) lt_info("%s AUDIO_SET_BYPASS_MODE %d: %m\n", __func__, mode); } - -#if 0 -void cAudio::openMixers(void) -{ - if (!mixerAnalog) - mixerAnalog = new mixerVolume("Analog", "1"); - if (!mixerHDMI) - mixerHDMI = new mixerVolume("HDMI", "1"); - if (!mixerSPDIF) - mixerSPDIF = new mixerVolume("SPDIF", "1"); -} - -void cAudio::closeMixers(void) -{ - delete mixerAnalog; - delete mixerHDMI; - delete mixerSPDIF; - mixerAnalog = mixerHDMI = mixerSPDIF = NULL; -} - -void cAudio::setMixerVolume(const char *name, long value, bool remember) -{ - if (!strcmp(name, "Analog")) { - mixerAnalog->setVolume(value); - if (remember) - volumeAnalog = value; - } - if (!strcmp(name, "HDMI")) { - mixerHDMI->setVolume(value); - if (remember) - volumeHDMI = value; - } - if (!strcmp(name, "SPDIF")) { - mixerSPDIF->setVolume(value); - if (remember) - volumeSPDIF = value; - } -} - -void cAudio::muteMixers(bool m) -{ - if (m && !mixersMuted) { - mixersMuted = true; - setMixerVolume("Analog", 0, false); - setMixerVolume("HDMI", 0, false); - setMixerVolume("SPDIF", 0, false); - } else if (!m && mixersMuted) { - mixersMuted = false; - setMixerVolume("Analog", volumeAnalog, false); - setMixerVolume("HDMI", volumeHDMI, false); - setMixerVolume("SPDIF", volumeSPDIF, false); - } -} -#endif diff --git a/libarmbox/audio_lib.h b/libarmbox/audio_lib.h index 5fb3e9c..5aad2f5 100644 --- a/libarmbox/audio_lib.h +++ b/libarmbox/audio_lib.h @@ -57,10 +57,6 @@ class cAudio int do_mute(bool enable, bool remember); void setBypassMode(bool disable); - mixerVolume *mixerAnalog, *mixerHDMI, *mixerSPDIF; - int volumeAnalog, volumeHDMI, volumeSPDIF; - bool mixersMuted; - public: /* construct & destruct */ cAudio(void *, void *, void *); @@ -99,13 +95,6 @@ class cAudio void SetSpdifDD(bool enable); void ScheduleMute(bool On); void EnableAnalogOut(bool enable); - -#if 0 - void openMixers(void); - void closeMixers(void); - void setMixerVolume(const char *name, long value, bool remember = true); - void muteMixers(bool m = true); -#endif }; #endif diff --git a/libarmbox/audio_mixer.cpp b/libarmbox/audio_mixer.cpp deleted file mode 100644 index f361209..0000000 --- a/libarmbox/audio_mixer.cpp +++ /dev/null @@ -1,68 +0,0 @@ -/* - * audio_mixer.cpp - * - * (C) 2012 martii - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include - -mixerVolume::mixerVolume(const char *name, const char *card, long volume) { - snd_mixer_selem_id_t *sid = NULL; - elem = NULL; - handle = NULL; - min = 0; - max = 100; - char cardId[10]; - - if (!name || !card) - return; - - int cx = snd_card_get_index(card); - if (cx < 0 || cx > 31) - return; - snprintf(cardId, sizeof(cardId), "hw:%i", cx); - - if (0 > snd_mixer_open(&handle, 0)) - return; - if (0 > snd_mixer_attach(handle, cardId)) - return; - if (0 > snd_mixer_selem_register(handle, NULL, NULL)) - return; - if (0 > snd_mixer_load(handle)) - return; - snd_mixer_selem_id_alloca(&sid); - if (!sid) - return; - snd_mixer_selem_id_set_index(sid, 0); - snd_mixer_selem_id_set_name(sid, name); - elem = snd_mixer_find_selem(handle, sid); - if (elem) { - snd_mixer_selem_get_playback_volume_range(elem, &min, &max); - setVolume(volume); - } -} -mixerVolume::~mixerVolume() -{ - if (handle) - snd_mixer_close(handle); -} - -bool mixerVolume::setVolume(long volume) { - return elem - && (volume > -1) - && (volume < 101) - && !snd_mixer_selem_set_playback_volume_all(elem, min + volume * (max - min)/100); -} diff --git a/libarmbox/audio_mixer.h b/libarmbox/audio_mixer.h deleted file mode 100644 index 2a6f6fc..0000000 --- a/libarmbox/audio_mixer.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * audio_mixer.h - * - * (C) 2012 martii - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#ifndef __AUDIO_MIXER_H__ -#define __AUDIO_MIXER_H__ -#include - -class mixerVolume -{ - private: - long min, max; - snd_mixer_t *handle; - snd_mixer_elem_t* elem; - public: - mixerVolume(const char *selem_name, const char *Card, long volume = -1); - ~mixerVolume(void); - bool setVolume(long volume); -}; -#endif - diff --git a/libarmbox/dmx.cpp b/libarmbox/dmx.cpp index 687f3b8..dbd5ef4 100644 --- a/libarmbox/dmx.cpp +++ b/libarmbox/dmx.cpp @@ -1,6 +1,6 @@ /* - * cDemux implementation for SH4 receivers (tested on fulan spark and - * fulan spark7162 hardware) + * cDemux implementation for arm receivers (tested on mutant hd51 + * hardware) * * derived from libtriple/dmx_td.cpp * @@ -20,41 +20,6 @@ * along with this program. If not, see . */ -/* - * Theory of operation (or "why is this dmx_source thing so strange and - * what is the _open() good for?") - * - * the sh4 pti driver, driving the /dev/dvb/adapter0/dmxN devices, can - * apparently only map one input to on demux device at a time, so e.g. - * DMX_SOURCE_FRONT1 -> demux0 - * DMX_SOURCE_FRONT2 -> demux0 - * DMX_SOURCE_FRONT1 -> demux1 - * does not work. The driver makes sure that a one-to-one mapping of - * DMX_SOURCE_FRONTn to demuxM is maintained, and it does by e.g changing - * the default of - * FRONT0 -> demux0 - * FRONT1 -> demux1 - * FRONT2 -> demux2 - * to - * FRONT1 -> demux0 - * FRONT0 -> demux1 - * FRONT2 -> demux2 - * if you do a DMX_SET_SOURCE(FRONT1) ioctl on demux0. - * This means, it also changes demux1's source on the SET_SOURCE ioctl on - * demux0, potentially disturbing any operation on demux1 (e.g. recording). - * - * In order to avoid this, I do not change the source->demuxdev mapping - * but instead just always use the demux device that is attached to the - * correct source. - * - * The tricky part is, that the source might actually be changed after - * Open() has been called, so Open() gets a dummy placeholder that just - * sets some variables while the real device open is put into _open(). - * _open() gets called later, whenever the device is actually used or - * configured and -- if the source has changed -- closes the old and - * opens the correct new device node. - */ - #include #include #include diff --git a/libarmbox/pwrmngr.cpp b/libarmbox/pwrmngr.cpp index b5ab30a..f4eff66 100644 --- a/libarmbox/pwrmngr.cpp +++ b/libarmbox/pwrmngr.cpp @@ -14,23 +14,7 @@ void cCpuFreqManager::Down(void) { lt_debug("%s\n", __FUNCTION__); } void cCpuFreqManager::Reset(void) { lt_debug("%s\n", __FUNCTION__); } /* those function dummies return true or "harmless" values */ bool cCpuFreqManager::SetDelta(unsigned long) { lt_debug("%s\n", __FUNCTION__); return true; } -#if HAVE_SPARK_HARDWARE || HAVE_DUCKBOX_HARDWARE -unsigned long cCpuFreqManager::GetCpuFreq(void) { - int freq = 0; - if (FILE *pll0 = fopen("/proc/cpu_frequ/pll0_ndiv_mdiv", "r")) { - char buffer[120]; - while(fgets(buffer, sizeof(buffer), pll0)) { - if (1 == sscanf(buffer, "SH4 = %d MHZ", &freq)) - break; - } - fclose(pll0); - return 1000 * 1000 * (unsigned long) freq; - } - return 0; -} -#else unsigned long cCpuFreqManager::GetCpuFreq(void) { lt_debug("%s\n", __FUNCTION__); return 0; } -#endif unsigned long cCpuFreqManager::GetDelta(void) { lt_debug("%s\n", __FUNCTION__); return 0; } // cCpuFreqManager::cCpuFreqManager(void) { lt_debug("%s\n", __FUNCTION__); } @@ -40,62 +24,8 @@ bool cPowerManager::SetState(PWR_STATE) { lt_debug("%s\n", __FUNCTION__); return bool cPowerManager::Open(void) { lt_debug("%s\n", __FUNCTION__); return true; } void cPowerManager::Close(void) { lt_debug("%s\n", __FUNCTION__); } // -bool cPowerManager::SetStandby(bool Active, bool Passive) -{ - lt_debug("%s(%d, %d)\n", __FUNCTION__, Active, Passive); - return true; -} - -bool cCpuFreqManager::SetCpuFreq(unsigned long f) -{ -#if HAVE_SPARK_HARDWARE || HAVE_DUCKBOX_HARDWARE - if (f) { - FILE *pll0 = fopen ("/proc/cpu_frequ/pll0_ndiv_mdiv", "w"); - if (pll0) { - f /= 1000000; - fprintf(pll0, "%lu\n", (f/10 << 8) | 3); - fclose (pll0); - return false; - } - } -#else - /* actually SetCpuFreq is used to determine if the system is in standby - this is an "elegant" hack, because: - * during a recording, cpu freq is kept "high", even if the box is sent to standby - * the "SetStandby" call is made even if a recording is running - On the TD, setting standby disables the frontend, so we must not do it - if a recording is running. - For now, the values in neutrino are hardcoded: - * f == 0 => max => not standby - * f == 50000000 => min => standby - */ - lt_debug("%s(%lu) => set standby = %s\n", __FUNCTION__, f, f?"true":"false"); -#if 0 - int fd = open("/dev/stb/tdsystem", O_RDONLY); - if (fd < 0) - { - perror("open tdsystem"); - return false; - } - if (f) - { - ioctl(fd, IOC_AVS_SET_VOLUME, 31); /* mute AVS to avoid ugly noise */ - ioctl(fd, IOC_AVS_STANDBY_ENTER); - } - else - { - ioctl(fd, IOC_AVS_SET_VOLUME, 31); /* mute AVS to avoid ugly noise */ - ioctl(fd, IOC_AVS_STANDBY_LEAVE); - /* unmute will be done by cAudio::do_mute(). Ugly, but prevents pops */ - // ioctl(fd, IOC_AVS_SET_VOLUME, 0); /* max gain */ - } - - close(fd); -#endif -#endif - return true; -} - +bool cPowerManager::SetStandby(bool Active, bool Passive) { lt_debug("%s(%d, %d)\n", __FUNCTION__, Active, Passive); return true; } +bool cCpuFreqManager::SetCpuFreq(unsigned long f) { lt_debug("%s(%lu) => set standby = %s\n", __FUNCTION__, f, f?"true":"false"); return true; } // cPowerManager::cPowerManager(void) { lt_debug("%s\n", __FUNCTION__); } cPowerManager::~cPowerManager() { lt_debug("%s\n", __FUNCTION__); } diff --git a/libarmbox/video.cpp b/libarmbox/video.cpp index 8bf87b1..8cbc631 100644 --- a/libarmbox/video.cpp +++ b/libarmbox/video.cpp @@ -83,11 +83,6 @@ static const char *VMPEG_yres[] = { "/proc/stb/vmpeg/1/yres" }; -static const char *VMPEG_dst_all[] = { - "/proc/stb/vmpeg/0/dst_all", - "/proc/stb/vmpeg/1/dst_all" -}; - static const char *VMPEG_dst_height[] = { "/proc/stb/vmpeg/0/dst_height", "/proc/stb/vmpeg/1/dst_height" From 3149aaf537878cd3210f7b8eafb21803b8608efb Mon Sep 17 00:00:00 2001 From: TangoCash Date: Wed, 15 Nov 2017 23:29:19 +0100 Subject: [PATCH 11/15] cleanup Origin commit data ------------------ Branch: master Commit: https://github.com/neutrino-images/ni-libstb-hal/commit/680385c20f73a86b8ea282d8174fc75f2093e0d3 Author: TangoCash Date: 2017-11-15 (Wed, 15 Nov 2017) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- include/audio_hal.h | 1 - 1 file changed, 1 deletion(-) diff --git a/include/audio_hal.h b/include/audio_hal.h index 6f50cd5..f45ea2d 100644 --- a/include/audio_hal.h +++ b/include/audio_hal.h @@ -9,7 +9,6 @@ #include "../libspark/audio_mixer.h" #elif HAVE_ARM_HARDWARE #include "../libarmbox/audio_lib.h" -#include "../libarmbox/audio_mixer.h" #elif HAVE_AZBOX_HARDWARE #include "../azbox/audio_lib.h" #elif HAVE_GENERIC_HARDWARE From d233ba9214437dd5b97f3a48d93e37d7a623aec4 Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Thu, 16 Nov 2017 18:51:01 +0100 Subject: [PATCH 12/15] convert jpg to m2v with libavcodec, need --enable-demuxer=image2 Origin commit data ------------------ Branch: master Commit: https://github.com/neutrino-images/ni-libstb-hal/commit/92646d5ad6a2b42f1b841fab68fa5f50553441d5 Author: Jacek Jendrzej Date: 2017-11-16 (Thu, 16 Nov 2017) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- libarmbox/video.cpp | 131 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 127 insertions(+), 4 deletions(-) diff --git a/libarmbox/video.cpp b/libarmbox/video.cpp index 8cbc631..1d27454 100644 --- a/libarmbox/video.cpp +++ b/libarmbox/video.cpp @@ -40,6 +40,12 @@ #include +extern "C" +{ +#include +#include +} + #define lt_debug(args...) _lt_debug(TRIPLE_DEBUG_VIDEO, this, args) #define lt_info(args...) _lt_info(TRIPLE_DEBUG_VIDEO, this, args) #define lt_debug_c(args...) _lt_debug(TRIPLE_DEBUG_VIDEO, NULL, args) @@ -141,6 +147,126 @@ static const char *vid_modes[] = { #define VIDEO_STREAMTYPE_H265_HEVC 7 #define VIDEO_STREAMTYPE_AVS 16 +void init_parameters(AVFrame* in_frame, AVCodecContext *codec_context) +{ + /* put sample parameters */ + codec_context->bit_rate = 400000; + /* resolution must be a multiple of two */ + codec_context->width = (in_frame->width/2)*2; + codec_context->height = (in_frame->height/2)*2; + /* frames per second */ + codec_context->time_base = (AVRational ) { 1, 60 }; + codec_context->gop_size = 10; /* emit one intra frame every ten frames */ + codec_context->max_b_frames = 1; + codec_context->pix_fmt = AV_PIX_FMT_YUV420P; +} + +void write_frame(AVFrame* in_frame, FILE* fp) +{ + if(in_frame == NULL || fp == NULL) + return; + AVCodec *codec = avcodec_find_encoder(AV_CODEC_ID_MPEG2VIDEO); + if (codec) + { + AVCodecContext *codec_context = avcodec_alloc_context3(codec); + if (codec_context) + { + init_parameters(in_frame, codec_context); + if (avcodec_open2(codec_context, codec, 0) != -1){ + AVPacket pkt; + av_init_packet(&pkt); + /* encode the image */ + int got_output = 0; + int ret = avcodec_encode_video2(codec_context, &pkt, in_frame, &got_output); + if (ret != -1){ + if (got_output){ + fwrite(pkt.data, 1, pkt.size, fp); + av_packet_unref(&pkt); + } + int i =1; + for (got_output = 1; got_output; i++){ + /* get the delayed frames */ + in_frame->pts = i; + ret = avcodec_encode_video2(codec_context, &pkt, 0, &got_output); + if (ret != -1 && got_output){ + fwrite(pkt.data, 1, pkt.size, fp); + av_packet_unref(&pkt); + } + } + avcodec_close(codec_context); + av_free(codec_context); + } + } + } + } +} + +int decode_frame(AVCodecContext *codecContext,AVPacket &packet, FILE* fp) +{ + int decode_ok = 0; + AVFrame *frame = av_frame_alloc(); + if(frame){ + if ((avcodec_decode_video2(codecContext, frame, &decode_ok, &packet)) < 0 || !decode_ok){ + av_frame_free(&frame); + return -1; + } + write_frame(frame, fp); + av_frame_free(&frame); + } + return 0; + +} + +AVCodecContext* open_codec(AVMediaType mediaType, AVFormatContext* formatContext) +{ + int stream_index = av_find_best_stream(formatContext, mediaType, -1, -1, NULL, 0); + if (stream_index < 0){ + return NULL; + } + AVCodecContext * codecContext = formatContext->streams[stream_index]->codec; + AVCodec *codec = avcodec_find_decoder(codecContext->codec_id); + if (!codec){ + return NULL; + } + if ((avcodec_open2(codecContext, codec, NULL)) != 0){ + return NULL; + } + + return codecContext; +} + +int image_to_mpeg2(const char *image_name, const char *encode_name) +{ + int ret = 0; + av_register_all(); + avcodec_register_all(); + + AVFormatContext *formatContext = avformat_alloc_context(); + if ((ret = avformat_open_input(&formatContext, image_name, NULL, NULL)) == 0){ + AVCodecContext *codecContext = open_codec(AVMEDIA_TYPE_VIDEO, formatContext); + if(codecContext){ + AVPacket packet; + av_init_packet(&packet); + if ((ret = av_read_frame(formatContext, &packet)) !=-1){ + FILE* fp = fopen(encode_name, "wb"); + if(fp){ + if(decode_frame(codecContext, packet, fp) != 1){ + /* add sequence end code to have a real mpeg file */ + uint8_t endcode[] = { 0, 0, 1, 0xb7 }; + fwrite(endcode, 1, sizeof(endcode), fp); + fclose(fp); + } + } + avcodec_close(codecContext); + av_free_packet(&packet); + } + avformat_close_input(&formatContext); + } + } + av_free(formatContext); + return 0; +} + cVideo::cVideo(int, void *, void *, unsigned int unit) { lt_debug("%s unit %u\n", __func__, unit); @@ -431,7 +557,6 @@ void cVideo::ShowPicture(const char * fname, const char *_destname) static const unsigned char pes_header[] = {0x0, 0x0, 0x1, 0xe0, 0x00, 0x00, 0x80, 0x80, 0x5, 0x21, 0x0, 0x1, 0x0, 0x1}; static const unsigned char seq_end[] = { 0x00, 0x00, 0x01, 0xB7 }; char destname[512]; - char cmd[512]; char *p; int mfd; struct stat st, st2; @@ -472,9 +597,7 @@ void cVideo::ShowPicture(const char * fname, const char *_destname) u.actime = time(NULL); u.modtime = st2.st_mtime; /* it does not exist or has a different date, so call ffmpeg... */ - sprintf(cmd, "ffmpeg -y -f mjpeg -i '%s' -s 1280x720 -aspect 16:9 '%s' >/dev/null", - fname, destname); - system(cmd); /* TODO: use libavcodec to directly convert it */ + image_to_mpeg2(fname, destname); utime(destname, &u); } } From cb10177b2f38a18382a92eab965b0afef724960a Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Thu, 16 Nov 2017 18:58:13 +0100 Subject: [PATCH 13/15] fix close fp Origin commit data ------------------ Branch: master Commit: https://github.com/neutrino-images/ni-libstb-hal/commit/d55f59258637585146e4343b8d8f0a7d3cd04b12 Author: Jacek Jendrzej Date: 2017-11-16 (Thu, 16 Nov 2017) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- libarmbox/video.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libarmbox/video.cpp b/libarmbox/video.cpp index 1d27454..3eaac62 100644 --- a/libarmbox/video.cpp +++ b/libarmbox/video.cpp @@ -254,8 +254,8 @@ int image_to_mpeg2(const char *image_name, const char *encode_name) /* add sequence end code to have a real mpeg file */ uint8_t endcode[] = { 0, 0, 1, 0xb7 }; fwrite(endcode, 1, sizeof(endcode), fp); - fclose(fp); } + fclose(fp); } avcodec_close(codecContext); av_free_packet(&packet); From d891ac338115e8615a635c179ac7bd245b127876 Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Thu, 16 Nov 2017 19:09:16 +0100 Subject: [PATCH 14/15] check alloc AVFormatContext Origin commit data ------------------ Branch: master Commit: https://github.com/neutrino-images/ni-libstb-hal/commit/fd512df7cbd3f2d72ee63bd9b327ff04a24bde8d Author: Jacek Jendrzej Date: 2017-11-16 (Thu, 16 Nov 2017) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- libarmbox/video.cpp | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/libarmbox/video.cpp b/libarmbox/video.cpp index 3eaac62..19b41b3 100644 --- a/libarmbox/video.cpp +++ b/libarmbox/video.cpp @@ -225,14 +225,10 @@ AVCodecContext* open_codec(AVMediaType mediaType, AVFormatContext* formatContext } AVCodecContext * codecContext = formatContext->streams[stream_index]->codec; AVCodec *codec = avcodec_find_decoder(codecContext->codec_id); - if (!codec){ + if (codec && (avcodec_open2(codecContext, codec, NULL)) != 0){ return NULL; } - if ((avcodec_open2(codecContext, codec, NULL)) != 0){ - return NULL; - } - - return codecContext; + return codecContext; } int image_to_mpeg2(const char *image_name, const char *encode_name) @@ -242,7 +238,7 @@ int image_to_mpeg2(const char *image_name, const char *encode_name) avcodec_register_all(); AVFormatContext *formatContext = avformat_alloc_context(); - if ((ret = avformat_open_input(&formatContext, image_name, NULL, NULL)) == 0){ + if (formatContext && (ret = avformat_open_input(&formatContext, path, NULL, NULL)) == 0){ AVCodecContext *codecContext = open_codec(AVMEDIA_TYPE_VIDEO, formatContext); if(codecContext){ AVPacket packet; From 54b4c2a8770d74409e2c660daed4428fe236cab4 Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Thu, 16 Nov 2017 19:10:40 +0100 Subject: [PATCH 15/15] fix last commit Origin commit data ------------------ Branch: master Commit: https://github.com/neutrino-images/ni-libstb-hal/commit/cefff907e542b71ac5340d480f19a032559c1823 Author: Jacek Jendrzej Date: 2017-11-16 (Thu, 16 Nov 2017) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- libarmbox/video.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libarmbox/video.cpp b/libarmbox/video.cpp index 19b41b3..1192f08 100644 --- a/libarmbox/video.cpp +++ b/libarmbox/video.cpp @@ -238,7 +238,7 @@ int image_to_mpeg2(const char *image_name, const char *encode_name) avcodec_register_all(); AVFormatContext *formatContext = avformat_alloc_context(); - if (formatContext && (ret = avformat_open_input(&formatContext, path, NULL, NULL)) == 0){ + if (formatContext && (ret = avformat_open_input(&formatContext, image_name, NULL, NULL)) == 0){ AVCodecContext *codecContext = open_codec(AVMEDIA_TYPE_VIDEO, formatContext); if(codecContext){ AVPacket packet;