---
libavcodec/h264_ps.c | 9 ---------
libavcodec/h264_slice.c | 7 +++++--
libavcodec/h264dec.c | 24 ++----------------------
3 files changed, 7 insertions(+), 33 deletions(-)
diff --git a/libavcodec/h264_ps.c b/libavcodec/h264_ps.c
index 8a64a33..7ee3876 100644
--- a/libavcodec/h264_ps.c
+++ b/libavcodec/h264_ps.c
@@ -498,15 +498,6 @@ int ff_h264_decode_seq_parameter_set(GetBitContext *gb,
AVCodecContext *avctx,
int step_x = 1 << hsub;
int step_y = (2 - sps->frame_mbs_only_flag) << vsub;
- if (crop_left & (0x1F >> (sps->bit_depth_luma > 8)) &&
- !(avctx->flags & AV_CODEC_FLAG_UNALIGNED)) {
- crop_left &= ~(0x1F >> (sps->bit_depth_luma > 8));
- av_log(avctx, AV_LOG_WARNING,
- "Reducing left cropping to %d "
- "chroma samples to preserve alignment.\n",
- crop_left);
- }
-
if (INT_MAX / step_x <= crop_left ||
INT_MAX / step_x - crop_left <= crop_right ||
16 * sps->mb_width <= step_x * (crop_left + crop_right) ||
diff --git a/libavcodec/h264_slice.c b/libavcodec/h264_slice.c
index 1b91088..ff963c2 100644
--- a/libavcodec/h264_slice.c
+++ b/libavcodec/h264_slice.c
@@ -471,6 +471,9 @@ static int h264_frame_start(H264Context *h)
pic->f->pict_type = h->slice_ctx[0].slice_type;
+ pic->f->crop_left = h->ps.sps->crop_left;
+ pic->f->crop_top = h->ps.sps->crop_top;
+
if (CONFIG_ERROR_RESILIENCE && h->enable_er)
ff_er_frame_start(&h->slice_ctx[0].er);
@@ -793,8 +796,8 @@ static enum AVPixelFormat get_pixel_format(H264Context *h)
static int init_dimensions(H264Context *h)
{
SPS *sps = h->ps.sps;
- int width = h->width - (sps->crop_right + sps->crop_left);
- int height = h->height - (sps->crop_top + sps->crop_bottom);
+ int width = h->width - sps->crop_left;
+ int height = h->height - sps->crop_bottom;
/* handle container cropping */
if (FFALIGN(h->avctx->width, 16) == FFALIGN(width, 16) &&
diff --git a/libavcodec/h264dec.c b/libavcodec/h264dec.c
index 330a74d..e92a915 100644
--- a/libavcodec/h264dec.c
+++ b/libavcodec/h264dec.c
@@ -658,26 +658,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)
{
@@ -719,7 +699,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;
@@ -761,7 +741,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;
--
2.0.0
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel