From 8e6959cc18bb207bebed3fb151cddad900f3d826 Mon Sep 17 00:00:00 2001 From: Pierre Ynard Date: Mon, 14 Jun 2010 23:35:00 +0200 Subject: [PATCH] vod: fix h264 sprop-parameter-sets generation Port dedd7cd2ae0864dedfad367c1cbf916e1d315a00 to duplicated code --- modules/misc/rtsp.c | 42 +++++++++++++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 9 deletions(-) diff --git a/modules/misc/rtsp.c b/modules/misc/rtsp.c index 91e6a2b4b4..9de54e5964 100644 --- a/modules/misc/rtsp.c +++ b/modules/misc/rtsp.c @@ -570,34 +570,58 @@ static int MediaAddES( vod_t *p_vod, vod_media_t *p_media, es_format_t *p_fmt ) char *p_64_pps = NULL; char hexa[6+1]; - while( i_buffer > 4 && - p_buffer[0] == 0 && p_buffer[1] == 0 && - p_buffer[2] == 0 && p_buffer[3] == 1 ) + while( i_buffer > 4 ) { - const int i_nal_type = p_buffer[4]&0x1f; - int i_offset; + int i_offset = 0; int i_size = 0; + while( p_buffer[0] != 0 || p_buffer[1] != 0 || + p_buffer[2] != 1 ) + { + p_buffer++; + i_buffer--; + if( i_buffer == 0 ) break; + } + + if( i_buffer < 4 || memcmp(p_buffer, "\x00\x00\x01", 3 ) ) + { + /* No startcode found.. */ + break; + } + p_buffer += 3; + i_buffer -= 3; + + const int i_nal_type = p_buffer[0]&0x1f; + i_size = i_buffer; - for( i_offset = 4; i_offset+3 < i_buffer ; i_offset++) + for( i_offset = 0; i_offset+2 < i_buffer ; i_offset++) { - if( !memcmp (p_buffer + i_offset, "\x00\x00\x00\x01", 4 ) ) + if( !memcmp(p_buffer + i_offset, "\x00\x00\x01", 3 ) ) { /* we found another startcode */ + while( i_offset > 0 && 0 == p_buffer[ i_offset - 1 ] ) + i_offset--; i_size = i_offset; break; } } + + if( i_size == 0 ) + { + /* No-info found in nal */ + continue; + } + if( i_nal_type == 7 ) { free( p_64_sps ); - p_64_sps = vlc_b64_encode_binary( &p_buffer[4], i_size - 4 ); + p_64_sps = vlc_b64_encode_binary( p_buffer, i_size ); sprintf_hexa( hexa, &p_buffer[5], 3 ); } else if( i_nal_type == 8 ) { free( p_64_pps ); - p_64_pps = vlc_b64_encode_binary( &p_buffer[4], i_size - 4 ); + p_64_pps = vlc_b64_encode_binary( p_buffer, i_size ); } i_buffer -= i_size; p_buffer += i_size; -- 2.39.2