summaryrefslogtreecommitdiff
path: root/libavcodec/h264dec.c
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2016-12-18 21:11:47 +0100
committerAnton Khirnov <anton@khirnov.net>2017-01-12 16:29:12 +0100
commitc3e84820d67cb1d8cfb4196f9b43971308a81571 (patch)
tree8d167e1b8815e21b4f8de76a95b9c19daf66b2f5 /libavcodec/h264dec.c
parent4fded0480f20f4d7ca5e776a85574de34dfead14 (diff)
h264dec: export cropping information instead of handling it internally
Diffstat (limited to 'libavcodec/h264dec.c')
-rw-r--r--libavcodec/h264dec.c26
1 files changed, 3 insertions, 23 deletions
diff --git a/libavcodec/h264dec.c b/libavcodec/h264dec.c
index 3209c1d4df..834c60c38c 100644
--- a/libavcodec/h264dec.c
+++ b/libavcodec/h264dec.c
@@ -661,26 +661,6 @@ static int get_consumed_bytes(int pos, int buf_size)
return pos;
}
-static int output_frame(H264Context *h, AVFrame *dst, AVFrame *src)
-{
- int i;
- int ret = av_frame_ref(dst, src);
- if (ret < 0)
- return ret;
-
- if (!h->ps.sps || !h->ps.sps->crop)
- return 0;
-
- for (i = 0; i < 3; i++) {
- int hshift = (i > 0) ? h->chroma_x_shift : 0;
- int vshift = (i > 0) ? h->chroma_y_shift : 0;
- int off = ((h->ps.sps->crop_left >> hshift) << h->pixel_shift) +
- (h->ps.sps->crop_top >> vshift) * dst->linesize[i];
- dst->data[i] += off;
- }
- return 0;
-}
-
static int h264_decode_frame(AVCodecContext *avctx, void *data,
int *got_frame, AVPacket *avpkt)
{
@@ -722,7 +702,7 @@ out:
h->delayed_pic[i] = h->delayed_pic[i + 1];
if (out) {
- ret = output_frame(h, pict, out->f);
+ ret = av_frame_ref(pict, out->f);
if (ret < 0)
return ret;
*got_frame = 1;
@@ -765,7 +745,7 @@ out:
*got_frame = 0;
if (h->output_frame->buf[0]) {
- ret = output_frame(h, pict, h->output_frame) ;
+ ret = av_frame_ref(pict, h->output_frame);
av_frame_unref(h->output_frame);
if (ret < 0)
return ret;
@@ -804,7 +784,7 @@ AVCodec ff_h264_decoder = {
.capabilities = /*AV_CODEC_CAP_DRAW_HORIZ_BAND |*/ AV_CODEC_CAP_DR1 |
AV_CODEC_CAP_DELAY | AV_CODEC_CAP_SLICE_THREADS |
AV_CODEC_CAP_FRAME_THREADS,
- .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE,
+ .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_EXPORTS_CROPPING,
.flush = flush_dpb,
.init_thread_copy = ONLY_IF_THREADS_ENABLED(decode_init_thread_copy),
.update_thread_context = ONLY_IF_THREADS_ENABLED(ff_h264_update_thread_context),