---
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