@ -75,7 +75,7 @@ static int h264_mp4toannexb_filter(AVBitStreamFilterContext *bsfc,
if ( ! ctx - > extradata_parsed ) {
if ( ! ctx - > extradata_parsed ) {
uint16_t unit_size ;
uint16_t unit_size ;
uint64_t total_size = 0 ;
uint64_t total_size = 0 ;
uint8_t * out = NULL , unit_nb , sps_done = 0 ;
uint8_t * out = NULL , unit_nb , sps_done = 0 , sps_seen = 0 , pps_seen = 0 ;
const uint8_t * extradata = avctx - > extradata + 4 ;
const uint8_t * extradata = avctx - > extradata + 4 ;
static const uint8_t nalu_header [ 4 ] = { 0 , 0 , 0 , 1 } ;
static const uint8_t nalu_header [ 4 ] = { 0 , 0 , 0 , 1 } ;
@ -89,7 +89,15 @@ static int h264_mp4toannexb_filter(AVBitStreamFilterContext *bsfc,
if ( ! unit_nb ) {
if ( ! unit_nb ) {
unit_nb = * extradata + + ; /* number of pps unit(s) */
unit_nb = * extradata + + ; /* number of pps unit(s) */
sps_done + + ;
sps_done + + ;
if ( unit_nb )
pps_seen = 1 ;
}
else
{
sps_seen = 1 ;
}
}
while ( unit_nb - - ) {
while ( unit_nb - - ) {
void * tmp ;
void * tmp ;
@ -114,7 +122,14 @@ static int h264_mp4toannexb_filter(AVBitStreamFilterContext *bsfc,
unit_nb = * extradata + + ; /* number of pps unit(s) */
unit_nb = * extradata + + ; /* number of pps unit(s) */
}
}
memset ( out + total_size , 0 , FF_INPUT_BUFFER_PADDING_SIZE ) ;
if ( out )
memset ( out + total_size , 0 , FF_INPUT_BUFFER_PADDING_SIZE ) ;
if ( ! sps_seen )
av_log ( avctx , AV_LOG_WARNING , " Warning: SPS NALU missing or invalid. The resulting stream may not play. \n " ) ;
if ( ! pps_seen )
av_log ( avctx , AV_LOG_WARNING , " Warning: PPS NALU missing or invalid. The resulting stream may not play. \n " ) ;
av_free ( avctx - > extradata ) ;
av_free ( avctx - > extradata ) ;
avctx - > extradata = out ;
avctx - > extradata = out ;
avctx - > extradata_size = total_size ;
avctx - > extradata_size = total_size ;