Ticket #10183: 10183fix.diff

File 10183fix.diff, 2.9 KB (added by JYA, 8 years ago)

Fix attempt

  • mythtv/libs/libmythtv/avformatdecoder.cpp

    diff --git a/mythtv/libs/libmythtv/avformatdecoder.cpp b/mythtv/libs/libmythtv/avformatdecoder.cpp
    index de2d954..7b20f56 100644
    a b bool AvFormatDecoder::ProcessAudioPacket(AVStream *curstream, AVPacket *pkt, 
    39853985    int ret             = 0;
    39863986    int data_size       = 0;
    39873987    bool firstloop      = true;
    3988     int frames          = -1;
     3988    int decoded_size    = -1;
    39893989
    39903990    avcodeclock->lock();
    39913991    int audIdx = selectedTrack[kTrackTypeAudio].av_stream_index;
    bool AvFormatDecoder::ProcessAudioPacket(AVStream *curstream, AVPacket *pkt, 
    40484048            data_size = AVCODEC_MAX_AUDIO_FRAME_SIZE;
    40494049            ret = avcodec_decode_audio3(ctx, audioSamples,
    40504050                                        &data_size, &tmp_pkt);
    4051             frames = data_size /
    4052                 (ctx->channels *
    4053                  av_get_bits_per_sample_fmt(ctx->sample_fmt)>>3);
     4051            decoded_size = data_size;
    40544052            already_decoded = true;
    40554053            reselectAudioTrack |= ctx->channels;
    40564054        }
    bool AvFormatDecoder::ProcessAudioPacket(AVStream *curstream, AVPacket *pkt, 
    41034101                    data_size = AVCODEC_MAX_AUDIO_FRAME_SIZE;
    41044102                    ret = avcodec_decode_audio3(ctx, audioSamples, &data_size,
    41054103                                                &tmp_pkt);
    4106                     frames = data_size /
    4107                         (ctx->channels *
    4108                          av_get_bits_per_sample_fmt(ctx->sample_fmt)>>3);
     4104                    decoded_size = data_size;
    41094105                }
    41104106                else
    4111                     frames = -1;
     4107                    decoded_size = -1;
    41124108            }
    41134109            memcpy(audioSamples, tmp_pkt.data, tmp_pkt.size);
    41144110            data_size = tmp_pkt.size;
    bool AvFormatDecoder::ProcessAudioPacket(AVStream *curstream, AVPacket *pkt, 
    41314127                data_size = AVCODEC_MAX_AUDIO_FRAME_SIZE;
    41324128                ret = avcodec_decode_audio3(ctx, audioSamples, &data_size,
    41334129                                            &tmp_pkt);
    4134                 frames = data_size /
    4135                     (ctx->channels *
    4136                      av_get_bits_per_sample_fmt(ctx->sample_fmt)>>3);
     4130                decoded_size = data_size;
    41374131            }
    41384132
    41394133            // When decoding some audio streams the number of
    bool AvFormatDecoder::ProcessAudioPacket(AVStream *curstream, AVPacket *pkt, 
    41704164            extract_mono_channel(audSubIdx, &audioOut,
    41714165                                 (char *)audioSamples, data_size);
    41724166
     4167        int frames = (ctx->channels <= 0 || decoded_size < 0) ? -1 :
     4168            decoded_size / (ctx->channels *
     4169                            av_get_bits_per_sample_fmt(ctx->sample_fmt)>>3);
    41734170        m_audio->AddAudioData((char *)audioSamples, data_size, temppts, frames);
    41744171        if (audioOut.do_passthru && !m_audio->NeedDecodingBeforePassthrough())
    41754172        {