aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorenen92 <92enen@gmail.com>2022-06-29 16:58:25 +0100
committerenen92 <92enen@gmail.com>2022-06-29 21:23:52 +0100
commit4c49f228fd55e38db41b0aacd63e66eb1cb867ec (patch)
treea9ec49521528a8b35e8ea5b83dc578aff0d0da3d
parent2e539f6fd3b781b0274e7dd38573cc05182bc675 (diff)
[dvdnav] Add GetDVDVolIdString as fallback to GetDVDVolIdString
-rw-r--r--xbmc/cores/VideoPlayer/DVDInputStreams/DVDInputStreamNavigator.cpp15
-rw-r--r--xbmc/cores/VideoPlayer/DVDInputStreams/DVDInputStreamNavigator.h8
-rw-r--r--xbmc/cores/VideoPlayer/DVDInputStreams/DllDvdNav.h3
-rw-r--r--xbmc/utils/DiscsUtils.cpp5
4 files changed, 31 insertions, 0 deletions
diff --git a/xbmc/cores/VideoPlayer/DVDInputStreams/DVDInputStreamNavigator.cpp b/xbmc/cores/VideoPlayer/DVDInputStreams/DVDInputStreamNavigator.cpp
index 95fa8c5e89..e7b54e3351 100644
--- a/xbmc/cores/VideoPlayer/DVDInputStreams/DVDInputStreamNavigator.cpp
+++ b/xbmc/cores/VideoPlayer/DVDInputStreams/DVDInputStreamNavigator.cpp
@@ -1412,6 +1412,21 @@ std::string CDVDInputStreamNavigator::GetDVDSerialString()
return "";
}
+std::string CDVDInputStreamNavigator::GetDVDVolIdString()
+{
+ if (!m_dvdnav)
+ return "";
+
+ const char* volIdTmp = m_dll.dvdnav_get_volid_string(m_dvdnav);
+ if (volIdTmp)
+ {
+ std::string volId{volIdTmp};
+ free(const_cast<char*>(volIdTmp));
+ return volId;
+ }
+ return "";
+}
+
int64_t CDVDInputStreamNavigator::GetChapterPos(int ch)
{
if (ch == -1 || ch > GetChapterCount())
diff --git a/xbmc/cores/VideoPlayer/DVDInputStreams/DVDInputStreamNavigator.h b/xbmc/cores/VideoPlayer/DVDInputStreams/DVDInputStreamNavigator.h
index c06ceb252f..d33364b48f 100644
--- a/xbmc/cores/VideoPlayer/DVDInputStreams/DVDInputStreamNavigator.h
+++ b/xbmc/cores/VideoPlayer/DVDInputStreams/DVDInputStreamNavigator.h
@@ -125,6 +125,14 @@ public:
bool PosTime(int iTimeInMsec) override; //seek within current pg(c)
std::string GetDVDTitleString();
+
+ /*!
+ * \brief Get the DVD volume ID string. Alternative to the dvd title (since some DVD authors
+ even forget to set it).
+ * \return The DVD volume id
+ */
+ std::string GetDVDVolIdString();
+
std::string GetDVDSerialString();
void CheckButtons();
diff --git a/xbmc/cores/VideoPlayer/DVDInputStreams/DllDvdNav.h b/xbmc/cores/VideoPlayer/DVDInputStreams/DllDvdNav.h
index 498ba0aea3..7a0c149e02 100644
--- a/xbmc/cores/VideoPlayer/DVDInputStreams/DllDvdNav.h
+++ b/xbmc/cores/VideoPlayer/DVDInputStreams/DllDvdNav.h
@@ -100,6 +100,7 @@ public:
virtual dvdnav_status_t dvdnav_mouse_select(dvdnav_t *self, pci_t *pci, int32_t x, int32_t y)=0;
virtual dvdnav_status_t dvdnav_get_title_string(dvdnav_t *self, const char **title_str)=0;
virtual dvdnav_status_t dvdnav_get_serial_string(dvdnav_t *self, const char **serial_str)=0;
+ virtual const char* dvdnav_get_volid_string(dvdnav_t* self) = 0;
virtual dvdnav_status_t dvdnav_get_disk_region_mask(dvdnav_t* self, int32_t* region_mask) = 0;
virtual uint32_t dvdnav_describe_title_chapters(dvdnav_t* self, uint32_t title, uint64_t** times, uint64_t* duration)=0;
virtual int64_t dvdnav_get_current_time(dvdnav_t* self) = 0;
@@ -187,6 +188,7 @@ class DllDvdNav : public DllDynamic, DllDvdNavInterface
DEFINE_METHOD4(dvdnav_status_t, dvdnav_mouse_select, (dvdnav_t *p1, pci_t *p2, int32_t p3, int32_t p4))
DEFINE_METHOD2(dvdnav_status_t, dvdnav_get_title_string, (dvdnav_t *p1, const char **p2))
DEFINE_METHOD2(dvdnav_status_t, dvdnav_get_serial_string, (dvdnav_t *p1, const char **p2))
+ DEFINE_METHOD1(const char*, dvdnav_get_volid_string, (dvdnav_t * p1))
DEFINE_METHOD4(uint32_t, dvdnav_describe_title_chapters, (dvdnav_t* p1, uint32_t p2, uint64_t** p3, uint64_t* p4))
DEFINE_METHOD1(int64_t, dvdnav_get_current_time, (dvdnav_t * p1))
DEFINE_METHOD3(int, dvdnav_get_video_resolution, (dvdnav_t * p1, uint32_t* p2, uint32_t* p3))
@@ -261,6 +263,7 @@ class DllDvdNav : public DllDynamic, DllDvdNavInterface
RESOLVE_METHOD(dvdnav_mouse_select)
RESOLVE_METHOD(dvdnav_get_title_string)
RESOLVE_METHOD(dvdnav_get_serial_string)
+ RESOLVE_METHOD(dvdnav_get_volid_string)
RESOLVE_METHOD(dvdnav_describe_title_chapters)
RESOLVE_METHOD(dvdnav_get_current_time)
RESOLVE_METHOD(dvdnav_get_video_resolution)
diff --git a/xbmc/utils/DiscsUtils.cpp b/xbmc/utils/DiscsUtils.cpp
index 395478c7ba..87d06a3326 100644
--- a/xbmc/utils/DiscsUtils.cpp
+++ b/xbmc/utils/DiscsUtils.cpp
@@ -42,6 +42,11 @@ UTILS::DISCS::DiscInfo UTILS::DISCS::ProbeDVDDiscInfo(const std::string& mediaPa
{
info.type = DiscType::DVD;
info.name = dvdNavigator.GetDVDTitleString();
+ // fallback to DVD volume id
+ if (info.name.empty())
+ {
+ info.name = dvdNavigator.GetDVDVolIdString();
+ }
info.serial = dvdNavigator.GetDVDSerialString();
}
return info;