Commit 121f3c3e authored by Rafaël Carré's avatar Rafaël Carré

mp4 demuxer: don't try to print not printable characters.

parent 67079185
...@@ -110,6 +110,13 @@ ...@@ -110,6 +110,13 @@
*/ */
/* This macro is used when we want to printf the box type
* APPLE annotation box is :
* either 0xA9 + 24-bit ASCII text string (and 0xA9 isn't printable)
* either 32-bit ASCII text string
*/
#define MP4_BOX_TYPE_ASCII() ( ((char*)&p_box->i_type)[0] != (char)0xA9 )
static uint32_t Get24bBE( const uint8_t *p ) static uint32_t Get24bBE( const uint8_t *p )
{ {
return( ( p[0] <<16 ) + ( p[1] <<8 ) + p[2] ); return( ( p[0] <<16 ) + ( p[1] <<8 ) + p[2] );
...@@ -206,8 +213,12 @@ int MP4_ReadBoxCommon( stream_t *p_stream, MP4_Box_t *p_box ) ...@@ -206,8 +213,12 @@ int MP4_ReadBoxCommon( stream_t *p_stream, MP4_Box_t *p_box )
#ifdef MP4_VERBOSE #ifdef MP4_VERBOSE
if( p_box->i_size ) if( p_box->i_size )
{ {
msg_Dbg( p_stream, "found Box: %4.4s size "I64Fd, if MP4_BOX_TYPE_ASCII()
(char*)&p_box->i_type, p_box->i_size ); msg_Dbg( p_stream, "found Box: %4.4s size "I64Fd,
(char*)&p_box->i_type, p_box->i_size );
else
msg_Dbg( p_stream, "found Box: c%3.3s size "I64Fd,
(char*)&p_box->i_type+1, p_box->i_size );
} }
#endif #endif
...@@ -338,7 +349,10 @@ static int MP4_ReadBoxSkip( stream_t *p_stream, MP4_Box_t *p_box ) ...@@ -338,7 +349,10 @@ static int MP4_ReadBoxSkip( stream_t *p_stream, MP4_Box_t *p_box )
/* Nothing to do */ /* Nothing to do */
#ifdef MP4_VERBOSE #ifdef MP4_VERBOSE
msg_Dbg( p_stream, "skip box: \"%4.4s\"", (char*)&p_box->i_type ); if MP4_BOX_TYPE_ASCII()
msg_Dbg( p_stream, "skip box: \"%4.4s\"", (char*)&p_box->i_type );
else
msg_Dbg( p_stream, "skip box: \"c%3.3s\"", (char*)&p_box->i_type+1 );
#endif #endif
return 1; return 1;
} }
...@@ -604,9 +618,9 @@ static int MP4_ReadBox_hdlr( stream_t *p_stream, MP4_Box_t *p_box ) ...@@ -604,9 +618,9 @@ static int MP4_ReadBox_hdlr( stream_t *p_stream, MP4_Box_t *p_box )
} }
#ifdef MP4_VERBOSE #ifdef MP4_VERBOSE
msg_Dbg( p_stream, "read box: \"hdlr\" handler type %4.4s name %s", msg_Dbg( p_stream, "read box: \"hdlr\" handler type %4.4s name %s",
(char*)&p_box->data.p_hdlr->i_handler_type, (char*)&p_box->data.p_hdlr->i_handler_type,
p_box->data.p_hdlr->psz_name ); p_box->data.p_hdlr->psz_name );
#endif #endif
MP4_READBOX_EXIT( 1 ); MP4_READBOX_EXIT( 1 );
...@@ -1960,10 +1974,9 @@ static int MP4_ReadBox_rdrf( stream_t *p_stream, MP4_Box_t *p_box ) ...@@ -1960,10 +1974,9 @@ static int MP4_ReadBox_rdrf( stream_t *p_stream, MP4_Box_t *p_box )
#ifdef MP4_VERBOSE #ifdef MP4_VERBOSE
msg_Dbg( p_stream, msg_Dbg( p_stream,
"read box: \"rdrf\" type:%4.4s ref %s", "read box: \"rdrf\" type:%4.4s ref %s",
(char*)&p_box->data.p_rdrf->i_ref_type, (char*)&p_box->data.p_rdrf->i_ref_type,
p_box->data.p_rdrf->psz_ref ); p_box->data.p_rdrf->psz_ref );
#endif #endif
MP4_READBOX_EXIT( 1 ); MP4_READBOX_EXIT( 1 );
} }
...@@ -2063,9 +2076,12 @@ static int MP4_ReadBox_drms( stream_t *p_stream, MP4_Box_t *p_box ) ...@@ -2063,9 +2076,12 @@ static int MP4_ReadBox_drms( stream_t *p_stream, MP4_Box_t *p_box )
case -7: psz_error = "you live in France"; break; case -7: psz_error = "you live in France"; break;
default: psz_error = "unknown error"; break; default: psz_error = "unknown error"; break;
} }
if MP4_BOX_TYPE_ASCII()
msg_Err( p_stream, "drms_init(%4.4s) failed (%s)", msg_Err( p_stream, "drms_init(%4.4s) failed (%s)",
(char *)&p_box->i_type, psz_error ); (char *)&p_box->i_type, psz_error );
else
msg_Err( p_stream, "drms_init(c%3.3s) failed (%s)",
(char *)&p_box->i_type+1, psz_error );
drms_free( p_drms_box->data.p_sample_soun->p_drms ); drms_free( p_drms_box->data.p_sample_soun->p_drms );
p_drms_box->data.p_sample_soun->p_drms = NULL; p_drms_box->data.p_sample_soun->p_drms = NULL;
...@@ -2302,9 +2318,14 @@ static int MP4_ReadBox_default( stream_t *p_stream, MP4_Box_t *p_box ) ...@@ -2302,9 +2318,14 @@ static int MP4_ReadBox_default( stream_t *p_stream, MP4_Box_t *p_box )
} }
unknown: unknown:
msg_Warn( p_stream, if MP4_BOX_TYPE_ASCII()
"unknown box type %4.4s (uncompletetly loaded)", msg_Warn( p_stream,
(char*)&p_box->i_type ); "unknown box type %4.4s (uncompletetly loaded)",
(char*)&p_box->i_type );
else
msg_Warn( p_stream,
"unknown box type c%3.3s (uncompletetly loaded)",
(char*)&p_box->i_type+1 );
return 1; return 1;
} }
...@@ -2586,9 +2607,14 @@ void MP4_BoxFree( stream_t *s, MP4_Box_t *p_box ) ...@@ -2586,9 +2607,14 @@ void MP4_BoxFree( stream_t *s, MP4_Box_t *p_box )
if( MP4_Box_Function[i_index].MP4_FreeBox_function == NULL ) if( MP4_Box_Function[i_index].MP4_FreeBox_function == NULL )
{ {
/* Should not happen */ /* Should not happen */
msg_Warn( s, if MP4_BOX_TYPE_ASCII()
"cannot free box %4.4s, type unknown", msg_Warn( s,
(char*)&p_box->i_type ); "cannot free box %4.4s, type unknown",
(char*)&p_box->i_type );
else
msg_Warn( s,
"cannot free box c%3.3s, type unknown",
(char*)&p_box->i_type+1 );
} }
else else
{ {
...@@ -2670,8 +2696,12 @@ static void __MP4_BoxDumpStructure( stream_t *s, ...@@ -2670,8 +2696,12 @@ static void __MP4_BoxDumpStructure( stream_t *s,
if( !i_level ) if( !i_level )
{ {
msg_Dbg( s, "dumping root Box \"%4.4s\"", if MP4_BOX_TYPE_ASCII()
(char*)&p_box->i_type ); msg_Dbg( s, "dumping root Box \"%4.4s\"",
(char*)&p_box->i_type );
else
msg_Dbg( s, "dumping root Box \"c%3.3s\"",
(char*)&p_box->i_type+1 );
} }
else else
{ {
...@@ -2682,10 +2712,12 @@ static void __MP4_BoxDumpStructure( stream_t *s, ...@@ -2682,10 +2712,12 @@ static void __MP4_BoxDumpStructure( stream_t *s,
{ {
str[i*5] = '|'; str[i*5] = '|';
} }
sprintf( str + i_level * 5, "+ %4.4s size %d", if MP4_BOX_TYPE_ASCII()
(char*)&p_box->i_type, sprintf( str + i_level * 5, "+ %4.4s size %d",
(uint32_t)p_box->i_size ); (char*)&p_box->i_type, (uint32_t)p_box->i_size );
else
sprintf( str + i_level * 5, "+ c%3.3s size %d",
(char*)&p_box->i_type+1, (uint32_t)p_box->i_size );
msg_Dbg( s, "%s", str ); msg_Dbg( s, "%s", str );
} }
p_child = p_box->p_first; p_child = p_box->p_first;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment