The similarity between several free-functions is exploited to create them via a common macro.
Signed-off-by: Andreas Rheinhardt <andreas.rheinha...@googlemail.com> --- libavcodec/cbs_h2645.c | 55 ++++++++++++------------------------------ 1 file changed, 15 insertions(+), 40 deletions(-) diff --git a/libavcodec/cbs_h2645.c b/libavcodec/cbs_h2645.c index e55bd00183..37b0207420 100644 --- a/libavcodec/cbs_h2645.c +++ b/libavcodec/cbs_h2645.c @@ -414,13 +414,22 @@ static int cbs_h2645_read_more_rbsp_data(GetBitContext *gbc) #undef allocate -static void cbs_h264_free_pps(void *unit, uint8_t *content) -{ - H264RawPPS *pps = (H264RawPPS*)content; - av_buffer_unref(&pps->slice_group_id_ref); - av_freep(&content); +#define cbs_h2645_free(h26n, name, var, buffer) \ +static void cbs_h26 ## h26n ## _free_ ## var(void *unit, uint8_t *content) \ +{ \ + H26 ## h26n ## Raw ## name *var = (H26 ## h26n ## Raw ## name*)content; \ + av_buffer_unref(&var->buffer ## _ref); \ + av_freep(&content); \ } +cbs_h2645_free(4, PPS, pps, slice_group_id) +cbs_h2645_free(5, VPS, vps, extension_data.data) +cbs_h2645_free(5, SPS, sps, extension_data.data) +cbs_h2645_free(5, PPS, pps, extension_data.data) + +cbs_h2645_free(4, Slice, slice, data) +cbs_h2645_free(5, Slice, slice, data) + static void cbs_h264_free_sei_payload(H264RawSEIPayload *payload) { switch (payload->payload_type) { @@ -452,41 +461,6 @@ static void cbs_h264_free_sei(void *unit, uint8_t *content) av_freep(&content); } -static void cbs_h264_free_slice(void *unit, uint8_t *content) -{ - H264RawSlice *slice = (H264RawSlice*)content; - av_buffer_unref(&slice->data_ref); - av_freep(&content); -} - -static void cbs_h265_free_vps(void *unit, uint8_t *content) -{ - H265RawVPS *vps = (H265RawVPS*)content; - av_buffer_unref(&vps->extension_data.data_ref); - av_freep(&content); -} - -static void cbs_h265_free_sps(void *unit, uint8_t *content) -{ - H265RawSPS *sps = (H265RawSPS*)content; - av_buffer_unref(&sps->extension_data.data_ref); - av_freep(&content); -} - -static void cbs_h265_free_pps(void *unit, uint8_t *content) -{ - H265RawPPS *pps = (H265RawPPS*)content; - av_buffer_unref(&pps->extension_data.data_ref); - av_freep(&content); -} - -static void cbs_h265_free_slice(void *unit, uint8_t *content) -{ - H265RawSlice *slice = (H265RawSlice*)content; - av_buffer_unref(&slice->data_ref); - av_freep(&content); -} - static void cbs_h265_free_sei_payload(H265RawSEIPayload *payload) { switch (payload->payload_type) { @@ -727,6 +701,7 @@ static int cbs_h26 ## h26n ## _replace_ ## ps_var(CodedBitstreamContext *ctx, \ return 0; \ } + cbs_h2645_replace_ps(4, SPS, sps, seq_parameter_set_id) cbs_h2645_replace_ps(4, PPS, pps, pic_parameter_set_id) cbs_h2645_replace_ps(5, VPS, vps, vps_video_parameter_set_id) -- 2.19.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel