<p>It will make more sense when the upcoming patches are submitted to <code>vlc-devel</code>, I haven’t gotten around to isolate the changes where the function will be used yet.</p>
<p>Especially MkvTree_va will make a lot of sense quite soon, things will be hella clean! <code>;-)</code></p>
<hr style="height:1px;margin-bottom:20px;background-color:#ddd;color:#ddd" />
<p>On 16/03/02 20:12, Denis Charmet wrote:</p>
<blockquote style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<p>On 2016-03-02 18:04, Filip Roséen wrote:</p>
<blockquote style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<p><code>MkvTree</code> can be used all across the module, meaning that it better belongs in <code>Util.hpp</code> than with static linkage in <code>matroska_segment_parse.cpp</code>.</p>
</blockquote>
<p>I fail to see the point of that since its only purpose is to debug the parsing of elements… but the rest is nice.</p>
<blockquote style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<ul>
<li><p>A helper function <code>MkvTree_va</code> has been introduced so that one can easily call the function from functions that accepts a variadic number of arguments (using va_list).</p></li>
<li><p>The implementation has been optimized so that we do not need to allocate storage for the format string on every invocation if it would fit inside a fixed length buffer.</p></li>
<li><h3 id="an-error-check-has-been-added-to-signal-if-we-run-out-of-memory.">An error check has been added to signal if we run out of memory.</h3>
<p>modules/demux/mkv/matroska_segment_parse.cpp | 25 —————– modules/demux/mkv/mkv.cpp | 1 - modules/demux/mkv/util.cpp | 42 ++++++++++++++++++++++++++++ modules/demux/mkv/util.hpp | 4 +++ 4 files changed, 46 insertions(+), 26 deletions(-)</p></li>
</ul>
<p>diff –git a/modules/demux/mkv/matroska_segment_parse.cpp b/modules/demux/mkv/matroska_segment_parse.cpp index be1d967..bb590b5 100644 — a/modules/demux/mkv/matroska_segment_parse.cpp +++ b/modules/demux/mkv/matroska_segment_parse.cpp @@ -187,31 +187,6 @@ void matroska_segment_c::ParseSeekHead( KaxSeekHead *seekhead ) } }</p>
<ul>
<li>-/**</li>
<li><ul>
<li>Helper function to print the mkv parse tree</li>
</ul></li>
<li><em>/ -static void MkvTree( demux_t & demuxer, int i_level, const char </em>psz_format, … ) -{</li>
<li>va_list args;</li>
<li>if( i_level > 9 )</li>
<li>{</li>
<li><pre><code> msg_Err( &demuxer, "MKV tree is too deep" );</code></pre></li>
<li><pre><code> return;</code></pre></li>
<li>}</li>
<li>va_start( args, psz_format );</li>
<li>static const char psz_foo[] = “| | | | | | | | | |”;</li>
<li>char <em>psz_foo2 = (char</em>)malloc( i_level * 4 + 3 + strlen( psz_format ) );</li>
<li>strncpy( psz_foo2, psz_foo, 4 * i_level );</li>
<li>psz_foo2[ 4 * i_level ] = ‘+’;</li>
<li>psz_foo2[ 4 * i_level + 1 ] = ‘’;</li>
<li>strcpy( &psz_foo2[ 4 * i_level + 2 ], psz_format );</li>
<li>msg_GenericVa( &demuxer,VLC_MSG_DBG, psz_foo2, args );</li>
<li>free( psz_foo2 );</li>
<li>va_end( args ); -}</li>
<li></li>
<li>/*****************************************************************************</li>
<li><p>ParseTrackEntry: *****************************************************************************/ diff –git a/modules/demux/mkv/mkv.cpp b/modules/demux/mkv/mkv.cpp index bb55ad7..0459176 100644 — a/modules/demux/mkv/mkv.cpp +++ b/modules/demux/mkv/mkv.cpp @@ -794,4 +794,3 @@ static int Demux( demux_t *p_demux)</p>
return i_return; }</li>
<li><p>diff –git a/modules/demux/mkv/util.cpp b/modules/demux/mkv/util.cpp index acb2d29..96ba128 100644 — a/modules/demux/mkv/util.cpp +++ b/modules/demux/mkv/util.cpp @@ -415,3 +415,45 @@ block_t * packetize_wavpack( mkv_track_t * p_tk, uint8_t * buffer, size_t size)</p>
return p_block; }</li>
<li>+void MkvTree_va( demux_t& demuxer, int i_level, const char* fmt, va_list args) +{</li>
<li>static char const * indent = “|”;</li>
<li>static char const * prefix = “+”;</li>
<li>static int const indent_len = strlen( indent );</li>
<li>static int const prefix_len = strlen( prefix );</li>
<li></li>
<li>char fixed_buffer[256] = {};</li>
<li>size_t const static_len = sizeof( fixed_buffer );</li>
<li>char * buffer = fixed_buffer;</li>
<li>size_t total_len = indent_len * i_level + prefix_len + strlen( fmt );</li>
<li></li>
<li>if( total_len >= static_len ) {</li>
<li><pre><code> buffer = new (std::nothrow) char[total_len] ();</code></pre></li>
<li></li>
<li><pre><code> if (buffer == NULL) {</code></pre></li>
<li><pre><code>     msg_Err (&demuxer, "Unable to allocate memory for format string");</code></pre></li>
<li><pre><code>     return;</code></pre></li>
<li><pre><code> }</code></pre></li>
<li>}</li>
<li></li>
<li>char * dst = buffer;</li>
<li></li>
<li>for (int i = 0; i < i_level; ++i, dst += indent_len)</li>
<li><pre><code> memcpy( dst, indent, indent_len );</code></pre></li>
<li></li>
<li>strcat( dst, prefix );</li>
<li>strcat( dst, fmt );</li>
<li></li>
<li>msg_GenericVa( &demuxer, VLC_MSG_DBG, buffer, args );</li>
<li></li>
<li>if (buffer != fixed_buffer)</li>
<li><pre><code> delete [] buffer;</code></pre>
+}</li>
<li>+void MkvTree( demux_t & demuxer, int i_level, const char *psz_format, … ) +{</li>
<li>va_list args; va_start( args, psz_format );</li>
<li>MkvTree_va( demuxer, i_level, psz_format, args );</li>
<li><p>va_end( args ); +} diff –git a/modules/demux/mkv/util.hpp b/modules/demux/mkv/util.hpp index 8c6cc6a..5867d1d 100644 — a/modules/demux/mkv/util.hpp +++ b/modules/demux/mkv/util.hpp @@ -90,3 +90,7 @@ public: };</p></li>
</ul>
<p>block_t * packetize_wavpack( mkv_track_t <em>, uint8_t </em>, size_t); + +/* helper functions to print the mkv parse tree <em>/ +void MkvTree_va( demux_t& demuxer, int i_level, const char</em> fmt, va_list args); +void MkvTree( demux_t & demuxer, int i_level, const char *psz_format, … );</p>
</blockquote>
<h3 id="regards">Regards,</h3>
<p>Denis Charmet - TypX Le mauvais esprit est un art de vivre _______________________________________________ vlc-devel mailing list To unsubscribe or modify your subscription options: https://mailman.videolan.org/listinfo/vlc-devel</p>
</blockquote>