Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mpc-hc/LAVFilters.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHendrik Leppkes <h.leppkes@gmail.com>2016-04-18 01:34:19 +0300
committerHendrik Leppkes <h.leppkes@gmail.com>2016-04-18 01:34:19 +0300
commit5be9dae1eb9cedbf0ca83ba036f4db603a3d169a (patch)
tree7dd439387487395ef0368a2e78e27c9b712f23fa /demuxer
parent2a2e0b843ceeb722618f3f66030b31d599142c32 (diff)
Export stereo_subtitle_offset_ids for MKV files as well
Diffstat (limited to 'demuxer')
-rw-r--r--demuxer/Demuxers/BDDemuxer.cpp1
-rw-r--r--demuxer/Demuxers/LAVFDemuxer.cpp37
2 files changed, 38 insertions, 0 deletions
diff --git a/demuxer/Demuxers/BDDemuxer.cpp b/demuxer/Demuxers/BDDemuxer.cpp
index 0a8a2701..4acea18d 100644
--- a/demuxer/Demuxers/BDDemuxer.cpp
+++ b/demuxer/Demuxers/BDDemuxer.cpp
@@ -601,6 +601,7 @@ void CBDDemuxer::ProcessBluRayMetadata()
if (pg_sequences.size() > 0)
{
// strip duplicate entries
+ pg_sequences.sort();
pg_sequences.unique();
int size = pg_sequences.size() * 4;
diff --git a/demuxer/Demuxers/LAVFDemuxer.cpp b/demuxer/Demuxers/LAVFDemuxer.cpp
index f84ebe7c..df2c811e 100644
--- a/demuxer/Demuxers/LAVFDemuxer.cpp
+++ b/demuxer/Demuxers/LAVFDemuxer.cpp
@@ -2074,6 +2074,43 @@ STDMETHODIMP CLAVFDemuxer::CreateStreams()
m_bH264MVCCombine = GetH264MVCStreamIndices(m_avFormat, &m_nH264MVCBaseStream, &m_nH264MVCExtensionStream);
}
+ if (m_bMatroska) {
+ std::list<std::string> pg_sequences;
+ for (unsigned i = 0; i < m_avFormat->nb_streams; i++) {
+ if (m_avFormat->streams[i]->codec->codec_type == AVMEDIA_TYPE_SUBTITLE) {
+ AVDictionaryEntry *e = av_dict_get(m_avFormat->streams[i]->metadata, "3d-plane", nullptr, AV_DICT_IGNORE_SUFFIX);
+ if (e && e->value) {
+ pg_sequences.push_back(std::string(e->value));
+ }
+ }
+ }
+
+ // export the list of pg sequences
+ if (pg_sequences.size() > 0)
+ {
+ // strip duplicate entries
+ pg_sequences.sort();
+ pg_sequences.unique();
+
+ int size = pg_sequences.size() * 4;
+ char *offsets = new char[size];
+ offsets[0] = 0;
+
+ // Append all offsets to the string
+ for (auto it = pg_sequences.begin(); it != pg_sequences.end(); it++) {
+ int len = strlen(offsets);
+ if (len > 0) {
+ offsets[len] = ',';
+ len++;
+ }
+ strcpy_s(offsets + len, size - len, it->c_str());
+ }
+
+ av_dict_set(&m_avFormat->metadata, "pg_offset_sequences", offsets, 0);
+ delete[] offsets;
+ }
+ }
+
return S_OK;
}