[vlc-commits] packetizer: h264: factorize slice_t init
Francois Cartegnie
git at videolan.org
Wed Mar 15 16:00:28 CET 2017
vlc | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | Wed Mar 15 10:35:04 2017 +0100| [2feb6f7620e8c573b9f2a71e9b25ae068faed707] | committer: Francois Cartegnie
packetizer: h264: factorize slice_t init
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=2feb6f7620e8c573b9f2a71e9b25ae068faed707
---
modules/packetizer/h264.c | 44 +++++++++++++++++++++++---------------------
1 file changed, 23 insertions(+), 21 deletions(-)
diff --git a/modules/packetizer/h264.c b/modules/packetizer/h264.c
index e2f8fda..4301b17 100644
--- a/modules/packetizer/h264.c
+++ b/modules/packetizer/h264.c
@@ -161,8 +161,8 @@ static block_t *ParseNALBlock( decoder_t *, bool *pb_ts_used, block_t * );
static block_t *OutputPicture( decoder_t *p_dec );
static void PutSPS( decoder_t *p_dec, block_t *p_frag );
static void PutPPS( decoder_t *p_dec, block_t *p_frag );
-static bool ParseSlice( decoder_t *p_dec, bool *pb_new_picture, slice_t *p_slice,
- int i_nal_ref_idc, int i_nal_type, const block_t *p_frag );
+static bool ParseSliceHeader( decoder_t *p_dec, int i_nal_ref_idc, int i_nal_type,
+ const block_t *p_frag, bool *pb_new_picture, slice_t *p_slice );
static bool ParseSeiCallback( const hxxx_sei_data_t *, void * );
@@ -250,6 +250,22 @@ static void ActivateSets( decoder_t *p_dec, const h264_sequence_parameter_set_t
}
}
+static void SliceInit( slice_t *p_slice )
+{
+ p_slice->i_nal_type = -1;
+ p_slice->i_nal_ref_idc = -1;
+ p_slice->i_idr_pic_id = -1;
+ p_slice->i_frame_num = -1;
+ p_slice->i_frame_type = 0;
+ p_slice->i_pic_parameter_set_id = -1;
+ p_slice->i_field_pic_flag = 0;
+ p_slice->i_bottom_field_flag = -1;
+ p_slice->i_pic_order_cnt_lsb = -1;
+ p_slice->i_delta_pic_order_cnt_bottom = -1;
+ p_slice->i_delta_pic_order_cnt0 = 0;
+ p_slice->i_delta_pic_order_cnt1 = 0;
+}
+
/*****************************************************************************
* Open: probe the packetizer and return score
* When opening after demux, the packetizer is only loaded AFTER the decoder
@@ -307,16 +323,7 @@ static int Open( vlc_object_t *p_this )
p_sys->p_active_pps = NULL;
p_sys->i_recovery_frames = -1;
- p_sys->slice.i_nal_type = -1;
- p_sys->slice.i_nal_ref_idc = -1;
- p_sys->slice.i_idr_pic_id = -1;
- p_sys->slice.i_frame_num = -1;
- p_sys->slice.i_frame_type = 0;
- p_sys->slice.i_pic_parameter_set_id = -1;
- p_sys->slice.i_field_pic_flag = 0;
- p_sys->slice.i_bottom_field_flag = -1;
- p_sys->slice.i_pic_order_cnt_lsb = -1;
- p_sys->slice.i_delta_pic_order_cnt_bottom = -1;
+ SliceInit( &p_sys->slice );
p_sys->b_even_frame = false;
p_sys->i_frame_dts = VLC_TS_INVALID;
@@ -550,7 +557,7 @@ static block_t *ParseNALBlock( decoder_t *p_dec, bool *pb_ts_used, block_t *p_fr
{
slice_t slice;
- if(ParseSlice( p_dec, &b_new_picture, &slice, i_nal_ref_idc, i_nal_type, p_frag ))
+ if( ParseSliceHeader( p_dec, i_nal_ref_idc, i_nal_type, p_frag, &b_new_picture, &slice ) )
{
/* */
if( b_new_picture && p_sys->b_slice )
@@ -867,12 +874,13 @@ static void PutPPS( decoder_t *p_dec, block_t *p_frag )
StorePPS( p_sys, p_pps->i_id, p_frag, p_pps );
}
-static bool ParseSlice( decoder_t *p_dec, bool *pb_new_picture, slice_t *p_slice,
- int i_nal_ref_idc, int i_nal_type, const block_t *p_frag )
+static bool ParseSliceHeader( decoder_t *p_dec, int i_nal_ref_idc, int i_nal_type,
+ const block_t *p_frag, bool *pb_new_picture, slice_t *p_slice )
{
decoder_sys_t *p_sys = p_dec->p_sys;
int i_slice_type;
slice_t slice;
+ SliceInit( &slice );
bs_t s;
unsigned i_bitflow = 0;
@@ -935,8 +943,6 @@ static bool ParseSlice( decoder_t *p_dec, bool *pb_new_picture, slice_t *p_slice
ActivateSets( p_dec, p_sps, p_pps );
slice.i_frame_num = bs_read( &s, p_sps->i_log2_max_frame_num + 4 );
- slice.i_field_pic_flag = 0;
- slice.i_bottom_field_flag = -1;
if( !p_sps->frame_mbs_only_flag )
{
@@ -950,10 +956,6 @@ static bool ParseSlice( decoder_t *p_dec, bool *pb_new_picture, slice_t *p_slice
if( slice.i_nal_type == H264_NAL_SLICE_IDR )
slice.i_idr_pic_id = bs_read_ue( &s );
- slice.i_pic_order_cnt_lsb = -1;
- slice.i_delta_pic_order_cnt_bottom = -1;
- slice.i_delta_pic_order_cnt0 = 0;
- slice.i_delta_pic_order_cnt1 = 0;
if( p_sps->i_pic_order_cnt_type == 0 )
{
slice.i_pic_order_cnt_lsb = bs_read( &s, p_sps->i_log2_max_pic_order_cnt_lsb + 4 );
More information about the vlc-commits
mailing list