Commit c72c4815 authored by Derk-Jan Hartman's avatar Derk-Jan Hartman

* Set the SPS and PPS properly in the extradata when we receive RTP h264

parent c10879d5
...@@ -515,7 +515,7 @@ static int Open ( vlc_object_t *p_this ) ...@@ -515,7 +515,7 @@ static int Open ( vlc_object_t *p_this )
unsigned int i_extra = 0; unsigned int i_extra = 0;
uint8_t *p_extra = NULL; uint8_t *p_extra = NULL;
#endif #endif
tk->fmt.i_codec = VLC_FOURCC( 'H', '2', '6', '4' ); tk->fmt.i_codec = VLC_FOURCC( 'h', '2', '6', '4' );
tk->fmt.b_packetized = VLC_FALSE; tk->fmt.b_packetized = VLC_FALSE;
/* XXX not the right minimal version I fear */ /* XXX not the right minimal version I fear */
...@@ -1395,7 +1395,7 @@ static void StreamRead( void *p_private, unsigned int i_size, ...@@ -1395,7 +1395,7 @@ static void StreamRead( void *p_private, unsigned int i_size,
if( tk->rtpSource->curPacketMarkerBit() ) if( tk->rtpSource->curPacketMarkerBit() )
p_block->i_flags |= BLOCK_FLAG_END_OF_FRAME; p_block->i_flags |= BLOCK_FLAG_END_OF_FRAME;
} }
else if( tk->fmt.i_codec == VLC_FOURCC('H','2','6','4') ) else if( tk->fmt.i_codec == VLC_FOURCC('h','2','6','4') )
{ {
if( (tk->p_buffer[0] & 0x1f) >= 24 ) if( (tk->p_buffer[0] & 0x1f) >= 24 )
msg_Warn( p_demux, "unsupported NAL type for H264" ); msg_Warn( p_demux, "unsupported NAL type for H264" );
...@@ -1565,6 +1565,7 @@ static unsigned char* parseH264ConfigStr( char const* configStr, ...@@ -1565,6 +1565,7 @@ static unsigned char* parseH264ConfigStr( char const* configStr,
unsigned int& configSize ) unsigned int& configSize )
{ {
char *dup, *psz; char *dup, *psz;
int i, i_records = 1;
if( configSize ) if( configSize )
configSize = 0; configSize = 0;
...@@ -1574,22 +1575,27 @@ static unsigned char* parseH264ConfigStr( char const* configStr, ...@@ -1574,22 +1575,27 @@ static unsigned char* parseH264ConfigStr( char const* configStr,
psz = dup = strdup( configStr ); psz = dup = strdup( configStr );
unsigned char *cfg = new unsigned char[5 * strlen(psz)]; /* Count the number of comma's */
for( ;; ) for( psz = dup; *psz != '\0'; ++psz )
{ {
char *p = strchr( psz, ',' ); if( *psz == ',')
if( p ) {
*p++ = '\0'; ++i_records;
*psz = '\0';
}
}
unsigned char *cfg = new unsigned char[5 * strlen(dup)];
psz = dup;
for( i = 0; i < i_records; i++ )
{
cfg[configSize++] = 0x00; cfg[configSize++] = 0x00;
cfg[configSize++] = 0x00; cfg[configSize++] = 0x00;
cfg[configSize++] = 0x00; cfg[configSize++] = 0x00;
cfg[configSize++] = 0x01; cfg[configSize++] = 0x01;
configSize += b64_decode( (char*)&cfg[configSize], psz );
if( p == NULL ) configSize += b64_decode( (char*)&cfg[configSize], psz );
break; psz += strlen(psz)+1;
psz = p;
} }
if( dup ) free( dup ); if( dup ) free( dup );
......
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