DMX_PIP_CHANNEL removed, DMX_VIDEO_CHANNEL does the same

This commit is contained in:
BPanther
2021-10-03 15:43:01 +02:00
committed by Thilo Graf
parent bfdea46350
commit a489111a1a
8 changed files with 79 additions and 32 deletions

View File

@@ -65,7 +65,6 @@ typedef enum
DMX_AUDIO_CHANNEL, DMX_AUDIO_CHANNEL,
DMX_PES_CHANNEL, DMX_PES_CHANNEL,
DMX_PSI_CHANNEL, DMX_PSI_CHANNEL,
DMX_PIP_CHANNEL,
DMX_TP_CHANNEL, DMX_TP_CHANNEL,
DMX_PCR_ONLY_CHANNEL DMX_PCR_ONLY_CHANNEL
} DMX_CHANNEL_TYPE; } DMX_CHANNEL_TYPE;

View File

@@ -511,7 +511,6 @@ bool cDemux::pesFilter(const unsigned short _pid)
switch (dmx_type) switch (dmx_type)
{ {
case DMX_PIP_CHANNEL:
case DMX_VIDEO_CHANNEL: case DMX_VIDEO_CHANNEL:
switch (num) switch (num)
{ {
@@ -532,18 +531,15 @@ bool cDemux::pesFilter(const unsigned short _pid)
break; break;
case DMX_PES_CHANNEL: case DMX_PES_CHANNEL:
p_flt.pes_type = DMX_PES_OTHER; p_flt.pes_type = DMX_PES_OTHER;
p_flt.output = DMX_OUT_TAP; p_flt.output = DMX_OUT_TAP;
break; break;
#if 0 #if 0
case DMX_PSI_CHANNEL: case DMX_PSI_CHANNEL:
break; break;
case DMX_PIP_CHANNEL: /* PIP is a special version of DMX_VIDEO_CHANNEL */
p_flt.pes_type = DMX_PES_VIDEO1;
break;
#endif #endif
case DMX_TP_CHANNEL: case DMX_TP_CHANNEL:
p_flt.pes_type = DMX_PES_OTHER; p_flt.pes_type = DMX_PES_OTHER;
p_flt.output = DMX_OUT_TSDEMUX_TAP; p_flt.output = DMX_OUT_TSDEMUX_TAP;
break; break;
case DMX_PCR_ONLY_CHANNEL: case DMX_PCR_ONLY_CHANNEL:
switch (num) switch (num)

View File

@@ -16,7 +16,6 @@ typedef enum
DMX_AUDIO_CHANNEL, DMX_AUDIO_CHANNEL,
DMX_PES_CHANNEL, DMX_PES_CHANNEL,
DMX_PSI_CHANNEL, DMX_PSI_CHANNEL,
DMX_PIP_CHANNEL,
DMX_TP_CHANNEL, DMX_TP_CHANNEL,
DMX_PCR_ONLY_CHANNEL DMX_PCR_ONLY_CHANNEL
} DMX_CHANNEL_TYPE; } DMX_CHANNEL_TYPE;

View File

@@ -8,13 +8,13 @@
#include <linux/dvb/audio.h> #include <linux/dvb/audio.h>
#include <hardware_caps.h>
#include <proc_tools.h> #include <proc_tools.h>
#include "audio_lib.h" #include "audio_lib.h"
#include "audio_mixer.h" #include "audio_mixer.h"
#include "hal_debug.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_debug(args...) _hal_debug(HAL_DEBUG_AUDIO, this, args)
#define hal_info(args...) _hal_info(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 *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; fd = -1;
clipfd = -1; clipfd = -1;
mixer_fd = -1; mixer_fd = -1;
@@ -54,7 +71,7 @@ void cAudio::openDevice(void)
if (fd < 0) 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"); hal_info("openDevice: open failed (%m)\n");
fcntl(fd, F_SETFD, FD_CLOEXEC); fcntl(fd, F_SETFD, FD_CLOEXEC);
do_mute(true, false); do_mute(true, false);

View File

@@ -26,6 +26,7 @@ class cAudio
friend class cPlayback; friend class cPlayback;
private: private:
int fd; int fd;
unsigned int devnum;
bool Muted; bool Muted;
int clipfd; /* for pcm playback */ int clipfd; /* for pcm playback */
@@ -50,7 +51,7 @@ class cAudio
public: public:
/* construct & destruct */ /* construct & destruct */
cAudio(void *, void *, void *); cAudio(void *, void *, void *, unsigned int unit = 0);
~cAudio(void); ~cAudio(void);
void open_AVInput_Device(void) void open_AVInput_Device(void)

View File

@@ -503,31 +503,50 @@ bool cDemux::pesFilter(const unsigned short _pid)
memset(&p_flt, 0, sizeof(p_flt)); memset(&p_flt, 0, sizeof(p_flt));
p_flt.pid = pid; p_flt.pid = pid;
p_flt.output = DMX_OUT_DECODER;
p_flt.input = DMX_IN_FRONTEND; p_flt.input = DMX_IN_FRONTEND;
p_flt.output = DMX_OUT_DECODER;
p_flt.flags = DMX_IMMEDIATE_START; p_flt.flags = DMX_IMMEDIATE_START;
switch (dmx_type) switch (dmx_type)
{ {
case DMX_PCR_ONLY_CHANNEL: case DMX_VIDEO_CHANNEL:
p_flt.pes_type = DMX_PES_PCR; 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; break;
case DMX_AUDIO_CHANNEL: case DMX_AUDIO_CHANNEL:
p_flt.pes_type = DMX_PES_AUDIO; switch (num)
break; {
case DMX_VIDEO_CHANNEL: case 0: p_flt.pes_type = DMX_PES_AUDIO0; break;
p_flt.pes_type = DMX_PES_VIDEO; case 1: p_flt.pes_type = DMX_PES_AUDIO1; break;
break; case 2: p_flt.pes_type = DMX_PES_AUDIO2; break;
case DMX_PIP_CHANNEL: /* PIP is a special version of DMX_VIDEO_CHANNEL */ case 3: p_flt.pes_type = DMX_PES_AUDIO3; break;
p_flt.pes_type = DMX_PES_VIDEO1; }
break; break;
case DMX_PES_CHANNEL: case DMX_PES_CHANNEL:
p_flt.pes_type = DMX_PES_OTHER; p_flt.pes_type = DMX_PES_OTHER;
p_flt.output = DMX_OUT_TAP; p_flt.output = DMX_OUT_TAP;
break; break;
#if 0
case DMX_PSI_CHANNEL:
break;
#endif
case DMX_TP_CHANNEL: case DMX_TP_CHANNEL:
p_flt.pes_type = DMX_PES_OTHER; 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; break;
default: default:
hal_info("%s #%d invalid dmx_type %d!\n", __func__, num, dmx_type); hal_info("%s #%d invalid dmx_type %d!\n", __func__, num, dmx_type);

View File

@@ -29,8 +29,11 @@ hw_caps_t *get_hwcaps(void)
memset(&caps, 0, sizeof(hw_caps_t)); memset(&caps, 0, sizeof(hw_caps_t));
if (access("/dev/dvb/adapter0/video1", F_OK) != -1) caps.pip_devs = 0;
caps.can_pip = 1; 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.has_CI = 0;
caps.can_cec = 1; caps.can_cec = 1;

View File

@@ -39,6 +39,7 @@
#include "video_lib.h" #include "video_lib.h"
#include "hal_debug.h" #include "hal_debug.h"
#include <hardware_caps.h>
#include <proc_tools.h> #include <proc_tools.h>
extern "C" extern "C"
@@ -82,36 +83,48 @@ static bool stillpicture = false;
static const char *VDEV[] = static const char *VDEV[] =
{ {
"/dev/dvb/adapter0/video0", "/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[] = static const char *VMPEG_aspect[] =
{ {
"/proc/stb/vmpeg/0/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[] = static const char *VMPEG_xres[] =
{ {
"/proc/stb/vmpeg/0/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[] = static const char *VMPEG_yres[] =
{ {
"/proc/stb/vmpeg/0/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[] = static const char *VMPEG_dst_all[] =
{ {
"/proc/stb/vmpeg/0/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[] = static const char *VMPEG_framerate[] =
{ {
"/proc/stb/vmpeg/0/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[] = static const char *VMPEG_visible[] =