[vlc-commits] demux:mkv: respect the hidden flag for chapters/editions

2018-03-21 Thread Steve Lhomme
vlc/vlc-3.0 | branch: master | Steve Lhomme  | Wed Mar 21 
13:17:55 2018 +0100| [f34355afc4cb36a6cd4e6d91b7155cc8c0e7ab44] | committer: 
Hugo Beauzée-Luyssen

demux:mkv: respect the hidden flag for chapters/editions

By default they should be displayed even if they don't have a fancy name.

Ref https://forum.videolan.org/viewtopic.php?p=470038

(cherry picked from commit f5ac0e57ff31560d212a1e7bed3f7f48feac1197)
Signed-off-by: Hugo Beauzée-Luyssen 

> http://git.videolan.org/gitweb.cgi/vlc/vlc-3.0.git/?a=commit;h=f34355afc4cb36a6cd4e6d91b7155cc8c0e7ab44
---

 modules/demux/mkv/chapters.hpp   |  3 +--
 modules/demux/mkv/matroska_segment_parse.cpp |  3 +--
 modules/demux/mkv/virtual_segment.cpp| 37 +---
 3 files changed, 19 insertions(+), 24 deletions(-)

diff --git a/modules/demux/mkv/chapters.hpp b/modules/demux/mkv/chapters.hpp
index d42ee637d2..a069b1fdea 100644
--- a/modules/demux/mkv/chapters.hpp
+++ b/modules/demux/mkv/chapters.hpp
@@ -56,7 +56,7 @@ public:
 ,p_segment_uid(NULL)
 ,p_segment_edition_uid(NULL)
 ,b_display_seekpoint(true)
-,b_user_display(false)
+,b_user_display(true)
 ,p_parent(NULL)
 ,b_is_leaving(false)
 {}
@@ -102,7 +102,6 @@ public:
 std::string GetMainName() const;
 boolb_ordered;
 boolb_default;
-/* TODO handle hidden chapters */
 boolb_hidden;
 };
 
diff --git a/modules/demux/mkv/matroska_segment_parse.cpp 
b/modules/demux/mkv/matroska_segment_parse.cpp
index 5589825f95..132e142ed6 100644
--- a/modules/demux/mkv/matroska_segment_parse.cpp
+++ b/modules/demux/mkv/matroska_segment_parse.cpp
@@ -1379,8 +1379,7 @@ void matroska_segment_c::ParseChapters( KaxChapters 
*chapters )
 }
 E_CASE( KaxEditionFlagHidden, flag_hidden )
 {
-VLC_UNUSED( flag_hidden ); // TODO: FIXME: implement
-VLC_UNUSED( vars );
+vars.p_edition->b_hidden = static_cast( flag_hidden 
) != 0;
 }
 E_CASE( EbmlVoid, el )
 {
diff --git a/modules/demux/mkv/virtual_segment.cpp 
b/modules/demux/mkv/virtual_segment.cpp
index e5673d896a..28110682cf 100644
--- a/modules/demux/mkv/virtual_segment.cpp
+++ b/modules/demux/mkv/virtual_segment.cpp
@@ -591,30 +591,27 @@ virtual_chapter_c * virtual_segment_c::FindChapter( 
int64_t i_find_uid )
 
 int virtual_chapter_c::PublishChapters( input_title_t & title, int & 
i_user_chapters, int i_level )
 {
-if ( p_chapter && ( !p_chapter->b_display_seekpoint || p_chapter->psz_name 
== "" ) )
-{
-p_chapter->psz_name = p_chapter->GetCodecName();
-if ( p_chapter->psz_name != "" )
-p_chapter->b_display_seekpoint = true;
-}
-
 if ( p_chapter && p_chapter->b_display_seekpoint )
 {
-if( p_chapter->b_user_display )
-{
-seekpoint_t *sk = vlc_seekpoint_New();
+std::string chap_name;
+if ( p_chapter->b_user_display )
+chap_name = p_chapter->psz_name;
+if (chap_name == "")
+chap_name = p_chapter->GetCodecName();
 
-sk->i_time_offset = i_mk_virtual_start_time;
-sk->psz_name = strdup( p_chapter->psz_name.c_str() );
+seekpoint_t *sk = vlc_seekpoint_New();
 
-/* A start time of '0' is ok. A missing ChapterTime element is ok, 
too, because '0' is its default value. */
-title.i_seekpoint++;
-title.seekpoint = (seekpoint_t**)xrealloc( title.seekpoint,
-  title.i_seekpoint * sizeof( seekpoint_t* ) );
-title.seekpoint[title.i_seekpoint-1] = sk;
+sk->i_time_offset = i_mk_virtual_start_time;
+if (chap_name != "")
+sk->psz_name = strdup( chap_name.c_str() );
 
-i_user_chapters++;
-}
+/* A start time of '0' is ok. A missing ChapterTime element is ok, 
too, because '0' is its default value. */
+title.i_seekpoint++;
+title.seekpoint = (seekpoint_t**)xrealloc( title.seekpoint,
+  title.i_seekpoint * sizeof( seekpoint_t* ) );
+title.seekpoint[title.i_seekpoint-1] = sk;
+
+i_user_chapters++;
 }
 i_seekpoint_num = i_user_chapters;
 
@@ -630,7 +627,7 @@ int virtual_edition_c::PublishChapters( input_title_t & 
title, int & i_user_chap
 
 /* HACK for now don't expose edition as a seekpoint if its start time is 
the same than it's first chapter */
 if( vchapters.size() > 0 &&
-vchapters[0]->i_mk_virtual_start_time && p_edition )
+vchapters[0]->i_mk_virtual_start_time && p_edition && 
!p_edition->b_hidden )
 {
 seekpoint_t *sk = vlc_seekpoint_New();
 sk->i_time_offset = 0;

___
vlc-commits mailing list
vlc-commits@videolan.org

[vlc-commits] demux:mkv: respect the hidden flag for chapters/editions

2018-03-21 Thread Steve Lhomme
vlc | branch: master | Steve Lhomme  | Wed Mar 21 13:17:55 
2018 +0100| [f5ac0e57ff31560d212a1e7bed3f7f48feac1197] | committer: Steve Lhomme

demux:mkv: respect the hidden flag for chapters/editions

By default they should be displayed even if they don't have a fancy name.

Ref https://forum.videolan.org/viewtopic.php?p=470038

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=f5ac0e57ff31560d212a1e7bed3f7f48feac1197
---

 modules/demux/mkv/chapters.hpp   |  3 +--
 modules/demux/mkv/matroska_segment_parse.cpp |  3 +--
 modules/demux/mkv/virtual_segment.cpp| 37 +---
 3 files changed, 19 insertions(+), 24 deletions(-)

diff --git a/modules/demux/mkv/chapters.hpp b/modules/demux/mkv/chapters.hpp
index d42ee637d2..a069b1fdea 100644
--- a/modules/demux/mkv/chapters.hpp
+++ b/modules/demux/mkv/chapters.hpp
@@ -56,7 +56,7 @@ public:
 ,p_segment_uid(NULL)
 ,p_segment_edition_uid(NULL)
 ,b_display_seekpoint(true)
-,b_user_display(false)
+,b_user_display(true)
 ,p_parent(NULL)
 ,b_is_leaving(false)
 {}
@@ -102,7 +102,6 @@ public:
 std::string GetMainName() const;
 boolb_ordered;
 boolb_default;
-/* TODO handle hidden chapters */
 boolb_hidden;
 };
 
diff --git a/modules/demux/mkv/matroska_segment_parse.cpp 
b/modules/demux/mkv/matroska_segment_parse.cpp
index 6933c08cf3..f3cf2c2c7d 100644
--- a/modules/demux/mkv/matroska_segment_parse.cpp
+++ b/modules/demux/mkv/matroska_segment_parse.cpp
@@ -1377,8 +1377,7 @@ void matroska_segment_c::ParseChapters( KaxChapters 
*chapters )
 }
 E_CASE( KaxEditionFlagHidden, flag_hidden )
 {
-VLC_UNUSED( flag_hidden ); // TODO: FIXME: implement
-VLC_UNUSED( vars );
+vars.p_edition->b_hidden = static_cast( flag_hidden 
) != 0;
 }
 E_CASE( EbmlVoid, el )
 {
diff --git a/modules/demux/mkv/virtual_segment.cpp 
b/modules/demux/mkv/virtual_segment.cpp
index d99e6ca646..d7fa902503 100644
--- a/modules/demux/mkv/virtual_segment.cpp
+++ b/modules/demux/mkv/virtual_segment.cpp
@@ -585,30 +585,27 @@ virtual_chapter_c * virtual_segment_c::FindChapter( 
int64_t i_find_uid )
 
 int virtual_chapter_c::PublishChapters( input_title_t & title, int & 
i_user_chapters, int i_level )
 {
-if ( p_chapter && ( !p_chapter->b_display_seekpoint || p_chapter->psz_name 
== "" ) )
-{
-p_chapter->psz_name = p_chapter->GetCodecName();
-if ( p_chapter->psz_name != "" )
-p_chapter->b_display_seekpoint = true;
-}
-
 if ( p_chapter && p_chapter->b_display_seekpoint )
 {
-if( p_chapter->b_user_display )
-{
-seekpoint_t *sk = vlc_seekpoint_New();
+std::string chap_name;
+if ( p_chapter->b_user_display )
+chap_name = p_chapter->psz_name;
+if (chap_name == "")
+chap_name = p_chapter->GetCodecName();
 
-sk->i_time_offset = i_mk_virtual_start_time;
-sk->psz_name = strdup( p_chapter->psz_name.c_str() );
+seekpoint_t *sk = vlc_seekpoint_New();
 
-/* A start time of '0' is ok. A missing ChapterTime element is ok, 
too, because '0' is its default value. */
-title.i_seekpoint++;
-title.seekpoint = (seekpoint_t**)xrealloc( title.seekpoint,
-  title.i_seekpoint * sizeof( seekpoint_t* ) );
-title.seekpoint[title.i_seekpoint-1] = sk;
+sk->i_time_offset = i_mk_virtual_start_time;
+if (chap_name != "")
+sk->psz_name = strdup( chap_name.c_str() );
 
-i_user_chapters++;
-}
+/* A start time of '0' is ok. A missing ChapterTime element is ok, 
too, because '0' is its default value. */
+title.i_seekpoint++;
+title.seekpoint = (seekpoint_t**)xrealloc( title.seekpoint,
+  title.i_seekpoint * sizeof( seekpoint_t* ) );
+title.seekpoint[title.i_seekpoint-1] = sk;
+
+i_user_chapters++;
 }
 i_seekpoint_num = i_user_chapters;
 
@@ -624,7 +621,7 @@ int virtual_edition_c::PublishChapters( input_title_t & 
title, int & i_user_chap
 
 /* HACK for now don't expose edition as a seekpoint if its start time is 
the same than it's first chapter */
 if( vchapters.size() > 0 &&
-vchapters[0]->i_mk_virtual_start_time && p_edition )
+vchapters[0]->i_mk_virtual_start_time && p_edition && 
!p_edition->b_hidden )
 {
 seekpoint_t *sk = vlc_seekpoint_New();
 sk->i_time_offset = 0;

___
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits