Ticket #506: mythtv_audiosyncconsolid.patch

File mythtv_audiosyncconsolid.patch, 4.4 KB (added by Mark Spieth <mspieth@…>, 15 years ago)
  • libs/libmythtv/NuppelVideoPlayer.h

     
    229231
    230232    // Time Code adjustment stuff
    231233    long long AdjustAudioTimecodeOffset(long long v)
    232         { audio_timecode_offset += v;  return audio_timecode_offset; }
     234        { tc_wrap[TC_AUDIO] += v;  return tc_wrap[TC_AUDIO]; }
    233235    long long ResetAudioTimecodeOffset(void)
    234         { audio_timecode_offset = 0LL; return audio_timecode_offset; }
     236        { tc_wrap[TC_AUDIO] = 0LL; return tc_wrap[TC_AUDIO]; }
    235237    long long ResyncAudioTimecodeOffset(void)
    236         { audio_timecode_offset = 0x8000LL << 12; return 0L; }
     238        { tc_wrap[TC_AUDIO] = LONG_LONG_MIN; return 0L; }
    237239    long long GetAudioTimecodeOffset(void) const
    238         { return audio_timecode_offset; }
     240        { return tc_wrap[TC_AUDIO]; }
    239241 
    240242  protected:
    241243    void DisplayPauseFrame(void);
     
    514516    int        avsync_avg;
    515517    int        avsync_oldavg;
    516518    int        refreshrate;
    517     long long  lastaudiotime;
    518     long long  audio_timecode_offset;
    519519    bool       lastsync;
    520520    bool       m_playing_slower;
    521521    float      m_stored_audio_stretchfactor;
  • libs/libmythtv/NuppelVideoPlayer.cpp

     
    143143      vsynctol(30/4),               avsync_delay(0),
    144144      avsync_adjustment(0),         avsync_avg(0),
    145145      avsync_oldavg(0),             refreshrate(0),
    146       lastaudiotime(0),             audio_timecode_offset(0),
    147146      lastsync(false),              m_playing_slower(false),
    148147      m_stored_audio_stretchfactor(1.0),
    149148      // Audio warping stuff
     
    14491465    if (audioOutput && normal_speed)
    14501466    {
    14511467        long long currentaudiotime = audioOutput->GetAudiotime();
    1452         if (audio_timecode_offset == (long long)0x8000000000000000LL)
    1453             audio_timecode_offset = buffer->timecode - currentaudiotime;
    1454 
    1455         // ms, same scale as timecodes
    1456         lastaudiotime = currentaudiotime + audio_timecode_offset;
    14571468#if 0
    14581469        VERBOSE(VB_PLAYBACK, QString("A/V timecodes audio %1 video %2 frameinterval %3 avdel %4 avg %5 tcoffset %6")
    1459                 .arg(lastaudiotime)
     1470                .arg(currentaudiotime)
    14601471                .arg(buffer->timecode)
    14611472                .arg(frame_interval)
    1462                 .arg(buffer->timecode - lastaudiotime)
     1473                .arg(buffer->timecode - currentaudiotime)
    14631474                .arg(avsync_avg)
    1464                 .arg(audio_timecode_offset)
     1475                .arg(tc_wrap[TC_AUDIO])
    14651476                 );
    14661477#endif
    14671478        if (currentaudiotime != 0 && buffer->timecode != 0)
     
    14821493                    videosync->AdvanceTrigger();
    14831494            }
    14841495
    1485             avsync_delay = (buffer->timecode - lastaudiotime) * 1000; // uSecs
     1496            avsync_delay = (buffer->timecode - currentaudiotime) * 1000; // uSecs
    14861497            avsync_avg = (avsync_delay + (avsync_avg * 3)) / 4;
    14871498            if (!usevideotimebase)
    14881499            {
     
    16511662
    16521663void NuppelVideoPlayer::OutputVideoLoop(void)
    16531664{
    1654     lastaudiotime = 0;
    16551665    delay = 0;
    16561666    avsync_delay = 0;
    16571667    avsync_avg = 0;
     
    21882198
    21892199void NuppelVideoPlayer::WrapTimecode(long long &timecode, TCTypes tc_type)
    21902200{
     2201    if ((tc_type == TC_AUDIO) && (tc_wrap[TC_AUDIO] == LONG_LONG_MIN))
     2202    {
     2203        long long newaudio;
     2204        newaudio = tc_lastval[TC_VIDEO] - tc_diff_estimate;
     2205        tc_wrap[TC_AUDIO] = newaudio - timecode;
     2206        timecode = newaudio;
     2207        tc_lastval[TC_AUDIO] = timecode;
     2208        VERBOSE(VB_IMPORTANT, "Manual Resync AV sync values");
     2209    }
     2210
    21912211    timecode += tc_wrap[tc_type];
    21922212
    21932213    // wrapped
     
    22062226        tc_avcheck_framecounter++;
    22072227        if (tc_avcheck_framecounter == 30)
    22082228        {
     2229#if 0
    22092230            // something's terribly, terribly wrong.
    22102231            if (tc_lastval[TC_AUDIO] < tc_lastval[TC_VIDEO] - 10000000 ||
    22112232                tc_lastval[TC_VIDEO] < tc_lastval[TC_AUDIO] - 10000000)
     
    22172238                tc_lastval[TC_AUDIO] = timecode;
    22182239                VERBOSE(VB_IMPORTANT, "Guessing at new AV sync values");
    22192240            }
     2241#endif
    22202242
    22212243            tc_diff_estimate = tc_lastval[TC_VIDEO] - tc_lastval[TC_AUDIO];
    22222244            tc_avcheck_framecounter = 0;