Ticket #4925: mythtv_remove_audio_stream.diff

File mythtv_remove_audio_stream.diff, 4.8 KB (added by skamithi, 12 years ago)
  • libs/libmythtv/avformatdecoder.cpp

     
    14441444    map<int,uint> lang_sub_cnt;
    14451445    map<int,uint> lang_aud_cnt;
    14461446
     1447    if (ringBuffer->isDVD() &&
     1448        ringBuffer->DVD()->AudioStreamsChanged())
     1449    {
     1450        ringBuffer->DVD()->AudioStreamsChanged(false);
     1451        RemoveAudioStreams();
     1452    }
     1453
    14471454    for (uint i = 0; i < ic->nb_streams; i++)
    14481455    {
    14491456        AVCodecContext *enc = ic->streams[i]->codec;
     
    30213028                if ((storedPackets.count() > 10 && !decodeStillFrame) ||
    30223029                    decodeStillFrame)
    30233030                {
    3024                     RemoveAudioStreams();
    30253031                    storevideoframes = false;
    30263032                    dvdTitleChanged = false;
    3027                     ScanStreams(true);
    30283033                }
    30293034                else
    30303035                    storevideoframes = true;
     
    40014006        info = AudioInfo(codec_ctx->codec_id,
    40024007                         codec_ctx->sample_rate, codec_ctx->channels,
    40034008                         using_passthru && !disable_passthru);
     4009        if (ringBuffer->isDVD() && info.sample_rate == 0 && info.channels > 0)
     4010            info.sample_rate = 48000;
    40044011    }
    40054012
    40064013    if (info == audioIn)
  • libs/libmythtv/DVDRingBuffer.cpp

     
    3434      lastNav(NULL),    part(0),
    3535      title(0),         titleParts(0),
    3636      gotStop(false),
    37       cellHasStillFrame(false), dvdWaiting(false),
     37      cellHasStillFrame(false), audioStreamsChanged(false),
     38      dvdWaiting(false),
    3839      titleLength(0), hl_startx(0), hl_width(0),
    3940      hl_starty(0), hl_height(0),
    4041      menuBuflength(0),
     
    446447                            break;
    447448                    }
    448449                }
     450               
     451                audioStreamsChanged = true;
    449452
    450453                if (blockBuf != dvdBlockWriteBuf)
    451454                {
  • libs/libmythtv/DVDRingBuffer.h

     
    4141    void GetPartAndTitle(int &_part, int &_title) const
    4242        { _part  = part; _title = title; }
    4343    uint GetTotalTimeOfTitle(void);
    44     uint GetChapterLength(void) { return pgLength / 90000; }
     44    uint GetChapterLength(void) const { return pgLength / 90000; }
    4545    uint GetCellStart(void);
    46     bool InStillFrame(void) { return cellHasStillFrame; }
    47     bool IsWaiting(void) { return dvdWaiting; }
    48     int  NumPartsInTitle(void) { return titleParts; }
     46    bool InStillFrame(void) const { return cellHasStillFrame; }
     47    bool AudioStreamsChanged(void) const { return audioStreamsChanged; }
     48    bool IsWaiting(void) const { return dvdWaiting; }
     49    int  NumPartsInTitle(void) const { return titleParts; }
    4950    void GetMenuSPUPkt(uint8_t *buf, int len, int stream_id);
    5051
    5152    AVSubtitleRect *GetMenuButton(void);
     
    9798    int NumMenuButtons(void) const;
    9899    void IgnoreStillOrWait(bool skip) { skipstillorwait = skip; }
    99100    void InStillFrame(bool change) { cellHasStillFrame = change; }
     101    void AudioStreamsChanged(bool change) { audioStreamsChanged = change; }
    100102    uint GetCurrentTime(void) { return (currentTime / 90000); }
    101103    uint TitleTimeLeft(void);
    102104    void  SetTrack(uint type, int trackNo);
     
    129131    bool           gotStop;
    130132
    131133    bool           cellHasStillFrame;
     134    bool           audioStreamsChanged;
    132135    bool           dvdWaiting;
    133136    long long      titleLength;
    134137    MythTimer      stillFrameTimer;
  • libs/libavformat/utils.c

     
    867867                s->cur_pkt.pos = startpos;
    868868
    869869            st = s->streams[s->cur_pkt.stream_index];
    870             if(st->codec->debug & FF_DEBUG_PTS)
     870            if(st && st->codec->debug & FF_DEBUG_PTS)
    871871                av_log(s, AV_LOG_DEBUG, "av_read_packet stream=%d, pts=%"PRId64", dts=%"PRId64", size=%d\n",
    872872                    s->cur_pkt.stream_index,
    873873                    s->cur_pkt.pts,
     
    877877            s->cur_st = st;
    878878            s->cur_ptr = s->cur_pkt.data;
    879879            s->cur_len = s->cur_pkt.size;
    880             if (st->need_parsing && !st->parser) {
     880            if (st && st->need_parsing && !st->parser) {
    881881                st->parser = av_parser_init(st->codec->codec_id);
    882882                if (!st->parser) {
    883883                    /* no parser available : just output the raw packets */