mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
avutil/frame: add AVBufferRef for qp table
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
1edbeb3532
commit
caff888183
@ -42,6 +42,30 @@ MAKE_ACCESSORS(AVFrame, frame, int, pkt_size)
|
|||||||
|
|
||||||
AVDictionary **avpriv_frame_get_metadatap(AVFrame *frame) {return &frame->metadata;};
|
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)
|
static void get_frame_defaults(AVFrame *frame)
|
||||||
{
|
{
|
||||||
if (frame->extended_data != frame->data)
|
if (frame->extended_data != frame->data)
|
||||||
@ -311,6 +335,8 @@ void av_frame_unref(AVFrame *frame)
|
|||||||
av_buffer_unref(&frame->extended_buf[i]);
|
av_buffer_unref(&frame->extended_buf[i]);
|
||||||
av_freep(&frame->extended_buf);
|
av_freep(&frame->extended_buf);
|
||||||
av_dict_free(&frame->metadata);
|
av_dict_free(&frame->metadata);
|
||||||
|
av_buffer_unref(&frame->qp_table_buf);
|
||||||
|
|
||||||
get_frame_defaults(frame);
|
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);
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -419,6 +419,11 @@ typedef struct AVFrame {
|
|||||||
* - decoding: set by libavcodec, read by user.
|
* - decoding: set by libavcodec, read by user.
|
||||||
*/
|
*/
|
||||||
int pkt_size;
|
int pkt_size;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Not to be accessed directly from outside libavutil
|
||||||
|
*/
|
||||||
|
AVBufferRef *qp_table_buf;
|
||||||
} AVFrame;
|
} 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);
|
int av_frame_get_pkt_size(const AVFrame *frame);
|
||||||
void av_frame_set_pkt_size(AVFrame *frame, int val);
|
void av_frame_set_pkt_size(AVFrame *frame, int val);
|
||||||
AVDictionary **avpriv_frame_get_metadatap(AVFrame *frame);
|
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
|
* Allocate an AVFrame and set its fields to default values. The resulting
|
||||||
|
Loading…
Reference in New Issue
Block a user