Ticket #5230: out_add_support_iptv_radio.diff

File out_add_support_iptv_radio.diff, 5.2 KB (added by laurent@…, 18 years ago)

Add support for iptv radio....

  • libs/libmythtv/mpeg/mpegstreamdata.cpp

     
    7979      _pmt_single_program_num_video(1),
    8080      _pmt_single_program_num_audio(0),
    8181      _pat_single_program(NULL), _pmt_single_program(NULL),
    82       _invalid_pat_seen(false), _invalid_pat_warning(false)
     82      _invalid_pat_seen(false), _invalid_pat_warning(false),
     83      _filter_audio_pid(-1)
    8384{
    8485    _local_utc_offset = calc_utc_offset();
    8586
     
    560561
    561562        if (is_audio)
    562563        {
    563             audio_cnt++;
    564             audioPIDs.push_back(pid);
     564                        if (_filter_audio_pid==-1 || _filter_audio_pid==pid)
     565                        {
     566                            audio_cnt++;
     567                                audioPIDs.push_back(pid);
     568                        }
     569                        else continue;
    565570        }
    566571
    567572#ifdef DEBUG_MPEG_RADIO
  • libs/libmythtv/mpeg/mpegstreamdata.h

     
    178178            return -1;
    179179        return *it;
    180180    }
     181   
     182    void SetFilterAudioPid(int filter_audio_pid)
     183    {
     184        _filter_audio_pid = filter_audio_pid;
     185    }
    181186
    182187    // Sections seen
    183188    void SetPATSectionSeen(uint tsid, uint section);
     
    374379    bool                      _invalid_pat_seen;
    375380    bool                      _invalid_pat_warning;
    376381    MythTimer                 _invalid_pat_timer;
     382   
     383    int                            _filter_audio_pid;
    377384
    378385  protected:
    379386    static const unsigned char bit_sel[8];
  • libs/libmythtv/iptvrecorder.cpp

     
    7575        Open();
    7676
    7777    if (_stream_data)
    78         _stream_data->Reset(_stream_data->DesiredProgram());
    79 
     78    {
     79        IPTVChannelInfo chaninfo = _channel->GetCurrentChanInfo();
     80        _stream_data->SetFilterAudioPid(chaninfo.audioStartPid());
     81        _stream_data->Reset(_stream_data->DesiredProgram());
     82    }
     83   
    8084    DTVRecorder::Unpause();
    8185
    8286    VERBOSE(VB_RECORD, LOC + "Unpause() -- end");
  • libs/libmythtv/iptv/iptvchannelfetcher.cpp

     
    271273        QString msg = tr("Encountered malformed channel");
    272274        if (!channum.isEmpty())
    273275        {
    274             chanmap[channum] = info;
     276            if (chanmap.contains(channum))
     277            {
     278               chanmap["f_" + info.m_freqid] = info;
     279            }
     280            else
     281            {
     282               chanmap[channum] = info;
     283            }
    275284
    276285            msg = tr("Parsing Channel #%1 : %2 : %3")
    277286                .arg(channum).arg(info.m_name).arg(info.m_url);
     
    303312
    304313    QString name;
    305314    QString xmltvid;
     315    int audiostartpid = -1;
    306316    while (true)
    307317    {
    308318        QString line = rawdata.section("\n", lineNum, lineNum);
     
    324334                    xmltvid = data.mid(data.find('=')+1);
    325335                }
    326336            }
     337            else if (line.startsWith("#EXTVLCOPT:"))
     338            {
     339                QString cmd = line.mid(line.find(':')+1);
     340                if (cmd.startsWith("audio-track-id"))
     341                {
     342                        audiostartpid = line.mid(line.find('=')+1).toInt();
     343                }
     344            }
    327345            else
    328346            {
    329347                // Just ignore other comments
     
    334352            if (name.isEmpty())
    335353                return false;
    336354            QString url = line;
    337             info = IPTVChannelInfo(name, url, xmltvid);
     355           
     356                        int p1 = url.find("?id=");
     357                QString freqId = url.mid(p1+4);
     358            info = IPTVChannelInfo(name, url, xmltvid, freqId, audiostartpid);
    338359            return true;
    339360        }
    340361    }
  • libs/libmythtv/iptv/iptvchannelinfo.h

     
    1515    IPTVChannelInfo() :
    1616        m_name(QString::null),
    1717        m_url(QString::null),
    18         m_xmltvid(QString::null) {}
    19 
     18        m_xmltvid(QString::null),
     19             m_freqid(QString::null),
     20             m_audiostartpid(0) {}
     21       
     22       
    2023    IPTVChannelInfo(const QString &name,
    2124                    const QString &url,
    22                     const QString &xmltvid) :
    23                     m_name(name), m_url(url), m_xmltvid(xmltvid) {}
     25                    const QString &xmltvid,
     26                    const QString &freqid,
     27                    int audiostartpid) :
     28        m_name(name), m_url(url), m_xmltvid(xmltvid), m_freqid(freqid), m_audiostartpid(audiostartpid) {}
    2429
    2530    bool isValid(void) const
    2631    {
    2732        return !m_name.isEmpty() && !m_url.isEmpty();
    2833    }
     34   
     35    int audioStartPid() const
     36    {
     37        return m_audiostartpid;
     38    }
    2939
    3040  public:
    3141    QString m_name;
    3242    QString m_url;
    3343    QString m_xmltvid;
     44    QString m_freqid;
     45    int m_audiostartpid;
    3446};
    3547
    3648typedef QMap<QString,IPTVChannelInfo> fbox_chan_map_t;