From patchwork Mon Dec 5 20:32:58 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mathieu Velten X-Patchwork-Id: 1689 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.65.86 with SMTP id o83csp1828192vsa; Mon, 5 Dec 2016 12:40:46 -0800 (PST) X-Received: by 10.28.7.130 with SMTP id 124mr10600740wmh.18.1480970446308; Mon, 05 Dec 2016 12:40:46 -0800 (PST) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id r142si347771wmd.52.2016.12.05.12.40.45; Mon, 05 Dec 2016 12:40:46 -0800 (PST) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 74A6E689F86; Mon, 5 Dec 2016 22:40:26 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mv-xps-13.localdomain (81-67-195-71.rev.numericable.fr [81.67.195.71]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id DF96C689E5A for ; Mon, 5 Dec 2016 22:40:18 +0200 (EET) Received: from mv-xps-13.localdomain (localhost [IPv6:::1]) by mv-xps-13.localdomain (Postfix) with ESMTP id E538E599AA; Mon, 5 Dec 2016 21:33:05 +0100 (CET) From: Mathieu Velten To: ffmpeg-devel@ffmpeg.org Date: Mon, 5 Dec 2016 21:32:58 +0100 Message-Id: <20161205203259.2479-1-matmaul@gmail.com> X-Mailer: git-send-email 2.9.3 Subject: [FFmpeg-devel] [PATCH 1/2] avcodec/vp9: move bpp to the shared context for use in hwaccel X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Mathieu Velten MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" --- libavcodec/vp9.c | 28 ++++++++++++++-------------- libavcodec/vp9.h | 1 + 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/libavcodec/vp9.c b/libavcodec/vp9.c index 0ec895a..793e356 100644 --- a/libavcodec/vp9.c +++ b/libavcodec/vp9.c @@ -68,7 +68,7 @@ typedef struct VP9Context { ptrdiff_t y_stride, uv_stride; uint8_t ss_h, ss_v; - uint8_t last_bpp, bpp, bpp_index, bytesperpixel; + uint8_t last_bpp, bpp_index, bytesperpixel; uint8_t last_keyframe; // sb_cols/rows, rows/cols and last_fmt are used for allocating all internal // arrays, and are thus per-thread. w/h and gf_fmt are synced between threads @@ -326,10 +326,10 @@ static int update_size(AVCodecContext *ctx, int w, int h) av_freep(&s->b_base); av_freep(&s->block_base); - if (s->bpp != s->last_bpp) { - ff_vp9dsp_init(&s->dsp, s->bpp, ctx->flags & AV_CODEC_FLAG_BITEXACT); - ff_videodsp_init(&s->vdsp, s->bpp); - s->last_bpp = s->bpp; + if (s->s.h.bpp != s->last_bpp) { + ff_vp9dsp_init(&s->dsp, s->s.h.bpp, ctx->flags & AV_CODEC_FLAG_BITEXACT); + ff_videodsp_init(&s->vdsp, s->s.h.bpp); + s->last_bpp = s->s.h.bpp; } return 0; @@ -458,8 +458,8 @@ static int read_colorspace_details(AVCodecContext *ctx) int bits = ctx->profile <= 1 ? 0 : 1 + get_bits1(&s->gb); // 0:8, 1:10, 2:12 s->bpp_index = bits; - s->bpp = 8 + bits * 2; - s->bytesperpixel = (7 + s->bpp) >> 3; + s->s.h.bpp = 8 + bits * 2; + s->bytesperpixel = (7 + s->s.h.bpp) >> 3; ctx->colorspace = colorspaces[get_bits(&s->gb, 3)]; if (ctx->colorspace == AVCOL_SPC_RGB) { // RGB = profile 1 static const enum AVPixelFormat pix_fmt_rgb[3] = { @@ -571,7 +571,7 @@ static int decode_frame_header(AVCodecContext *ctx, return res; } else { s->ss_h = s->ss_v = 1; - s->bpp = 8; + s->s.h.bpp = 8; s->bpp_index = 0; s->bytesperpixel = 1; s->pix_fmt = AV_PIX_FMT_YUV420P; @@ -2278,7 +2278,7 @@ static int decode_coeffs_b_16bpp(VP9Context *s, int16_t *coef, int n_coeffs, const int16_t (*nb)[2], const int16_t *band_counts, const int16_t *qmul) { - return decode_coeffs_b_generic(&s->c, coef, n_coeffs, 0, 0, s->bpp, cnt, eob, p, + return decode_coeffs_b_generic(&s->c, coef, n_coeffs, 0, 0, s->s.h.bpp, cnt, eob, p, nnz, scan, nb, band_counts, qmul); } @@ -2288,7 +2288,7 @@ static int decode_coeffs_b32_16bpp(VP9Context *s, int16_t *coef, int n_coeffs, const int16_t (*nb)[2], const int16_t *band_counts, const int16_t *qmul) { - return decode_coeffs_b_generic(&s->c, coef, n_coeffs, 1, 0, s->bpp, cnt, eob, p, + return decode_coeffs_b_generic(&s->c, coef, n_coeffs, 1, 0, s->s.h.bpp, cnt, eob, p, nnz, scan, nb, band_counts, qmul); } @@ -2479,7 +2479,7 @@ static av_always_inline int check_intra_mode(VP9Context *s, int mode, uint8_t ** int have_top = row > 0 || y > 0; int have_left = col > s->tile_col_start || x > 0; int have_right = x < w - 1; - int bpp = s->bpp; + int bpp = s->s.h.bpp; static const uint8_t mode_conv[10][2 /* have_left */][2 /* have_top */] = { [VERT_PRED] = { { DC_127_PRED, VERT_PRED }, { DC_127_PRED, VERT_PRED } }, @@ -3310,13 +3310,13 @@ static void decode_b(AVCodecContext *ctx, int row, int col, s->uv_stride = f->linesize[1]; } if (b->intra) { - if (s->bpp > 8) { + if (s->s.h.bpp > 8) { intra_recon_16bpp(ctx, yoff, uvoff); } else { intra_recon_8bpp(ctx, yoff, uvoff); } } else { - if (s->bpp > 8) { + if (s->s.h.bpp > 8) { inter_recon_16bpp(ctx); } else { inter_recon_8bpp(ctx); @@ -4353,7 +4353,7 @@ static int vp9_decode_update_thread_context(AVCodecContext *dst, const AVCodecCo s->gf_fmt = ssrc->gf_fmt; s->w = ssrc->w; s->h = ssrc->h; - s->bpp = ssrc->bpp; + s->s.h.bpp = ssrc->s.h.bpp; s->bpp_index = ssrc->bpp_index; s->pix_fmt = ssrc->pix_fmt; memcpy(&s->prob_ctx, &ssrc->prob_ctx, sizeof(s->prob_ctx)); diff --git a/libavcodec/vp9.h b/libavcodec/vp9.h index df5bd4d..89b1bd3 100644 --- a/libavcodec/vp9.h +++ b/libavcodec/vp9.h @@ -137,6 +137,7 @@ typedef struct VP9Frame { typedef struct VP9BitstreamHeader { // bitstream header uint8_t profile; + uint8_t bpp; uint8_t keyframe; uint8_t invisible; uint8_t errorres;