[vlc-devel] [PATCH 03/34] mkv: cleaned up dvd_chapter_codec_c::{Enter, Leave}
Filip Roséen
filip at videolabs.io
Fri May 6 19:08:42 CEST 2016
These two functions did effectively the same thing, with the only
difference being the debug-dagnostic and the container modified.
This patch simply joins the two together by introducing a helper
function that will conditionally handle both Enter and Leave in terms of
the commands.
---
modules/demux/mkv/chapter_command.cpp | 44 ++++++++++++-----------------------
modules/demux/mkv/chapter_command.hpp | 4 ++++
2 files changed, 19 insertions(+), 29 deletions(-)
diff --git a/modules/demux/mkv/chapter_command.cpp b/modules/demux/mkv/chapter_command.cpp
index 95bc295..adcce3e 100644
--- a/modules/demux/mkv/chapter_command.cpp
+++ b/modules/demux/mkv/chapter_command.cpp
@@ -68,50 +68,36 @@ int16 dvd_chapter_codec_c::GetTitleNumber()
bool dvd_chapter_codec_c::Enter()
{
- bool f_result = false;
- std::vector<KaxChapterProcessData*>::iterator index = enter_cmds.begin();
- while ( index != enter_cmds.end() )
- {
- if ( (*index)->GetSize() )
- {
- binary *p_data = (*index)->GetBuffer();
- size_t i_size = *p_data++;
- // avoid reading too much from the buffer
- i_size = __MIN( i_size, ((*index)->GetSize() - 1) >> 3 );
- for ( ; i_size > 0; i_size--, p_data += 8 )
- {
- msg_Dbg( &sys.demuxer, "Matroska DVD enter command" );
- f_result |= sys.dvd_interpretor.Interpret( p_data );
- }
- }
- ++index;
- }
- return f_result;
+ return EnterLeaveHelper( "Matroska DVD enter command", &enter_cmds );
}
bool dvd_chapter_codec_c::Leave()
{
+ return EnterLeaveHelper( "Matroska DVD leave command", &leave_cmds );
+}
+
+bool dvd_chapter_codec_c::EnterLeaveHelper( char const * str_diag, std::vector<KaxChapterProcessData*> * p_container )
+{
bool f_result = false;
- std::vector<KaxChapterProcessData*>::iterator index = leave_cmds.begin();
- while ( index != leave_cmds.end() )
+ std::vector<KaxChapterProcessData*>::iterator it = p_container->begin ();
+ while( it != p_container->end() )
{
- if ( (*index)->GetSize() )
+ if( (*it)->GetSize() )
{
- binary *p_data = (*index)->GetBuffer();
- size_t i_size = *p_data++;
- // avoid reading too much from the buffer
- i_size = __MIN( i_size, ((*index)->GetSize() - 1) >> 3 );
- for ( ; i_size > 0; i_size--, p_data += 8 )
+ binary *p_data = (*it)->GetBuffer();
+ size_t i_size = std::min<size_t>( *p_data++, ( (*it)->GetSize() - 1 ) >> 3 ); // avoid reading too much
+ for( ; i_size > 0; i_size -=1, p_data += 8 )
{
- msg_Dbg( &sys.demuxer, "Matroska DVD leave command" );
+ msg_Dbg( &sys.demuxer, "%s", str_diag);
f_result |= sys.dvd_interpretor.Interpret( p_data );
}
}
- ++index;
+ ++it;
}
return f_result;
}
+
std::string dvd_chapter_codec_c::GetCodecName( bool f_for_title ) const
{
std::string result;
diff --git a/modules/demux/mkv/chapter_command.hpp b/modules/demux/mkv/chapter_command.hpp
index bce3835..f206e35 100644
--- a/modules/demux/mkv/chapter_command.hpp
+++ b/modules/demux/mkv/chapter_command.hpp
@@ -256,8 +256,12 @@ public:
bool Enter();
bool Leave();
+
std::string GetCodecName( bool f_for_title = false ) const;
int16 GetTitleNumber();
+
+protected:
+ bool EnterLeaveHelper( char const*, std::vector<KaxChapterProcessData*>* );
};
class matroska_script_interpretor_c
--
2.8.2
More information about the vlc-devel
mailing list