[FFmpeg-cvslog] hevc: fix skip_flag
Mickaël Raulet
git at videolan.org
Mon Jul 28 00:53:05 CEST 2014
ffmpeg | branch: master | Mickaël Raulet <mraulet at insa-rennes.fr> | Sun Jul 27 22:52:14 2014 +0200| [772f7f4eddbc4450443743984bf1d4da2f4bf84c] | committer: Michael Niedermayer
hevc: fix skip_flag
cherry picked from commit 509ae456551005b9bf9b4d9730b6247c97fdd990
Signed-off-by: Michael Niedermayer <michaelni at gmx.at>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=772f7f4eddbc4450443743984bf1d4da2f4bf84c
---
libavcodec/hevc.c | 8 +++++++-
libavcodec/hevc_refs.c | 15 +++++----------
2 files changed, 12 insertions(+), 11 deletions(-)
diff --git a/libavcodec/hevc.c b/libavcodec/hevc.c
index 727f3a5..57e940e 100644
--- a/libavcodec/hevc.c
+++ b/libavcodec/hevc.c
@@ -97,7 +97,7 @@ static int pic_arrays_init(HEVCContext *s, const HEVCSPS *sps)
if (!s->sao || !s->deblock)
goto fail;
- s->skip_flag = av_malloc(pic_size_in_ctb);
+ s->skip_flag = av_malloc(sps->min_cb_height * sps->min_cb_width);
s->tab_ct_depth = av_malloc_array(sps->min_cb_height, sps->min_cb_width);
if (!s->skip_flag || !s->tab_ct_depth)
goto fail;
@@ -2019,6 +2019,12 @@ static int hls_coding_unit(HEVCContext *s, int x0, int y0, int log2_cb_size)
x += min_cb_width;
}
lc->cu.pred_mode = skip_flag ? MODE_SKIP : MODE_INTER;
+ } else {
+ x = y_cb * min_cb_width + x_cb;
+ for (y = 0; y < length; y++) {
+ memset(&s->skip_flag[x], 0, length);
+ x += min_cb_width;
+ }
}
if (SAMPLE_CTB(s->skip_flag, x_cb, y_cb)) {
diff --git a/libavcodec/hevc_refs.c b/libavcodec/hevc_refs.c
index bb55aa8..b3a9787 100644
--- a/libavcodec/hevc_refs.c
+++ b/libavcodec/hevc_refs.c
@@ -51,16 +51,11 @@ void ff_hevc_unref_frame(HEVCContext *s, HEVCFrame *frame, int flags)
RefPicList *ff_hevc_get_ref_list(HEVCContext *s, HEVCFrame *ref, int x0, int y0)
{
- if (x0 < 0 || y0 < 0) {
- return s->ref->refPicList;
- } else {
- int x_cb = x0 >> s->sps->log2_ctb_size;
- int y_cb = y0 >> s->sps->log2_ctb_size;
- int pic_width_cb = (s->sps->width + (1 << s->sps->log2_ctb_size) - 1) >>
- s->sps->log2_ctb_size;
- int ctb_addr_ts = s->pps->ctb_addr_rs_to_ts[y_cb * pic_width_cb + x_cb];
- return (RefPicList *)ref->rpl_tab[ctb_addr_ts];
- }
+ int x_cb = x0 >> s->sps->log2_ctb_size;
+ int y_cb = y0 >> s->sps->log2_ctb_size;
+ int pic_width_cb = s->sps->ctb_width;
+ int ctb_addr_ts = s->pps->ctb_addr_rs_to_ts[y_cb * pic_width_cb + x_cb];
+ return (RefPicList *)ref->rpl_tab[ctb_addr_ts];
}
void ff_hevc_clear_refs(HEVCContext *s)
More information about the ffmpeg-cvslog
mailing list