Ticket #11639: 0001-write-video-first-so-the-first-audio-frame-gets-a-pr.patch

File 0001-write-video-first-so-the-first-audio-frame-gets-a-pr.patch, 4.4 KB (added by dekarl@…, 13 years ago)
  • mythtv/programs/mythtranscode/transcode.cpp

    From b0b2ba4d5c9f59e228e211f0ed82cbd63c8c20bd Mon Sep 17 00:00:00 2001
    From: Karl Dietz <dekarl@mythtv.org>
    Date: Fri, 11 Oct 2013 22:10:44 +0200
    Subject: [PATCH 1/2] write video first so the first audio frame gets a proper
     timecode
    MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    
    Patch by Nicolas Pöhlmann
    Reviewed by Paul Gardiner
    
    Refs #11639
    Fixes #11858
    ---
     mythtv/programs/mythtranscode/transcode.cpp |  100 +++++++++++++--------------
     1 file changed, 50 insertions(+), 50 deletions(-)
    
    diff --git a/mythtv/programs/mythtranscode/transcode.cpp b/mythtv/programs/mythtranscode/transcode.cpp
    index 9cfa27d..d35f8b8 100644
    a b int Transcode::TranscodeFile(const QString &inputname,  
    13321332                          imageOut.data, imageOut.linesize);
    13331333            }
    13341334
     1335            if (!avfMode)
     1336            {
     1337                GetPlayer()->GetCC608Reader()->
     1338                    TranscodeWriteText(&TranscodeWriteText, (void *)(nvr));
     1339            }
     1340            lasttimecode = frame.timecode;
     1341            frame.timecode -= timecodeOffset;
     1342
     1343            if (avfMode)
     1344            {
     1345                if (halfFramerate && !skippedLastFrame)
     1346                {
     1347                    skippedLastFrame = true;
     1348                }
     1349                else
     1350                {
     1351                    skippedLastFrame = false;
     1352
     1353                    if ((hls) &&
     1354                        (avfw->GetFramesWritten()) &&
     1355                        (hlsSegmentFrames > hlsSegmentSize) &&
     1356                        (avfw->NextFrameIsKeyFrame()))
     1357                    {
     1358                        hls->AddSegment();
     1359                        avfw->ReOpen(hls->GetCurrentFilename());
     1360
     1361                        if (avfw2)
     1362                            avfw2->ReOpen(hls->GetCurrentFilename(true));
     1363
     1364                        hlsSegmentFrames = 0;
     1365                    }
     1366
     1367                    if (avfw->WriteVideoFrame(&frame) > 0)
     1368                    {
     1369                        lastWrittenTime = frame.timecode;
     1370                        if (hls)
     1371                            ++hlsSegmentFrames;
     1372                    }
     1373
     1374                }
     1375            }
     1376            else
     1377            {
     1378                if (forceKeyFrames)
     1379                    nvr->WriteVideo(&frame, true, true);
     1380                else
     1381                    nvr->WriteVideo(&frame);
     1382                lastWrittenTime = frame.timecode;
     1383            }
     1384
    13351385            // audio is fully decoded, so we need to reencode it
    13361386            AudioBuffer *ab = NULL;
    13371387            while ((ab = arb->GetData(lastWrittenTime)) != NULL)
    int Transcode::TranscodeFile(const QString &inputname,  
    13821432
    13831433                delete ab;
    13841434            }
    1385 
    1386             if (!avfMode)
    1387             {
    1388                 GetPlayer()->GetCC608Reader()->
    1389                     TranscodeWriteText(&TranscodeWriteText, (void *)(nvr));
    1390             }
    1391             lasttimecode = frame.timecode;
    1392             frame.timecode -= timecodeOffset;
    1393 
    1394             if (avfMode)
    1395             {
    1396                 if (halfFramerate && !skippedLastFrame)
    1397                 {
    1398                     skippedLastFrame = true;
    1399                 }
    1400                 else
    1401                 {
    1402                     skippedLastFrame = false;
    1403 
    1404                     if ((hls) &&
    1405                         (avfw->GetFramesWritten()) &&
    1406                         (hlsSegmentFrames > hlsSegmentSize) &&
    1407                         (avfw->NextFrameIsKeyFrame()))
    1408                     {
    1409                         hls->AddSegment();
    1410                         avfw->ReOpen(hls->GetCurrentFilename());
    1411 
    1412                         if (avfw2)
    1413                             avfw2->ReOpen(hls->GetCurrentFilename(true));
    1414 
    1415                         hlsSegmentFrames = 0;
    1416                     }
    1417 
    1418                     if (avfw->WriteVideoFrame(&frame) > 0)
    1419                     {
    1420                         lastWrittenTime = frame.timecode;
    1421                         if (hls)
    1422                             ++hlsSegmentFrames;
    1423                     }
    1424 
    1425                 }
    1426             }
    1427             else
    1428             {
    1429                 if (forceKeyFrames)
    1430                     nvr->WriteVideo(&frame, true, true);
    1431                 else
    1432                     nvr->WriteVideo(&frame);
    1433                 lastWrittenTime = frame.timecode;
    1434             }
    14351435        }
    14361436        if (MythDate::current() > statustime)
    14371437        {