summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xconfigure12
-rw-r--r--video/mp_image.c14
2 files changed, 21 insertions, 5 deletions
diff --git a/configure b/configure
index 1b855b9cb8..ed7846a563 100755
--- a/configure
+++ b/configure
@@ -2711,6 +2711,17 @@ if test "$_resampler" = no ; then
fi
+echocheck "libavutil QP API"
+_avutil_has_qp_api=no
+statement_check libavutil/frame.h 'av_frame_get_qp_table(NULL, NULL, NULL)' && _avutil_has_qp_api=yes
+if test "$_avutil_has_qp_api" = yes ; then
+ def_avutil_has_qp_api='#define HAVE_AVUTIL_QP_API 1'
+else
+ def_avutil_has_qp_api='#define HAVE_AVUTIL_QP_API 0'
+fi
+echores "$_avutil_has_qp_api"
+
+
echocheck "libavutil ref-counting API"
_avutil_has_refcounting=no
statement_check libavutil/frame.h 'av_frame_unref(NULL)' && _avutil_has_refcounting=yes
@@ -3221,6 +3232,7 @@ $def_mpg123
$def_zlib
$def_avutil_has_refcounting
+$def_avutil_has_qp_api
$def_libpostproc
$def_libavdevice
$def_libavfilter
diff --git a/video/mp_image.c b/video/mp_image.c
index 72da838822..54bf10c634 100644
--- a/video/mp_image.c
+++ b/video/mp_image.c
@@ -318,8 +318,6 @@ void mp_image_copy_attributes(struct mp_image *dst, struct mp_image *src)
dst->qscale_type = src->qscale_type;
dst->pts = src->pts;
if (dst->w == src->w && dst->h == src->h) {
- dst->qstride = src->qstride;
- dst->qscale = src->qscale;
dst->display_w = src->display_w;
dst->display_h = src->display_h;
}
@@ -447,10 +445,8 @@ void mp_image_copy_fields_from_av_frame(struct mp_image *dst,
dst->stride[i] = src->linesize[i];
}
- dst->qscale = src->qscale_table;
- dst->qstride = src->qstride;
dst->pict_type = src->pict_type;
- dst->qscale_type = src->qscale_type;
+
dst->fields = MP_IMGFIELD_ORDERED;
if (src->interlaced_frame)
dst->fields |= MP_IMGFIELD_INTERLACED;
@@ -458,6 +454,14 @@ void mp_image_copy_fields_from_av_frame(struct mp_image *dst,
dst->fields |= MP_IMGFIELD_TOP_FIRST;
if (src->repeat_pict == 1)
dst->fields |= MP_IMGFIELD_REPEAT_FIRST;
+
+#if HAVE_AVUTIL_QP_API
+ dst->qscale = av_frame_get_qp_table(src, &dst->qstride, &dst->qscale_type);
+#else
+ dst->qscale = src->qscale_table;
+ dst->qstride = src->qstride;
+ dst->qscale_type = src->qscale_type;
+#endif
}
#if HAVE_AVUTIL_REFCOUNTING