Commit 834b64d0 authored by Gildas Bazin's avatar Gildas Bazin

* modules/packetizer/h264.c: fixed insertion of SPS/PPS.

parent 10e3212e
...@@ -84,6 +84,7 @@ struct decoder_sys_t ...@@ -84,6 +84,7 @@ struct decoder_sys_t
int i_nal_ref_idc; int i_nal_ref_idc;
int i_idr_pic_id; int i_idr_pic_id;
int i_frame_num; int i_frame_num;
int i_frame_type;
}; };
enum enum
...@@ -163,6 +164,7 @@ static int Open( vlc_object_t *p_this ) ...@@ -163,6 +164,7 @@ static int Open( vlc_object_t *p_this )
p_sys->i_nal_ref_idc = -1; p_sys->i_nal_ref_idc = -1;
p_sys->i_idr_pic_id = -1; p_sys->i_idr_pic_id = -1;
p_sys->i_frame_num = -1; p_sys->i_frame_num = -1;
p_sys->i_frame_type = 0;
/* Setup properties */ /* Setup properties */
es_format_Copy( &p_dec->fmt_out, &p_dec->fmt_in ); es_format_Copy( &p_dec->fmt_out, &p_dec->fmt_in );
...@@ -477,7 +479,9 @@ static block_t *ParseNALBlock( decoder_t *p_dec, block_t *p_frag ) ...@@ -477,7 +479,9 @@ static block_t *ParseNALBlock( decoder_t *p_dec, block_t *p_frag )
do { \ do { \
p_pic = block_ChainGather( p_sys->p_frame ); \ p_pic = block_ChainGather( p_sys->p_frame ); \
p_pic->i_length = 0; /* FIXME */ \ p_pic->i_length = 0; /* FIXME */ \
p_pic->i_flags |= p_sys->i_frame_type; \
\ \
p_sys->i_frame_type = 0; \
p_sys->p_frame = NULL; \ p_sys->p_frame = NULL; \
p_sys->b_slice = VLC_FALSE; \ p_sys->b_slice = VLC_FALSE; \
\ \
...@@ -514,7 +518,7 @@ static block_t *ParseNALBlock( decoder_t *p_dec, block_t *p_frag ) ...@@ -514,7 +518,7 @@ static block_t *ParseNALBlock( decoder_t *p_dec, block_t *p_frag )
else if( i_nal_type >= NAL_SLICE && i_nal_type <= NAL_SLICE_IDR ) else if( i_nal_type >= NAL_SLICE && i_nal_type <= NAL_SLICE_IDR )
{ {
uint8_t *dec; uint8_t *dec;
int i_dec, i_first_mb, i_slice_type, i_frame_num, i_pic_flags = 0; int i_dec, i_first_mb, i_slice_type, i_frame_num;
vlc_bool_t b_pic = VLC_FALSE; vlc_bool_t b_pic = VLC_FALSE;
bs_t s; bs_t s;
...@@ -529,23 +533,22 @@ static block_t *ParseNALBlock( decoder_t *p_dec, block_t *p_frag ) ...@@ -529,23 +533,22 @@ static block_t *ParseNALBlock( decoder_t *p_dec, block_t *p_frag )
/* slice_type */ /* slice_type */
switch( (i_slice_type = bs_read_ue( &s )) ) switch( (i_slice_type = bs_read_ue( &s )) )
{ {
case 0: case 5: case 0: case 5:
i_pic_flags = BLOCK_FLAG_TYPE_P; p_sys->i_frame_type = BLOCK_FLAG_TYPE_P;
break; break;
case 1: case 6: case 1: case 6:
i_pic_flags = BLOCK_FLAG_TYPE_B; p_sys->i_frame_type = BLOCK_FLAG_TYPE_B;
break; break;
case 2: case 7: case 2: case 7:
i_pic_flags = BLOCK_FLAG_TYPE_I; p_sys->i_frame_type = BLOCK_FLAG_TYPE_I;
break; break;
case 3: case 8: /* SP */ case 3: case 8: /* SP */
i_pic_flags = BLOCK_FLAG_TYPE_P; p_sys->i_frame_type = BLOCK_FLAG_TYPE_P;
break; break;
case 4: case 9: case 4: case 9:
i_pic_flags = BLOCK_FLAG_TYPE_I; p_sys->i_frame_type = BLOCK_FLAG_TYPE_I;
break; break;
} }
p_frag->i_flags |= i_pic_flags;
/* pic_parameter_set_id */ /* pic_parameter_set_id */
bs_read_ue( &s ); bs_read_ue( &s );
......
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