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_PES_CHANNEL,
DMX_PSI_CHANNEL,
DMX_PIP_CHANNEL,
DMX_TP_CHANNEL,
DMX_PCR_ONLY_CHANNEL
} DMX_CHANNEL_TYPE;

View File

@@ -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)

View File

@@ -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;

View File

@@ -8,13 +8,13 @@
#include <linux/dvb/audio.h>
#include <hardware_caps.h>
#include <proc_tools.h>
#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);

View File

@@ -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)

View File

@@ -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);

View File

@@ -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;

View File

@@ -39,6 +39,7 @@
#include "video_lib.h"
#include "hal_debug.h"
#include <hardware_caps.h>
#include <proc_tools.h>
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[] =