@ -45,7 +45,7 @@ static void send_packet(AVFormatContext *ctx, uint8_t parse_code, int info_hdr_s
ff_rtp_send_data ( ctx , rtp_ctx - > buf , RTP_VC2HQ_PL_HEADER_SIZE + info_hdr_size + size , rtp_m ) ;
}
static void send_picture ( AVFormatContext * ctx , const uint8_t * buf , int size , int interlaced )
static int send_picture ( AVFormatContext * ctx , const uint8_t * buf , int size , int interlaced )
{
RTPMuxContext * rtp_ctx = ctx - > priv_data ;
GetBitContext gc ;
@ -54,6 +54,9 @@ static void send_picture(AVFormatContext *ctx, const uint8_t *buf, int size, int
uint16_t frag_len ;
char * info_hdr = & rtp_ctx - > buf [ 4 ] ;
if ( size < DIRAC_PIC_NR_SIZE )
return AVERROR ( EINVAL ) ;
pic_nr = AV_RB32 ( & buf [ 0 ] ) ;
buf + = DIRAC_PIC_NR_SIZE ;
size - = DIRAC_PIC_NR_SIZE ;
@ -97,6 +100,7 @@ static void send_picture(AVFormatContext *ctx, const uint8_t *buf, int size, int
send_packet ( ctx , DIRAC_RTP_PCODE_HQ_PIC_FRAGMENT , 16 , buf , frag_len , interlaced , second_field , size > 0 ? 0 : 1 ) ;
buf + = frag_len ;
}
return 0 ;
}
void ff_rtp_send_vc2hq ( AVFormatContext * ctx , const uint8_t * frame_buf , int frame_size , int interlaced )
@ -110,16 +114,21 @@ void ff_rtp_send_vc2hq(AVFormatContext *ctx, const uint8_t *frame_buf, int frame
parse_code = unit [ 4 ] ;
unit_size = AV_RB32 ( & unit [ 5 ] ) ;
if ( unit_size > end - unit )
break ;
switch ( parse_code ) {
/* sequence header */
/* end of sequence */
case DIRAC_PCODE_SEQ_HEADER :
case DIRAC_PCODE_END_SEQ :
send_packet ( ctx , parse_code , 0 , unit + DIRAC_DATA_UNIT_HEADER_SIZE , unit_size - DIRAC_DATA_UNIT_HEADER_SIZE , 0 , 0 , 0 ) ;
if ( unit_size > = DIRAC_DATA_UNIT_HEADER_SIZE )
send_packet ( ctx , parse_code , 0 , unit + DIRAC_DATA_UNIT_HEADER_SIZE , unit_size - DIRAC_DATA_UNIT_HEADER_SIZE , 0 , 0 , 0 ) ;
break ;
/* HQ picture */
case DIRAC_PCODE_PICTURE_HQ :
send_picture ( ctx , unit + DIRAC_DATA_UNIT_HEADER_SIZE , unit_size - DIRAC_DATA_UNIT_HEADER_SIZE , interlaced ) ;
if ( unit_size > = DIRAC_DATA_UNIT_HEADER_SIZE )
send_picture ( ctx , unit + DIRAC_DATA_UNIT_HEADER_SIZE , unit_size - DIRAC_DATA_UNIT_HEADER_SIZE , interlaced ) ;
break ;
/* parse codes without specification */
case DIRAC_PCODE_AUX :