X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/c21489da95da44864e63edd6987baf17d3cbe84f..2e874fa14264bf37f17ae9b9375e26059e7f35ec:/lib/dvb/decoder.cpp?ds=sidebyside diff --git a/lib/dvb/decoder.cpp b/lib/dvb/decoder.cpp index a6537e81..362289f3 100644 --- a/lib/dvb/decoder.cpp +++ b/lib/dvb/decoder.cpp @@ -137,6 +137,19 @@ void eDVBAudio::unfreeze() eDebug("video: AUDIO_CONTINUE: %m"); } +void eDVBAudio::setChannel(int channel) +{ + int val = AUDIO_STEREO; + switch (channel) + { + case aMonoLeft: val = AUDIO_MONO_LEFT; break; + case aMonoRight: val = AUDIO_MONO_RIGHT; break; + default: break; + } + if (::ioctl(m_fd, AUDIO_CHANNEL_SELECT, val) < 0) + eDebug("video: AUDIO_CHANNEL_SELECT: %m"); +} + int eDVBAudio::getPTS(pts_t &now) { return ::ioctl(m_fd, AUDIO_GET_PTS, &now); @@ -175,13 +188,21 @@ eDVBVideo::eDVBVideo(eDVBDemux *demux, int dev): m_demux(demux), m_dev(dev) eWarning("%s: %m", filename); eDebug("demux device: %s", filename); } - -int eDVBVideo::startPid(int pid) + +// not finally values i think.. !! +#define VIDEO_STREAMTYPE_MPEG2 0 +#define VIDEO_STREAMTYPE_MPEG4_H264 1 + +int eDVBVideo::startPid(int pid, int type) { if ((m_fd < 0) || (m_fd_demux < 0)) return -1; dmx_pes_filter_params pes; + if (::ioctl(m_fd, VIDEO_SET_STREAMTYPE, + type == MPEG4_H264 ? VIDEO_STREAMTYPE_MPEG4_H264 : VIDEO_STREAMTYPE_MPEG2) < 0) + eWarning("video: VIDEO_SET_STREAMTYPE: %m"); + pes.pid = pid; pes.input = DMX_IN_FRONTEND; pes.output = DMX_OUT_DECODER; @@ -465,7 +486,7 @@ int eTSMPEGDecoder::setState() { eDebug("new video"); m_video = new eDVBVideo(m_demux, m_decoder); - if (m_video->startPid(m_vpid)) + if (m_video->startPid(m_vpid, m_vtype)) { eWarning("video: startpid failed!"); res = -1; @@ -522,12 +543,13 @@ eTSMPEGDecoder::~eTSMPEGDecoder() setState(); } -RESULT eTSMPEGDecoder::setVideoPID(int vpid) +RESULT eTSMPEGDecoder::setVideoPID(int vpid, int type) { if (m_vpid != vpid) { m_changed |= changeVideo; m_vpid = vpid; + m_vtype = type; } return 0; } @@ -543,6 +565,15 @@ RESULT eTSMPEGDecoder::setAudioPID(int apid, int type) return 0; } +RESULT eTSMPEGDecoder::setAudioChannel(int channel) +{ + if (m_audio) + m_audio->setChannel(channel); + else + eDebug("eTSMPEGDecoder::setAudioChannel but no audio decoder exist"); + return 0; +} + RESULT eTSMPEGDecoder::setSyncPCR(int pcrpid) { if (m_pcrpid != pcrpid)