diff --git a/include/hardware_caps.h b/include/hardware_caps.h index 0492e83..4b9cf16 100644 --- a/include/hardware_caps.h +++ b/include/hardware_caps.h @@ -31,6 +31,7 @@ typedef struct hw_caps int has_SCART_input; int has_YUV_cinch; int can_pip; + int pip_devs; int can_cpufreq; int can_shutdown; int can_cec; diff --git a/libarmbox/audio.cpp b/libarmbox/audio.cpp index b744312..1425b1e 100644 --- a/libarmbox/audio.cpp +++ b/libarmbox/audio.cpp @@ -8,6 +8,7 @@ #include +#include #include #include "audio_lib.h" @@ -50,7 +51,8 @@ static const char *ADEV[] = cAudio::cAudio(void *, void *, void *, unsigned int unit) { - if (unit > 3) + 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; diff --git a/libarmbox/hardware_caps.c b/libarmbox/hardware_caps.c index 57380c9..80b8d6a 100644 --- a/libarmbox/hardware_caps.c +++ b/libarmbox/hardware_caps.c @@ -28,8 +28,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; #if BOXMODEL_VUSOLO4K caps.has_CI = 1; diff --git a/libarmbox/video.cpp b/libarmbox/video.cpp index eb47027..df2d016 100644 --- a/libarmbox/video.cpp +++ b/libarmbox/video.cpp @@ -38,6 +38,7 @@ #include "hal_debug.h" #include "hdmi_cec.h" +#include #include extern "C" @@ -508,7 +509,8 @@ cVideo::cVideo(int, void *, void *, unsigned int unit) hue = -1; video_standby = 0; blank_mode = 0; - if (unit > 3) + 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; diff --git a/libmipsbox/hardware_caps.c b/libmipsbox/hardware_caps.c index 9c16e35..8e810d2 100644 --- a/libmipsbox/hardware_caps.c +++ b/libmipsbox/hardware_caps.c @@ -28,8 +28,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; #if BOXMODEL_VUDUO caps.has_CI = 2;