[FFmpeg-devel] [PATCH 1/2] avcodec/cbs_h2645: use simple data buffers for some parameter set extensions
James Almer
jamrial at gmail.com
Tue May 8 23:48:55 EEST 2018
There's no gain from using AVBufferRef for these, as no copies or
references are ever made.
Signed-off-by: James Almer <jamrial at gmail.com>
---
There is however a raw copy of the struct storing these buffers,
which is dangerous and fragile.
This patch is in preparation to change how the above is handled.
libavcodec/cbs_h264.h | 1 -
libavcodec/cbs_h2645.c | 13 ++++++-------
libavcodec/cbs_h265.h | 1 -
3 files changed, 6 insertions(+), 9 deletions(-)
diff --git a/libavcodec/cbs_h264.h b/libavcodec/cbs_h264.h
index 2219d9da8d..becea3adfe 100644
--- a/libavcodec/cbs_h264.h
+++ b/libavcodec/cbs_h264.h
@@ -197,7 +197,6 @@ typedef struct H264RawPPS {
uint16_t pic_size_in_map_units_minus1;
uint8_t *slice_group_id;
- AVBufferRef *slice_group_id_ref;
uint8_t num_ref_idx_l0_default_active_minus1;
uint8_t num_ref_idx_l1_default_active_minus1;
diff --git a/libavcodec/cbs_h2645.c b/libavcodec/cbs_h2645.c
index 64a1a2d1ee..580ca09f63 100644
--- a/libavcodec/cbs_h2645.c
+++ b/libavcodec/cbs_h2645.c
@@ -318,10 +318,9 @@ static int cbs_h2645_read_more_rbsp_data(GetBitContext *gbc)
#define byte_alignment(rw) (get_bits_count(rw) % 8)
#define allocate(name, size) do { \
- name ## _ref = av_buffer_allocz(size); \
- if (!name ## _ref) \
+ name = av_mallocz(size); \
+ if (!name) \
return AVERROR(ENOMEM); \
- name = name ## _ref->data; \
} while (0)
#define FUNC(name) FUNC_H264(READWRITE, name)
@@ -415,7 +414,7 @@ static int cbs_h2645_read_more_rbsp_data(GetBitContext *gbc)
static void cbs_h264_free_pps(void *unit, uint8_t *content)
{
H264RawPPS *pps = (H264RawPPS*)content;
- av_buffer_unref(&pps->slice_group_id_ref);
+ av_free(pps->slice_group_id);
av_freep(&content);
}
@@ -458,21 +457,21 @@ static void cbs_h264_free_slice(void *unit, uint8_t *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_free(vps->extension_data.data);
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_free(sps->extension_data.data);
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_free(pps->extension_data.data);
av_freep(&content);
}
diff --git a/libavcodec/cbs_h265.h b/libavcodec/cbs_h265.h
index 33e71fc234..1b357293ab 100644
--- a/libavcodec/cbs_h265.h
+++ b/libavcodec/cbs_h265.h
@@ -154,7 +154,6 @@ typedef struct H265RawVUI {
typedef struct H265RawPSExtensionData {
uint8_t *data;
size_t bit_length;
- AVBufferRef *data_ref;
} H265RawPSExtensionData;
typedef struct H265RawVPS {
--
2.17.0
More information about the ffmpeg-devel
mailing list