---
 libavcodec/hevc_parser.c |  4 ++--
 libavcodec/hevc_ps.c     | 17 +++++------------
 libavcodec/hevc_refs.c   | 17 ++---------------
 libavcodec/hevcdec.c     |  1 -
 libavcodec/hevcdec.h     |  2 --
 5 files changed, 9 insertions(+), 32 deletions(-)

diff --git a/libavcodec/hevc_parser.c b/libavcodec/hevc_parser.c
index 49e7122..54fbfe6 100644
--- a/libavcodec/hevc_parser.c
+++ b/libavcodec/hevc_parser.c
@@ -66,8 +66,8 @@ static int hevc_parse_slice_header(AVCodecParserContext *s, 
H2645NAL *nal,
     /* export the stream parameters */
     s->coded_width  = sps->width;
     s->coded_height = sps->height;
-    s->width        = sps->output_width;
-    s->height       = sps->output_height;
+    s->width        = sps->output_width  - sps->output_window.left_offset;
+    s->height       = sps->output_height - sps->output_window.top_offset;
     s->format       = sps->pix_fmt;
     avctx->profile  = sps->ptl.general_ptl.profile_idc;
     avctx->level    = sps->ptl.general_ptl.level_idc;
diff --git a/libavcodec/hevc_ps.c b/libavcodec/hevc_ps.c
index 2471907..c09d1a8 100644
--- a/libavcodec/hevc_ps.c
+++ b/libavcodec/hevc_ps.c
@@ -902,18 +902,11 @@ int ff_hevc_parse_sps(HEVCSPS *sps, GetBitContext *gb, 
unsigned int *sps_id,
         sps->output_window.top_offset    += sps->vui.def_disp_win.top_offset;
         sps->output_window.bottom_offset += 
sps->vui.def_disp_win.bottom_offset;
     }
-    if (sps->output_window.left_offset & (0x1F >> (sps->pixel_shift)) &&
-        !(avctx->flags & AV_CODEC_FLAG_UNALIGNED)) {
-        sps->output_window.left_offset &= ~(0x1F >> (sps->pixel_shift));
-        av_log(avctx, AV_LOG_WARNING, "Reducing left output window to %d "
-               "chroma samples to preserve alignment.\n",
-               sps->output_window.left_offset);
-    }
-    sps->output_width  = sps->width -
-                         (sps->output_window.left_offset + 
sps->output_window.right_offset);
-    sps->output_height = sps->height -
-                         (sps->output_window.top_offset + 
sps->output_window.bottom_offset);
-    if (sps->output_width <= 0 || sps->output_height <= 0) {
+    sps->output_width  = sps->width  - sps->output_window.right_offset;
+    sps->output_height = sps->height - sps->output_window.bottom_offset;
+    if (sps->output_width <= 0 || sps->output_height <= 0 ||
+        sps->output_window.left_offset >= sps->output_width ||
+        sps->output_window.top_offset  >= sps->output_height) {
         av_log(avctx, AV_LOG_WARNING, "Invalid visible frame dimensions: 
%dx%d.\n",
                sps->output_width, sps->output_height);
         if (avctx->err_recognition & AV_EF_EXPLODE) {
diff --git a/libavcodec/hevc_refs.c b/libavcodec/hevc_refs.c
index 30409ba..3318ef3 100644
--- a/libavcodec/hevc_refs.c
+++ b/libavcodec/hevc_refs.c
@@ -162,7 +162,8 @@ int ff_hevc_set_new_ref(HEVCContext *s, AVFrame **frame, 
int poc)
 
     ref->poc      = poc;
     ref->sequence = s->seq_decode;
-    ref->window   = s->ps.sps->output_window;
+    ref->frame->crop_left = s->ps.sps->output_window.left_offset;
+    ref->frame->crop_top  = s->ps.sps->output_window.top_offset;
 
     return 0;
 }
@@ -193,26 +194,12 @@ int ff_hevc_output_frame(HEVCContext *s, AVFrame *out, 
int flush)
 
         if (nb_output) {
             HEVCFrame *frame = &s->DPB[min_idx];
-            const AVPixFmtDescriptor *desc = 
av_pix_fmt_desc_get(frame->frame->format);
-            int pixel_shift;
-
-            if (!desc)
-                return AVERROR_BUG;
-
-            pixel_shift = desc->comp[0].depth > 8;
 
             ret = av_frame_ref(out, frame->frame);
             ff_hevc_unref_frame(s, frame, HEVC_FRAME_FLAG_OUTPUT);
             if (ret < 0)
                 return ret;
 
-            for (i = 0; i < 3; i++) {
-                int hshift = (i > 0) ? desc->log2_chroma_w : 0;
-                int vshift = (i > 0) ? desc->log2_chroma_h : 0;
-                int off = ((frame->window.left_offset >> hshift) << 
pixel_shift) +
-                          (frame->window.top_offset   >> vshift) * 
out->linesize[i];
-                out->data[i] += off;
-            }
             av_log(s->avctx, AV_LOG_DEBUG,
                    "Output frame with POC %d.\n", frame->poc);
             return 1;
diff --git a/libavcodec/hevcdec.c b/libavcodec/hevcdec.c
index 27fd683..0dbe791 100644
--- a/libavcodec/hevcdec.c
+++ b/libavcodec/hevcdec.c
@@ -2861,7 +2861,6 @@ static int hevc_ref_frame(HEVCContext *s, HEVCFrame *dst, 
HEVCFrame *src)
 
     dst->poc        = src->poc;
     dst->ctb_count  = src->ctb_count;
-    dst->window     = src->window;
     dst->flags      = src->flags;
     dst->sequence   = src->sequence;
 
diff --git a/libavcodec/hevcdec.h b/libavcodec/hevcdec.h
index 82adad2..ff192f6 100644
--- a/libavcodec/hevcdec.h
+++ b/libavcodec/hevcdec.h
@@ -374,8 +374,6 @@ typedef struct HEVCFrame {
     int poc;
     struct HEVCFrame *collocated_ref;
 
-    HEVCWindow window;
-
     AVBufferRef *tab_mvf_buf;
     AVBufferRef *rpl_tab_buf;
     AVBufferRef *rpl_buf;
-- 
2.0.0

_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to