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-03-06 12:13:51 +0300
committerHendrik Leppkes <h.leppkes@gmail.com>2016-03-06 12:13:51 +0300
commitb3447481c97b8bc23c8654848623ca452946f377 (patch)
tree905af72f1ced71c7a2af42528df21c64c6bc2550 /demuxer
parenta112efea2adad28c726265251bae924f9527c7ee (diff)
Export a list of all PGS depth offsets as stereo_subtitle_offset_ids
This works similar to stereo_interactive_offset_ids
Diffstat (limited to 'demuxer')
-rw-r--r--demuxer/Demuxers/BDDemuxer.cpp36
-rw-r--r--demuxer/Demuxers/LAVFDemuxer.cpp1
2 files changed, 33 insertions, 4 deletions
diff --git a/demuxer/Demuxers/BDDemuxer.cpp b/demuxer/Demuxers/BDDemuxer.cpp
index 809395fc..8c387bd7 100644
--- a/demuxer/Demuxers/BDDemuxer.cpp
+++ b/demuxer/Demuxers/BDDemuxer.cpp
@@ -584,15 +584,43 @@ void CBDDemuxer::ProcessBluRayMetadata()
MPLS_PL * mpls = bd_get_title_mpls(m_pBD);
if (mpls) {
// Read the PG offsets and store them as metadata
+ std::list<uint8_t> pg_sequences;
for (int i = 0; i < mpls->play_item[0].stn.num_pg; i++) {
AVStream *avstream = m_lavfDemuxer->GetAVStreamByPID(mpls->play_item[0].stn.pg[i].pid);
- if (avstream && mpls->play_item[0].stn.pg[i].ss_offset_sequence_id != 0xFF) {
- char offset[4];
- _itoa_s(mpls->play_item[0].stn.pg[i].ss_offset_sequence_id, offset, 10);
- av_dict_set(&avstream->metadata, "ss_offset_sequence_id", offset, 0);
+ if (mpls->play_item[0].stn.pg[i].ss_offset_sequence_id != 0xFF) {
+ pg_sequences.push_back(mpls->play_item[0].stn.pg[i].ss_offset_sequence_id);
+ if (avstream) {
+ char offset[4];
+ _itoa_s(mpls->play_item[0].stn.pg[i].ss_offset_sequence_id, offset, 10);
+ av_dict_set(&avstream->metadata, "ss_offset_sequence_id", offset, 0);
+ }
}
}
+ // export the list of pg sequences
+ if (pg_sequences.size() > 0)
+ {
+ // strip duplicate entries
+ 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++;
+ }
+ _itoa_s(*it, offsets + len, size - len, 10);
+ }
+
+ av_dict_set(&m_lavfDemuxer->m_avFormat->metadata, "pg_offset_sequences", offsets, 0);
+ delete[] offsets;
+ }
+
// Export a list of all IG offsets
if (mpls->play_item[0].stn.num_ig > 0) {
std::list<uint8_t> ig_sequences;
diff --git a/demuxer/Demuxers/LAVFDemuxer.cpp b/demuxer/Demuxers/LAVFDemuxer.cpp
index 93297a07..ec7b8ed4 100644
--- a/demuxer/Demuxers/LAVFDemuxer.cpp
+++ b/demuxer/Demuxers/LAVFDemuxer.cpp
@@ -1819,6 +1819,7 @@ static struct {
{ "stereoscopic3dmode", "stereo_mode", 1 },
{ "stereo_mode", nullptr, 1 },
{ "stereo_subtitle_offset_id", "ss_offset_sequence_id", 3 },
+ { "stereo_subtitle_offset_ids", "pg_offset_sequences", 0 },
{ "stereo_interactive_offset_ids", "ig_offset_sequences", 0 },
};