diff options
author | enen92 <92enen@gmail.com> | 2022-06-29 16:58:25 +0100 |
---|---|---|
committer | enen92 <92enen@gmail.com> | 2022-06-29 21:23:52 +0100 |
commit | 4c49f228fd55e38db41b0aacd63e66eb1cb867ec (patch) | |
tree | a9ec49521528a8b35e8ea5b83dc578aff0d0da3d | |
parent | 2e539f6fd3b781b0274e7dd38573cc05182bc675 (diff) |
[dvdnav] Add GetDVDVolIdString as fallback to GetDVDVolIdString
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; |