@ -1380,65 +1380,6 @@ static int cbs_h265_write_nal_unit(CodedBitstreamContext *ctx,
return 0 ;
return 0 ;
}
}
static int cbs_h2645_write_nal_unit ( CodedBitstreamContext * ctx ,
CodedBitstreamUnit * unit )
{
CodedBitstreamH2645Context * priv = ctx - > priv_data ;
enum AVCodecID codec_id = ctx - > codec - > codec_id ;
PutBitContext pbc ;
int err ;
if ( ! priv - > write_buffer ) {
// Initial write buffer size is 1MB.
priv - > write_buffer_size = 1024 * 1024 ;
reallocate_and_try_again :
err = av_reallocp ( & priv - > write_buffer , priv - > write_buffer_size ) ;
if ( err < 0 ) {
av_log ( ctx - > log_ctx , AV_LOG_ERROR , " Unable to allocate a "
" sufficiently large write buffer (last attempt "
" % " SIZE_SPECIFIER " bytes). \n " , priv - > write_buffer_size ) ;
return err ;
}
}
init_put_bits ( & pbc , priv - > write_buffer , priv - > write_buffer_size ) ;
if ( codec_id = = AV_CODEC_ID_H264 )
err = cbs_h264_write_nal_unit ( ctx , unit , & pbc ) ;
else
err = cbs_h265_write_nal_unit ( ctx , unit , & pbc ) ;
if ( err = = AVERROR ( ENOSPC ) ) {
// Overflow.
priv - > write_buffer_size * = 2 ;
goto reallocate_and_try_again ;
}
// Overflow but we didn't notice.
av_assert0 ( put_bits_count ( & pbc ) < = 8 * priv - > write_buffer_size ) ;
if ( err < 0 ) {
// Write failed for some other reason.
return err ;
}
if ( put_bits_count ( & pbc ) % 8 )
unit - > data_bit_padding = 8 - put_bits_count ( & pbc ) % 8 ;
else
unit - > data_bit_padding = 0 ;
unit - > data_size = ( put_bits_count ( & pbc ) + 7 ) / 8 ;
flush_put_bits ( & pbc ) ;
err = ff_cbs_alloc_unit_data ( ctx , unit , unit - > data_size ) ;
if ( err < 0 )
return err ;
memcpy ( unit - > data , priv - > write_buffer , unit - > data_size ) ;
return 0 ;
}
static int cbs_h2645_assemble_fragment ( CodedBitstreamContext * ctx ,
static int cbs_h2645_assemble_fragment ( CodedBitstreamContext * ctx ,
CodedBitstreamFragment * frag )
CodedBitstreamFragment * frag )
{
{
@ -1533,8 +1474,6 @@ static void cbs_h264_close(CodedBitstreamContext *ctx)
ff_h2645_packet_uninit ( & h264 - > common . read_packet ) ;
ff_h2645_packet_uninit ( & h264 - > common . read_packet ) ;
av_freep ( & h264 - > common . write_buffer ) ;
for ( i = 0 ; i < FF_ARRAY_ELEMS ( h264 - > sps ) ; i + + )
for ( i = 0 ; i < FF_ARRAY_ELEMS ( h264 - > sps ) ; i + + )
av_buffer_unref ( & h264 - > sps_ref [ i ] ) ;
av_buffer_unref ( & h264 - > sps_ref [ i ] ) ;
for ( i = 0 ; i < FF_ARRAY_ELEMS ( h264 - > pps ) ; i + + )
for ( i = 0 ; i < FF_ARRAY_ELEMS ( h264 - > pps ) ; i + + )
@ -1548,8 +1487,6 @@ static void cbs_h265_close(CodedBitstreamContext *ctx)
ff_h2645_packet_uninit ( & h265 - > common . read_packet ) ;
ff_h2645_packet_uninit ( & h265 - > common . read_packet ) ;
av_freep ( & h265 - > common . write_buffer ) ;
for ( i = 0 ; i < FF_ARRAY_ELEMS ( h265 - > vps ) ; i + + )
for ( i = 0 ; i < FF_ARRAY_ELEMS ( h265 - > vps ) ; i + + )
av_buffer_unref ( & h265 - > vps_ref [ i ] ) ;
av_buffer_unref ( & h265 - > vps_ref [ i ] ) ;
for ( i = 0 ; i < FF_ARRAY_ELEMS ( h265 - > sps ) ; i + + )
for ( i = 0 ; i < FF_ARRAY_ELEMS ( h265 - > sps ) ; i + + )
@ -1565,7 +1502,7 @@ const CodedBitstreamType ff_cbs_type_h264 = {
. split_fragment = & cbs_h2645_split_fragment ,
. split_fragment = & cbs_h2645_split_fragment ,
. read_unit = & cbs_h264_read_nal_unit ,
. read_unit = & cbs_h264_read_nal_unit ,
. write_unit = & cbs_h2645 _write_nal_unit ,
. write_unit = & cbs_h264_write_nal_unit ,
. assemble_fragment = & cbs_h2645_assemble_fragment ,
. assemble_fragment = & cbs_h2645_assemble_fragment ,
. close = & cbs_h264_close ,
. close = & cbs_h264_close ,
@ -1578,7 +1515,7 @@ const CodedBitstreamType ff_cbs_type_h265 = {
. split_fragment = & cbs_h2645_split_fragment ,
. split_fragment = & cbs_h2645_split_fragment ,
. read_unit = & cbs_h265_read_nal_unit ,
. read_unit = & cbs_h265_read_nal_unit ,
. write_unit = & cbs_h264 5_write_nal_unit ,
. write_unit = & cbs_h265_write_nal_unit ,
. assemble_fragment = & cbs_h2645_assemble_fragment ,
. assemble_fragment = & cbs_h2645_assemble_fragment ,
. close = & cbs_h265_close ,
. close = & cbs_h265_close ,