mirror of
https://code.videolan.org/videolan/vlc
synced 2024-10-03 01:31:53 +02:00
packetizer: h26x: recovery point has changed for HEVC
This commit is contained in:
parent
27db51ce4f
commit
63a50f5439
@ -1228,9 +1228,13 @@ static bool ParseSeiCallback( const hxxx_sei_data_t *p_sei_data, void *cbdata )
|
||||
/* Look for SEI recovery point */
|
||||
case HXXX_SEI_RECOVERY_POINT:
|
||||
{
|
||||
if( !p_sys->b_recovered )
|
||||
msg_Dbg( p_dec, "Seen SEI recovery point, %d recovery frames", p_sei_data->recovery.i_frames );
|
||||
p_sys->i_recovery_frame_cnt = p_sei_data->recovery.i_frames;
|
||||
h264_sei_recovery_point_t reco;
|
||||
if( !p_sys->b_recovered &&
|
||||
h264_decode_sei_recovery_point( p_sei_data->p_bs, &reco ) )
|
||||
{
|
||||
msg_Dbg( p_dec, "Seen SEI recovery point, %u recovery frames", reco.i_frames );
|
||||
p_sys->i_recovery_frame_cnt = reco.i_frames;
|
||||
}
|
||||
} break;
|
||||
|
||||
default:
|
||||
|
@ -861,3 +861,12 @@ bool h264_get_profile_level(const es_format_t *p_fmt, uint8_t *pi_profile,
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool h264_decode_sei_recovery_point( bs_t *p_bs, h264_sei_recovery_point_t *p_reco )
|
||||
{
|
||||
p_reco->i_frames = bs_read_ue( p_bs );
|
||||
//bool b_exact_match = bs_read( p_bs, 1 );
|
||||
//bool b_broken_link = bs_read( p_bs, 1 );
|
||||
//int i_changing_slice_group = bs_read( p_bs, 2 );
|
||||
return true;
|
||||
}
|
||||
|
@ -22,6 +22,7 @@
|
||||
|
||||
# include <vlc_common.h>
|
||||
# include <vlc_es.h>
|
||||
# include <vlc_bits.h>
|
||||
|
||||
#define PROFILE_H264_BASELINE 66
|
||||
#define PROFILE_H264_MAIN 77
|
||||
@ -198,4 +199,11 @@ bool h264_get_colorimetry( const h264_sequence_parameter_set_t *p_sps,
|
||||
bool h264_get_profile_level(const es_format_t *p_fmt, uint8_t *pi_profile,
|
||||
uint8_t *pi_level, uint8_t *p_nal_length_size);
|
||||
|
||||
typedef struct
|
||||
{
|
||||
unsigned i_frames;
|
||||
} h264_sei_recovery_point_t;
|
||||
|
||||
bool h264_decode_sei_recovery_point( bs_t *, h264_sei_recovery_point_t * );
|
||||
|
||||
#endif /* H264_NAL_H */
|
||||
|
@ -1063,9 +1063,11 @@ static bool ParseSEICallback( const hxxx_sei_data_t *p_sei_data, void *cbdata )
|
||||
} break;
|
||||
case HXXX_SEI_RECOVERY_POINT:
|
||||
{
|
||||
if( !p_sys->b_recovery_point )
|
||||
hevc_sei_recovery_point_t reco;
|
||||
if( !p_sys->b_recovery_point &&
|
||||
hevc_decode_sei_recovery_point( p_sei_data->p_bs, &reco ) )
|
||||
{
|
||||
msg_Dbg( p_dec, "Seen SEI recovery point, %d recovery frames", p_sei_data->recovery.i_frames );
|
||||
msg_Dbg( p_dec, "Seen SEI recovery point, %d recovery frames", reco.i_frames );
|
||||
p_sys->b_recovery_point = true;
|
||||
}
|
||||
} break;
|
||||
|
@ -1654,6 +1654,12 @@ hevc_sei_pic_timing_t * hevc_decode_sei_pic_timing( bs_t *p_bs,
|
||||
return p_timing;
|
||||
}
|
||||
|
||||
bool hevc_decode_sei_recovery_point( bs_t *p_bs, hevc_sei_recovery_point_t *p_reco )
|
||||
{
|
||||
p_reco->i_frames = bs_read_se( p_bs );
|
||||
return true;
|
||||
}
|
||||
|
||||
bool hevc_frame_is_progressive( const hevc_sequence_parameter_set_t *p_sps,
|
||||
const hevc_sei_pic_timing_t *p_timing )
|
||||
{
|
||||
|
@ -375,6 +375,13 @@ hevc_sei_pic_timing_t * hevc_decode_sei_pic_timing( bs_t *,
|
||||
const hevc_sequence_parameter_set_t * );
|
||||
void hevc_release_sei_pic_timing( hevc_sei_pic_timing_t * );
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int i_frames;
|
||||
} hevc_sei_recovery_point_t;
|
||||
|
||||
bool hevc_decode_sei_recovery_point( bs_t *, hevc_sei_recovery_point_t * );
|
||||
|
||||
uint8_t hevc_get_num_clock_ts( const hevc_sequence_parameter_set_t *,
|
||||
const hevc_sei_pic_timing_t * /* can be NULL */ );
|
||||
bool hevc_frame_is_progressive( const hevc_sequence_parameter_set_t *,
|
||||
|
@ -168,10 +168,7 @@ void HxxxParseSEI(const uint8_t *p_buf, size_t i_buf,
|
||||
/* Look for SEI recovery point */
|
||||
case HXXX_SEI_RECOVERY_POINT:
|
||||
{
|
||||
sei_data.recovery.i_frames = bs_read_ue( &s );
|
||||
//bool b_exact_match = bs_read( &s, 1 );
|
||||
//bool b_broken_link = bs_read( &s, 1 );
|
||||
//int i_changing_slice_group = bs_read( &s, 2 );
|
||||
sei_data.p_bs = &s;
|
||||
b_continue = pf_callback( &sei_data, cbdata );
|
||||
} break;
|
||||
|
||||
|
@ -74,10 +74,6 @@ typedef struct
|
||||
bool b_frame0;
|
||||
} frame_packing;
|
||||
struct
|
||||
{
|
||||
int i_frames;
|
||||
} recovery;
|
||||
struct
|
||||
{
|
||||
uint16_t primaries[3*2]; /* G,B,R / x,y */
|
||||
uint16_t white_point[2]; /* x,y */
|
||||
|
Loading…
Reference in New Issue
Block a user