From caff888183ac3415b327af06403cb9d60cf770c6 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Thu, 14 Mar 2013 02:12:14 +0100 Subject: avutil/frame: add AVBufferRef for qp table Signed-off-by: Michael Niedermayer --- libavutil/frame.c | 38 ++++++++++++++++++++++++++++++++++++++ libavutil/frame.h | 7 +++++++ 2 files changed, 45 insertions(+) (limited to 'libavutil') diff --git a/libavutil/frame.c b/libavutil/frame.c index 58e77c73f4..90f7fce6bf 100644 --- a/libavutil/frame.c +++ b/libavutil/frame.c @@ -42,6 +42,30 @@ MAKE_ACCESSORS(AVFrame, frame, int, pkt_size) AVDictionary **avpriv_frame_get_metadatap(AVFrame *frame) {return &frame->metadata;}; +int av_frame_set_qp_table(AVFrame *f, AVBufferRef *buf, int stride, int qp_type) +{ + av_buffer_unref(&f->qp_table_buf); + + f->qp_table_buf = buf; + + f->qscale_table = buf->data; + f->qstride = stride; + f->qscale_type = qp_type; + + return 0; +} + +int8_t *av_frame_get_qp_table(AVFrame *f, int *stride, int *type) +{ + *stride = f->qstride; + *type = f->qscale_type; + + if (!f->qp_table_buf) + return NULL; + + return f->qp_table_buf->data; +} + static void get_frame_defaults(AVFrame *frame) { if (frame->extended_data != frame->data) @@ -311,6 +335,8 @@ void av_frame_unref(AVFrame *frame) av_buffer_unref(&frame->extended_buf[i]); av_freep(&frame->extended_buf); av_dict_free(&frame->metadata); + av_buffer_unref(&frame->qp_table_buf); + get_frame_defaults(frame); } @@ -431,6 +457,18 @@ int av_frame_copy_props(AVFrame *dst, const AVFrame *src) av_dict_copy(&sd_dst->metadata, sd_src->metadata, 0); } + dst->qscale_table = NULL; + dst->qstride = 0; + dst->qscale_type = 0; + if (src->qp_table_buf) { + dst->qp_table_buf = av_buffer_ref(src->qp_table_buf); + if (dst->qp_table_buf) { + dst->qscale_table = dst->qp_table_buf->data; + dst->qstride = src->qstride; + dst->qscale_type = src->qscale_type; + } + } + return 0; } diff --git a/libavutil/frame.h b/libavutil/frame.h index ec7cfa9084..8fc5814aff 100644 --- a/libavutil/frame.h +++ b/libavutil/frame.h @@ -419,6 +419,11 @@ typedef struct AVFrame { * - decoding: set by libavcodec, read by user. */ int pkt_size; + + /** + * Not to be accessed directly from outside libavutil + */ + AVBufferRef *qp_table_buf; } AVFrame; /** @@ -445,6 +450,8 @@ void av_frame_set_decode_error_flags (AVFrame *frame, int val); int av_frame_get_pkt_size(const AVFrame *frame); void av_frame_set_pkt_size(AVFrame *frame, int val); AVDictionary **avpriv_frame_get_metadatap(AVFrame *frame); +int8_t *av_frame_get_qp_table(AVFrame *f, int *stride, int *type); +int av_frame_set_qp_table(AVFrame *f, AVBufferRef *buf, int stride, int type); /** * Allocate an AVFrame and set its fields to default values. The resulting -- cgit v1.2.3