aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2013-03-14 02:12:14 +0100
committerMichael Niedermayer <michaelni@gmx.at>2013-03-15 03:02:27 +0100
commitcaff888183ac3415b327af06403cb9d60cf770c6 (patch)
treec8d58089b1a07b1c33d4ff3b2159df94ef299ee7
parent1edbeb353222acd204934043cfde9933c173b100 (diff)
downloadffmpeg-caff888183ac3415b327af06403cb9d60cf770c6.tar.gz
avutil/frame: add AVBufferRef for qp table
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r--libavutil/frame.c38
-rw-r--r--libavutil/frame.h7
2 files changed, 45 insertions, 0 deletions
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