From bb4911e978f7f694489483a5210781afaa409088 Mon Sep 17 00:00:00 2001 From: BPanther Date: Sat, 2 Oct 2021 22:27:44 +0200 Subject: [PATCH] DMX_PIP_CHANNEL removed, DMX_VIDEO_CHANNEL does the same Origin commit data ------------------ Branch: master Commit: https://github.com/neutrino-images/ni-libstb-hal/commit/58d27530c3944a7e19e6d03df28a9c089a6c214e Author: BPanther Date: 2021-10-02 (Sat, 02 Oct 2021) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- include/dmx_hal.h | 1 - libarmbox/dmx.cpp | 8 ++------ libraspi/dmx_lib.h | 1 - libspark/audio.cpp | 23 ++++++++++++++++++--- libspark/audio_lib.h | 3 ++- libspark/dmx.cpp | 43 +++++++++++++++++++++++++++++----------- libspark/hardware_caps.c | 7 +++++-- libspark/video.cpp | 25 +++++++++++++++++------ 8 files changed, 79 insertions(+), 32 deletions(-) diff --git a/include/dmx_hal.h b/include/dmx_hal.h index b5476fd..0e3d020 100644 --- a/include/dmx_hal.h +++ b/include/dmx_hal.h @@ -65,7 +65,6 @@ typedef enum DMX_AUDIO_CHANNEL, DMX_PES_CHANNEL, DMX_PSI_CHANNEL, - DMX_PIP_CHANNEL, DMX_TP_CHANNEL, DMX_PCR_ONLY_CHANNEL } DMX_CHANNEL_TYPE; diff --git a/libarmbox/dmx.cpp b/libarmbox/dmx.cpp index 4e759b0..87ed140 100644 --- a/libarmbox/dmx.cpp +++ b/libarmbox/dmx.cpp @@ -511,7 +511,6 @@ bool cDemux::pesFilter(const unsigned short _pid) switch (dmx_type) { - case DMX_PIP_CHANNEL: case DMX_VIDEO_CHANNEL: switch (num) { @@ -532,18 +531,15 @@ bool cDemux::pesFilter(const unsigned short _pid) break; case DMX_PES_CHANNEL: p_flt.pes_type = DMX_PES_OTHER; - p_flt.output = DMX_OUT_TAP; + p_flt.output = DMX_OUT_TAP; break; #if 0 case DMX_PSI_CHANNEL: break; - case DMX_PIP_CHANNEL: /* PIP is a special version of DMX_VIDEO_CHANNEL */ - p_flt.pes_type = DMX_PES_VIDEO1; - break; #endif case DMX_TP_CHANNEL: p_flt.pes_type = DMX_PES_OTHER; - p_flt.output = DMX_OUT_TSDEMUX_TAP; + p_flt.output = DMX_OUT_TSDEMUX_TAP; break; case DMX_PCR_ONLY_CHANNEL: switch (num) diff --git a/libraspi/dmx_lib.h b/libraspi/dmx_lib.h index 8f6981a..ba31736 100644 --- a/libraspi/dmx_lib.h +++ b/libraspi/dmx_lib.h @@ -16,7 +16,6 @@ typedef enum DMX_AUDIO_CHANNEL, DMX_PES_CHANNEL, DMX_PSI_CHANNEL, - DMX_PIP_CHANNEL, DMX_TP_CHANNEL, DMX_PCR_ONLY_CHANNEL } DMX_CHANNEL_TYPE; diff --git a/libspark/audio.cpp b/libspark/audio.cpp index 4cbcb95..b149ec5 100644 --- a/libspark/audio.cpp +++ b/libspark/audio.cpp @@ -8,13 +8,13 @@ #include +#include #include #include "audio_lib.h" #include "audio_mixer.h" #include "hal_debug.h" -#define AUDIO_DEVICE "/dev/dvb/adapter0/audio0" #define hal_debug(args...) _hal_debug(HAL_DEBUG_AUDIO, this, args) #define hal_info(args...) _hal_info(HAL_DEBUG_AUDIO, this, args) @@ -27,9 +27,26 @@ enum }; cAudio *audioDecoder = NULL; +cAudio *pipAudioDecoder = NULL; -cAudio::cAudio(void *, void *, void *) +static const char *ADEV[] = { + "/dev/dvb/adapter0/audio0", + "/dev/dvb/adapter0/audio1", + "/dev/dvb/adapter0/audio2", + "/dev/dvb/adapter0/audio3" +}; + +cAudio::cAudio(void *, void *, void *, unsigned int unit) +{ + hw_caps_t *hwcaps = get_hwcaps(); + if (unit > (unsigned int) hwcaps->pip_devs) + { + hal_info("%s: unit %d out of range, setting to 0\n", __func__, unit); + devnum = 0; + } + else + devnum = unit; fd = -1; clipfd = -1; mixer_fd = -1; @@ -54,7 +71,7 @@ void cAudio::openDevice(void) if (fd < 0) { - if ((fd = open(AUDIO_DEVICE, O_RDWR)) < 0) + if ((fd = open(ADEV[devnum], O_RDWR)) < 0) hal_info("openDevice: open failed (%m)\n"); fcntl(fd, F_SETFD, FD_CLOEXEC); do_mute(true, false); diff --git a/libspark/audio_lib.h b/libspark/audio_lib.h index d52c634..e0fa5fd 100644 --- a/libspark/audio_lib.h +++ b/libspark/audio_lib.h @@ -26,6 +26,7 @@ class cAudio friend class cPlayback; private: int fd; + unsigned int devnum; bool Muted; int clipfd; /* for pcm playback */ @@ -50,7 +51,7 @@ class cAudio public: /* construct & destruct */ - cAudio(void *, void *, void *); + cAudio(void *, void *, void *, unsigned int unit = 0); ~cAudio(void); void open_AVInput_Device(void) diff --git a/libspark/dmx.cpp b/libspark/dmx.cpp index 3f95935..87240ac 100644 --- a/libspark/dmx.cpp +++ b/libspark/dmx.cpp @@ -503,31 +503,50 @@ bool cDemux::pesFilter(const unsigned short _pid) memset(&p_flt, 0, sizeof(p_flt)); p_flt.pid = pid; - p_flt.output = DMX_OUT_DECODER; p_flt.input = DMX_IN_FRONTEND; + p_flt.output = DMX_OUT_DECODER; p_flt.flags = DMX_IMMEDIATE_START; switch (dmx_type) { - case DMX_PCR_ONLY_CHANNEL: - p_flt.pes_type = DMX_PES_PCR; + case DMX_VIDEO_CHANNEL: + switch (num) + { + case 0: p_flt.pes_type = DMX_PES_VIDEO0; break; + case 1: p_flt.pes_type = DMX_PES_VIDEO1; break; + case 2: p_flt.pes_type = DMX_PES_VIDEO2; break; + case 3: p_flt.pes_type = DMX_PES_VIDEO3; break; + } break; case DMX_AUDIO_CHANNEL: - p_flt.pes_type = DMX_PES_AUDIO; - break; - case DMX_VIDEO_CHANNEL: - p_flt.pes_type = DMX_PES_VIDEO; - break; - case DMX_PIP_CHANNEL: /* PIP is a special version of DMX_VIDEO_CHANNEL */ - p_flt.pes_type = DMX_PES_VIDEO1; + switch (num) + { + case 0: p_flt.pes_type = DMX_PES_AUDIO0; break; + case 1: p_flt.pes_type = DMX_PES_AUDIO1; break; + case 2: p_flt.pes_type = DMX_PES_AUDIO2; break; + case 3: p_flt.pes_type = DMX_PES_AUDIO3; break; + } break; case DMX_PES_CHANNEL: p_flt.pes_type = DMX_PES_OTHER; - p_flt.output = DMX_OUT_TAP; + p_flt.output = DMX_OUT_TAP; break; +#if 0 + case DMX_PSI_CHANNEL: + break; +#endif case DMX_TP_CHANNEL: p_flt.pes_type = DMX_PES_OTHER; - p_flt.output = DMX_OUT_TSDEMUX_TAP; + p_flt.output = DMX_OUT_TSDEMUX_TAP; + break; + case DMX_PCR_ONLY_CHANNEL: + switch (num) + { + case 0: p_flt.pes_type = DMX_PES_PCR0; break; + case 1: p_flt.pes_type = DMX_PES_PCR1; break; + case 2: p_flt.pes_type = DMX_PES_PCR2; break; + case 3: p_flt.pes_type = DMX_PES_PCR3; break; + } break; default: hal_info("%s #%d invalid dmx_type %d!\n", __func__, num, dmx_type); diff --git a/libspark/hardware_caps.c b/libspark/hardware_caps.c index 8500d47..97e129d 100644 --- a/libspark/hardware_caps.c +++ b/libspark/hardware_caps.c @@ -29,8 +29,11 @@ hw_caps_t *get_hwcaps(void) memset(&caps, 0, sizeof(hw_caps_t)); - if (access("/dev/dvb/adapter0/video1", F_OK) != -1) - caps.can_pip = 1; + caps.pip_devs = 0; + if (access("/dev/dvb/adapter0/video1", F_OK) != -1) caps.pip_devs = 1; + if (access("/dev/dvb/adapter0/video2", F_OK) != -1) caps.pip_devs = 2; + if (access("/dev/dvb/adapter0/video3", F_OK) != -1) caps.pip_devs = 3; + if (caps.pip_devs > 0) caps.can_pip = 1; caps.has_CI = 0; caps.can_cec = 1; diff --git a/libspark/video.cpp b/libspark/video.cpp index 1bebec7..e27f6b8 100644 --- a/libspark/video.cpp +++ b/libspark/video.cpp @@ -39,6 +39,7 @@ #include "video_lib.h" #include "hal_debug.h" +#include #include extern "C" @@ -82,36 +83,48 @@ static bool stillpicture = false; static const char *VDEV[] = { "/dev/dvb/adapter0/video0", - "/dev/dvb/adapter0/video1" + "/dev/dvb/adapter0/video1", + "/dev/dvb/adapter0/video2", + "/dev/dvb/adapter0/video3" }; static const char *VMPEG_aspect[] = { "/proc/stb/vmpeg/0/aspect", - "/proc/stb/vmpeg/1/aspect" + "/proc/stb/vmpeg/1/aspect", + "/proc/stb/vmpeg/2/aspect", + "/proc/stb/vmpeg/3/aspect" }; static const char *VMPEG_xres[] = { "/proc/stb/vmpeg/0/xres", - "/proc/stb/vmpeg/1/xres" + "/proc/stb/vmpeg/1/xres", + "/proc/stb/vmpeg/2/xres", + "/proc/stb/vmpeg/3/xres" }; static const char *VMPEG_yres[] = { "/proc/stb/vmpeg/0/yres", - "/proc/stb/vmpeg/1/yres" + "/proc/stb/vmpeg/1/yres", + "/proc/stb/vmpeg/2/yres", + "/proc/stb/vmpeg/3/yres" }; static const char *VMPEG_dst_all[] = { "/proc/stb/vmpeg/0/dst_all", - "/proc/stb/vmpeg/1/dst_all" + "/proc/stb/vmpeg/1/dst_all", + "/proc/stb/vmpeg/2/dst_all", + "/proc/stb/vmpeg/3/dst_all" }; static const char *VMPEG_framerate[] = { "/proc/stb/vmpeg/0/framerate", - "/proc/stb/vmpeg/1/framerate" + "/proc/stb/vmpeg/1/framerate", + "/proc/stb/vmpeg/2/framerate", + "/proc/stb/vmpeg/3/framerate" }; static const char *VMPEG_visible[] =