All pastes #1902514 Raw Edit

Someone

public diff v1 · immutable
#1902514 ·published 2010-07-17 17:27 UTC
rendered paste body
Index: myth/trunk/mythtv/libs/libmythtv/avformatdecoder.cpp===================================================================--- myth.orig/trunk/mythtv/libs/libmythtv/avformatdecoder.cpp+++ myth/trunk/mythtv/libs/libmythtv/avformatdecoder.cpp@@ -27,6 +27,7 @@ using namespace std; #include "subtitlereader.h" #include "interactivetv.h" #include "DVDRingBuffer.h"+#include "BDRingBuffer.h" #include "videodisplayprofile.h" #include "mythuihelper.h"@@ -1851,7 +1852,9 @@ int AvFormatDecoder::ScanStreams(bool no     selectedVideoIndex = -1;     map<int,uint> lang_sub_cnt;+    uint subtitleStreamCount = 0;     map<int,uint> lang_aud_cnt;+    uint audioStreamCount = 0;     if (ringBuffer && ringBuffer->isDVD() &&         ringBuffer->DVD()->AudioStreamsChanged())@@ -2219,10 +2222,18 @@ int AvFormatDecoder::ScanStreams(bool no         if (enc->codec_type == CODEC_TYPE_SUBTITLE)         {-            AVMetadataTag *metatag = av_metadata_get(ic->streams[i]->metadata,-                                                     "language", NULL, 0);-            int lang = metatag ? get_canonical_lang(metatag->value) : iso639_str3_to_key("und");+            int lang;+            if (ringBuffer && ringBuffer->isBD())+                lang = ringBuffer->BD()->GetSubtitleLanguage(subtitleStreamCount);+            else+            {+                AVMetadataTag *metatag = av_metadata_get(ic->streams[i]->metadata,+                                                        "language", NULL, 0);+                lang = metatag ? get_canonical_lang(metatag->value) : iso639_str3_to_key("und");+            }+             int lang_indx = lang_sub_cnt[lang]++;+            subtitleStreamCount++;             tracks[kTrackTypeSubtitle].push_back(                 StreamInfo(i, lang, lang_indx, ic->streams[i]->id));@@ -2240,6 +2251,8 @@ int AvFormatDecoder::ScanStreams(bool no             if (ringBuffer && ringBuffer->isDVD())                 lang = ringBuffer->DVD()->GetAudioLanguage(                     ringBuffer->DVD()->GetAudioTrackNum(ic->streams[i]->id));+            else if (ringBuffer && ringBuffer->isBD())+                lang = ringBuffer->BD()->GetAudioLanguage(audioStreamCount);             else             {                 AVMetadataTag *metatag = av_metadata_get(ic->streams[i]->metadata,@@ -2248,6 +2261,7 @@ int AvFormatDecoder::ScanStreams(bool no             }             int lang_indx = lang_aud_cnt[lang]++;+            audioStreamCount++;             if (ic->streams[i]->codec->avcodec_dual_language)             {Index: myth/trunk/mythtv/libs/libmythtv/BDRingBuffer.cpp===================================================================--- myth.orig/trunk/mythtv/libs/libmythtv/BDRingBuffer.cpp+++ myth/trunk/mythtv/libs/libmythtv/BDRingBuffer.cpp@@ -1,7 +1,11 @@++#include <cstring>+ #include "bdnav/mpls_parse.h" #include "bdnav/navigation.h" #include "bdnav/bdparse.h"+#include "iso639.h" #include "BDRingBuffer.h" #include "mythverbose.h" #include "mythdirs.h"@@ -53,8 +54,14 @@ bool BDRingBufferPriv::OpenFile(const QS         VERBOSE(VB_IMPORTANT, LOC + QString("Opened BDRingBuffer device at %1")                 .arg(filename.toLatin1().data()));+        QString keyfile = QString("%1/KEYDB.cfg").arg(GetConfDir());+        QByteArray keyarray = keyfile.toAscii();+        const char *keyfilepath = keyarray.data();+         bdnav = bd_open(filename.toLatin1().data(), keyfilepath);+        VERBOSE(VB_IMPORTANT, LOC + QString("Using %1 as keyfile...")+                .arg(QString(keyfilepath)));         if (!bdnav)             return false;@@ -264,3 +271,46 @@ double BDRingBufferPriv::GetFrameRate(vo     else         return 0; }++int BDRingBufferPriv::GetAudioLanguage(uint streamID)+{+    if (!m_currentTitleInfo ||+        streamID >= m_currentTitleInfo->clips->audio_stream_count)+        return iso639_str3_to_key("und");++    uint8_t lang[4] = { 0, 0, 0, 0 };+    memcpy(lang, m_currentTitleInfo->clips->audio_streams[streamID].lang, 4);+    int code = iso639_key_to_canonical_key((lang[0]<<16)|(lang[1]<<8)|lang[2]);++    VERBOSE(VB_IMPORTANT, QString("Audio Lang: %1 Code: %2").arg(code).arg(iso639_key_to_str3(code)));++    return code;+}++int BDRingBufferPriv::GetSubtitleLanguage(uint streamID)+{+    if (m_currentTitleInfo)+    {+        int pgCount = m_currentTitleInfo->clips->pg_stream_count;+        uint subCount = 0;+        for (int i = 0; i < pgCount; ++i)+        {+            if (m_currentTitleInfo->clips->pg_streams[i].coding_type >= 0x90 &&+                m_currentTitleInfo->clips->pg_streams[i].coding_type <= 0x92)+            {+                if (streamID == subCount)+                {++                    uint8_t lang[4] = { 0, 0, 0, 0 };+                    memcpy(lang, m_currentTitleInfo->clips->pg_streams[streamID].lang, 4);+                    int code = iso639_key_to_canonical_key((lang[0]<<16)|(lang[1]<<8)|lang[2]);+                    VERBOSE(VB_IMPORTANT, QString("Subtitle Lang: %1 Code: %2").arg(code).arg(iso639_key_to_str3(code)));+                    return code;+                }+                subCount++;+            }+        }+    }++    return iso639_str3_to_key("und");+}\ No newline at end of fileIndex: myth/trunk/mythtv/libs/libmythtv/BDRingBuffer.h===================================================================--- myth.orig/trunk/mythtv/libs/libmythtv/BDRingBuffer.h+++ myth/trunk/mythtv/libs/libmythtv/BDRingBuffer.h@@ -41,6 +41,9 @@ class MPUBLIC BDRingBufferPriv     void GetDescForPos(QString &desc) const;     double GetFrameRate(void);+    int GetAudioLanguage(uint streamID);+    int GetSubtitleLanguage(uint streamID);+     // commands     bool OpenFile(const QString &filename);     void close(void);