MythTV master
bluraymetadata.cpp
Go to the documentation of this file.
1#include "bluraymetadata.h"
2
3// Qt headers
4#include <QHash>
5#include <QCoreApplication>
6#include <QStringList>
7
8#include "libmythbase/mythconfig.h"
10
11#if HAVE_LIBBLURAY
12#include <libbluray/meta_data.h>
13#else
14#include "libbluray/bdnav/meta_data.h"
15#endif
16
18{
19 if (m_bdnav)
20 bd_close(m_bdnav);
21}
22
24{
25 if (IsOpen())
26 return true;
27
28 QString keyfile = QString("%1/KEYDB.cfg").arg(GetConfDir());
29 QByteArray keyarray = keyfile.toLatin1();
30 const char *keyfilepath = keyarray.data();
31
32 m_bdnav = bd_open(m_path.toLatin1().data(), keyfilepath);
33
34 return m_bdnav != nullptr;
35}
36
38{
39 if (!OpenDisc() && !m_bdnav)
40 return false;
41
42 const meta_dl *metadata = bd_get_meta(m_bdnav);
43
44 if (metadata)
45 {
46 m_title = QString(metadata->di_name);
47 m_alttitle = QString(metadata->di_alternative);
48 m_language = QString(metadata->language_code);
49 m_discnumber = metadata->di_set_number;
50 m_disctotal = metadata->di_num_sets;
51
52 for (unsigned i = 0; i < metadata->toc_count; i++)
53 {
54 uint num = metadata->toc_entries[i].title_number;
55 QString title = QString(metadata->toc_entries[i].title_name);
56 QPair<uint,QString> ret(num,title);
57 m_titles.append(ret);
58 }
59
60 for (unsigned i = 0; i < metadata->thumb_count; i++)
61 {
62 QString filepath = QString("%1/BDMV/META/DL/%2")
63 .arg(m_path, metadata->thumbnails[i].path);
64 m_images.append(filepath);
65 }
66 }
67
68 const BLURAY_DISC_INFO *discinfo = bd_get_disc_info(m_bdnav);
69 if (discinfo)
70 {
71 m_topMenuSupported = (discinfo->top_menu_supported != 0U);
72 m_firstPlaySupported = (discinfo->first_play_supported != 0U);
73 m_numHDMVTitles = discinfo->num_hdmv_titles;
74 m_numBDJTitles = discinfo->num_bdj_titles;
75 m_numUnsupportedTitles = discinfo->num_unsupported_titles;
76 m_aacsDetected = (discinfo->aacs_detected != 0U);
77 m_libaacsDetected = (discinfo->libaacs_detected != 0U);
78 m_aacsHandled = (discinfo->aacs_handled != 0U);
79 m_bdplusDetected = (discinfo->bdplus_detected != 0U);
80 m_libbdplusDetected = (discinfo->libbdplus_detected != 0U);
81 m_bdplusHandled = (discinfo->bdplus_handled != 0U);
82 }
83
84 return true;
85}
86
88{
89 metadataMap["title"] = m_title;
90 metadataMap["alttitle"] = m_alttitle;
91 metadataMap["language"] = m_language;
92
93 metadataMap["discnumber"] = QString::number(m_discnumber);
94 metadataMap["disctotal"] = QString::number(m_disctotal);
95
96 //: %1 and %2 are both numbers, %1 is the current position, %2 the maximum
97 metadataMap["discseries"] = QCoreApplication::translate("(Common)",
98 "%1 of %2")
99 .arg(m_discnumber)
100 .arg(m_disctotal);
101
102 metadataMap["numtitles"] = QString::number(m_titles.count());
103 metadataMap["numthumbs"] = QString::number(m_images.count());
104}
bool OpenDisc(void)
BLURAY * m_bdnav
QStringList m_images
void toMap(InfoMap &metadataMap)
~BlurayMetadata() override
uint32_t m_numHDMVTitles
BlurayTitles m_titles
bool ParseDisc(void)
uint32_t m_numUnsupportedTitles
bool m_libbdplusDetected
bool m_firstPlaySupported
QString m_language
QString m_alttitle
uint32_t m_numBDJTitles
unsigned int uint
Definition: compat.h:60
QString GetConfDir(void)
Definition: mythdirs.cpp:285
QHash< QString, QString > InfoMap
Definition: mythtypes.h:15