From patchwork Fri Nov 20 07:18:49 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 23757 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 8F73C44A644 for ; Fri, 20 Nov 2020 09:24:32 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 6F2AF68B9FA; Fri, 20 Nov 2020 09:24:32 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ej1-f47.google.com (mail-ej1-f47.google.com [209.85.218.47]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 76E5C68B9C8 for ; Fri, 20 Nov 2020 09:24:25 +0200 (EET) Received: by mail-ej1-f47.google.com with SMTP id oq3so11472093ejb.7 for ; Thu, 19 Nov 2020 23:24:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references:reply-to :mime-version:content-transfer-encoding; bh=XINZmxAnWWed7xbUOmxDQEmkYGY+QkARpWuVksMdN2I=; b=LJ/OZXIYDKF2WOXi5IJNQsgquQ2r5c+w7Iap7z00T1ApQXdCX03/UynuqOm+rJtvY3 wga0DnG5p+vev/z24ueo5n6egEuXSDVPhPgThglVImBirFdwljDPRsrFqkBKVeKW4bUR LmlrgUNZnxevQc0brIaujtShuxD1FSqGOMZDrqnDZSyuQDszp34lTSFTVD1Q0mItGOC1 FlG9LfEHh/nPwJSWTdimwFzKrTnXpDH+WpsLj54UQ/Z7SJRlLi4E3HoJGoA1C2haBuVb 2Zu2hg5InpsdbnEM70pqL8fEEac1aynY+JNkqh4lB8GK1EbjIQIV11yndSTNThsvy/eS C1Qg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:reply-to:mime-version:content-transfer-encoding; bh=XINZmxAnWWed7xbUOmxDQEmkYGY+QkARpWuVksMdN2I=; b=ftKUVse/A3Hf9g3hQnVFZQc1YlARq0ameeb8x7uLCGPscZwZBp0XaiYE5GosGy8EMU UW2Bd4FCFlGTCR0Yxhn1vt+IYg0KQUKrMpxIhMDCo76eRvIMLeYn8k2+Ogbrig+I1nrd ldbdWCgjlJfg7tIvvg1Lo3iLhbK51vMUGPZ0HBtQZXLL3KonkoZ//qiEzSdNpRIW3jNr ZJ5eqXKpyemEkK+AhdKdvi9Zt+OpL5N4h2EsyN2UKasuQ4yuDiVAAAxq9YxWdeK4JcTV nbVSw2l0RjowZw6CWxJXXogfAZtmjuGi2HtHRKSO9Pd/qol9L1ufrpVb96LzCApTbN4c b+sQ== X-Gm-Message-State: AOAM533mPENVROMdj89bbBDohRfPpQz5qQXG6BNIsDZIyLvw08zPnN3K 2LdGXOUNc4Nt3JklCDk9QN0pjZ/WjFCrlQ== X-Google-Smtp-Source: ABdhPJzgqDKoHJEpGnw+BphIyyVFeNOLMRF8iB9Wfch/EoRxjhbzSEJa/YY6esGyd8Vv0spxyoQidg== X-Received: by 2002:a17:906:3a55:: with SMTP id a21mr30912914ejf.357.1605857064197; Thu, 19 Nov 2020 23:24:24 -0800 (PST) Received: from sblaptop.fritz.box (ipbcc1aa4b.dynamic.kabel-deutschland.de. [188.193.170.75]) by smtp.gmail.com with ESMTPSA id lz27sm779419ejb.39.2020.11.19.23.24.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 19 Nov 2020 23:24:23 -0800 (PST) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Fri, 20 Nov 2020 08:18:49 +0100 Message-Id: <20201120072116.818090-17-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20201120072116.818090-1-andreas.rheinhardt@gmail.com> References: <20201120072116.818090-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 016/162] avcodec/clearvideo: Avoid code duplication when initializing VLCs 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: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Signed-off-by: Andreas Rheinhardt --- libavcodec/clearvideo.c | 201 +++++++----------------------------- libavcodec/clearvideodata.h | 104 ++++++++++--------- 2 files changed, 89 insertions(+), 216 deletions(-) diff --git a/libavcodec/clearvideo.c b/libavcodec/clearvideo.c index ef09b137c4..f1dcb03f0e 100644 --- a/libavcodec/clearvideo.c +++ b/libavcodec/clearvideo.c @@ -74,7 +74,7 @@ typedef struct CLVContext { int tile_size; int tile_shift; VLC dc_vlc, ac_vlc; - LevelCodes ylev[4], ulev[3], vlev[3]; + LevelCodes lev[4 + 3 + 3]; // 0..3: Y, 4..6: U, 7..9: V int luma_dc_quant, chroma_dc_quant, ac_quant; DECLARE_ALIGNED(16, int16_t, block)[64]; int top_dc[3], left_dc[4]; @@ -594,7 +594,7 @@ static int clv_decode_frame(AVCodecContext *avctx, void *data, TileInfo *tile; MV mv, cmv; - tile = decode_tile_info(&c->gb, c->ylev, 0); + tile = decode_tile_info(&c->gb, &c->lev[0], 0); // Y if (!tile) return AVERROR(ENOMEM); mv = mvi_predict(&c->mvi, i, j, tile->mv); @@ -609,14 +609,14 @@ static int clv_decode_frame(AVCodecContext *avctx, void *data, cmv.x /= 2; cmv.y /= 2; av_freep(&tile); - tile = decode_tile_info(&c->gb, c->ulev, 0); + tile = decode_tile_info(&c->gb, &c->lev[4], 0); // U if (!tile) return AVERROR(ENOMEM); ret = restore_tree(avctx, c->pic, c->prev, 1, x, y, size, tile, cmv); if (ret < 0) mb_ret = ret; av_freep(&tile); - tile = decode_tile_info(&c->gb, c->vlev, 0); + tile = decode_tile_info(&c->gb, &c->lev[7], 0); // V if (!tile) return AVERROR(ENOMEM); ret = restore_tree(avctx, c->pic, c->prev, 2, x, y, size, tile, cmv); @@ -704,162 +704,39 @@ static av_cold int clv_decode_init(AVCodecContext *avctx) return ret; } - ret = ff_init_vlc_from_lengths(&c->ylev[0].flags_cb, 9, FF_ARRAY_ELEMS(clv_flagsy_0_bits), - clv_flagsy_0_bits, 1, - clv_flagsy_0_syms, 1, 1, 0, 0, avctx); - if (ret) - return ret; - - ret = ff_init_vlc_from_lengths(&c->ylev[1].flags_cb, 9, FF_ARRAY_ELEMS(clv_flagsy_1_bits), - clv_flagsy_1_bits, 1, - clv_flagsy_1_syms, 1, 1, 0, 0, avctx); - if (ret) - return ret; - - ret = ff_init_vlc_from_lengths(&c->ylev[2].flags_cb, 9, FF_ARRAY_ELEMS(clv_flagsy_2_bits), - clv_flagsy_2_bits, 1, - clv_flagsy_2_syms, 1, 1, 0, 0, avctx); - if (ret) - return ret; - - ret = ff_init_vlc_from_lengths(&c->ulev[0].flags_cb, 9, FF_ARRAY_ELEMS(clv_flagsu_0_bits), - clv_flagsu_0_bits, 1, - clv_flagsu_0_syms, 1, 1, 0, 0, avctx); - if (ret) - return ret; - - ret = ff_init_vlc_from_lengths(&c->ulev[1].flags_cb, 9, FF_ARRAY_ELEMS(clv_flagsu_1_bits), - clv_flagsu_1_bits, 1, - clv_flagsu_1_syms, 1, 1, 0, 0, avctx); - if (ret) - return ret; - - ret = ff_init_vlc_from_lengths(&c->vlev[0].flags_cb, 9, FF_ARRAY_ELEMS(clv_flagsv_0_bits), - clv_flagsv_0_bits, 1, - clv_flagsv_0_syms, 1, 1, 0, 0, avctx); - if (ret) - return ret; - - ret = ff_init_vlc_from_lengths(&c->vlev[1].flags_cb, 9, FF_ARRAY_ELEMS(clv_flagsv_1_bits), - clv_flagsv_1_bits, 1, - clv_flagsv_1_syms, 1, 1, 0, 0, avctx); - if (ret) - return ret; - - ret = ff_init_vlc_from_lengths(&c->ylev[0].mv_cb, 9, FF_ARRAY_ELEMS(clv_mvy_0_bits), - clv_mvy_0_bits, 1, - clv_mvy_0_syms, 2, 2, 0, 0, avctx); - if (ret) - return ret; - - ret = ff_init_vlc_from_lengths(&c->ylev[1].mv_cb, 9, FF_ARRAY_ELEMS(clv_mvy_1_bits), - clv_mvy_1_bits, 1, - clv_mvy_1_syms, 2, 2, 0, 0, avctx); - if (ret) - return ret; - - ret = ff_init_vlc_from_lengths(&c->ylev[2].mv_cb, 9, FF_ARRAY_ELEMS(clv_mvy_2_bits), - clv_mvy_2_bits, 1, - clv_mvy_2_syms, 2, 2, 0, 0, avctx); - if (ret) - return ret; - - ret = ff_init_vlc_from_lengths(&c->ylev[3].mv_cb, 9, FF_ARRAY_ELEMS(clv_mvy_3_bits), - clv_mvy_3_bits, 1, - clv_mvy_3_syms, 2, 2, 0, 0, avctx); - if (ret) - return ret; - - ret = ff_init_vlc_from_lengths(&c->ulev[1].mv_cb, 9, FF_ARRAY_ELEMS(clv_mvu_1_bits), - clv_mvu_1_bits, 1, - clv_mvu_1_syms, 2, 2, 0, 0, avctx); - if (ret) - return ret; - - ret = ff_init_vlc_from_lengths(&c->ulev[2].mv_cb, 9, FF_ARRAY_ELEMS(clv_mvu_2_bits), - clv_mvu_2_bits, 1, - clv_mvu_2_syms, 2, 2, 0, 0, avctx); - if (ret) - return ret; - - ret = ff_init_vlc_from_lengths(&c->vlev[1].mv_cb, 9, FF_ARRAY_ELEMS(clv_mvv_1_bits), - clv_mvv_1_bits, 1, - clv_mvv_1_syms, 2, 2, 0, 0, avctx); - if (ret) - return ret; - - ret = ff_init_vlc_from_lengths(&c->vlev[2].mv_cb, 9, FF_ARRAY_ELEMS(clv_mvv_2_bits), - clv_mvv_2_bits, 1, - clv_mvv_2_syms, 2, 2, 0, 0, avctx); - if (ret) - return ret; - - ret = ff_init_vlc_from_lengths(&c->ylev[1].bias_cb, 9, FF_ARRAY_ELEMS(clv_biasy_1_bits), - clv_biasy_1_bits, 1, - clv_biasy_1_syms, 2, 2, 0, 0, avctx); - if (ret) - return ret; - - ret = ff_init_vlc_from_lengths(&c->ylev[2].bias_cb, 9, FF_ARRAY_ELEMS(clv_biasy_2_bits), - clv_biasy_2_bits, 1, - clv_biasy_2_syms, 2, 2, 0, 0, avctx); - if (ret) - return ret; - - ret = ff_init_vlc_from_lengths(&c->ylev[3].bias_cb, 9, FF_ARRAY_ELEMS(clv_biasy_3_bits), - clv_biasy_3_bits, 1, - clv_biasy_3_syms, 2, 2, 0, 0, avctx); - if (ret) - return ret; - - ret = ff_init_vlc_from_lengths(&c->ulev[1].bias_cb, 9, FF_ARRAY_ELEMS(clv_biasu_1_bits), - clv_biasu_1_bits, 1, - clv_biasu_1_syms, 2, 2, 0, 0, avctx); - if (ret) - return ret; - - ret = ff_init_vlc_from_lengths(&c->ulev[2].bias_cb, 9, FF_ARRAY_ELEMS(clv_biasu_2_bits), - clv_biasu_2_bits, 1, - clv_biasu_2_syms, 2, 2, 0, 0, avctx); - if (ret) - return ret; - - ret = ff_init_vlc_from_lengths(&c->vlev[1].bias_cb, 9, FF_ARRAY_ELEMS(clv_biasv_1_bits), - clv_biasv_1_bits, 1, - clv_biasv_1_syms, 2, 2, 0, 0, avctx); - if (ret) - return ret; - - ret = ff_init_vlc_from_lengths(&c->vlev[2].bias_cb, 9, FF_ARRAY_ELEMS(clv_biasv_2_bits), - clv_biasv_2_bits, 1, - clv_biasv_2_syms, 2, 2, 0, 0, avctx); - if (ret) - return ret; - - c->ylev[0].mv_esc = 0x0909; - c->ylev[1].mv_esc = 0x0A0A; - c->ylev[2].mv_esc = 0x1010; - c->ylev[3].mv_esc = 0x1313; - c->ulev[1].mv_esc = 0x0808; - c->ulev[2].mv_esc = 0x0B0B; - c->vlev[1].mv_esc = 0x0808; - c->vlev[2].mv_esc = 0x0B0B; - - c->ylev[1].bias_esc = 0x100; - c->ylev[2].bias_esc = 0x100; - c->ylev[3].bias_esc = 0x100; - c->ulev[1].bias_esc = 0x100; - c->ulev[2].bias_esc = 0x100; - c->vlev[1].bias_esc = 0x100; - c->vlev[2].bias_esc = 0x100; - + for (int i = 0, j = 0;; i++) { + if (0x36F & (1 << i)) { + c->lev[i].mv_esc = clv_mv_escape[i]; + ret = ff_init_vlc_from_lengths(&c->lev[i].mv_cb, 9, clv_mv_sizes[i], + clv_mv_bits[i], 1, + clv_mv_syms[i], 2, 2, 0, 0, avctx); + if (ret < 0) + return ret; + } + if (i == FF_ARRAY_ELEMS(c->lev) - 1) + break; + if (0x1B7 & (1 << i)) { + ret = ff_init_vlc_from_lengths(&c->lev[i].flags_cb, 9, 16, + clv_flags_bits[j], 1, + clv_flags_syms[j], 1, 1, 0, 0, avctx); + if (ret < 0) + return ret; + + c->lev[i + 1].bias_esc = 0x100; + ret = ff_init_vlc_from_lengths(&c->lev[i + 1].bias_cb, 9, clv_bias_sizes[j], + clv_bias_bits[j], 1, + clv_bias_syms[j], 2, 2, 0, 0, avctx); + if (ret < 0) + return ret; + j++; + } + } return 0; } static av_cold int clv_decode_end(AVCodecContext *avctx) { CLVContext *const c = avctx->priv_data; - int i; av_frame_free(&c->prev); av_frame_free(&c->pic); @@ -868,18 +745,10 @@ static av_cold int clv_decode_end(AVCodecContext *avctx) ff_free_vlc(&c->dc_vlc); ff_free_vlc(&c->ac_vlc); - for (i = 0; i < 4; i++) { - ff_free_vlc(&c->ylev[i].mv_cb); - ff_free_vlc(&c->ylev[i].flags_cb); - ff_free_vlc(&c->ylev[i].bias_cb); - } - for (i = 0; i < 3; i++) { - ff_free_vlc(&c->ulev[i].mv_cb); - ff_free_vlc(&c->ulev[i].flags_cb); - ff_free_vlc(&c->ulev[i].bias_cb); - ff_free_vlc(&c->vlev[i].mv_cb); - ff_free_vlc(&c->vlev[i].flags_cb); - ff_free_vlc(&c->vlev[i].bias_cb); + for (int i = 0; i < FF_ARRAY_ELEMS(c->lev); i++) { + ff_free_vlc(&c->lev[i].mv_cb); + ff_free_vlc(&c->lev[i].flags_cb); + ff_free_vlc(&c->lev[i].bias_cb); } return 0; diff --git a/libavcodec/clearvideodata.h b/libavcodec/clearvideodata.h index b4893b3bf7..fa0721cb0c 100644 --- a/libavcodec/clearvideodata.h +++ b/libavcodec/clearvideodata.h @@ -90,60 +90,28 @@ static const uint8_t clv_ac_bits[NUM_AC_CODES] = { 6, 5, 5, 5, 4, 2, 3, 4, 4 }; -static const uint8_t clv_flagsy_0_bits[] = { - 2, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 6, 7, 7 +static const uint8_t clv_flags_bits[][16] = { + { 2, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 6, 7, 7 }, // Y_0 + { 2, 3, 3, 4, 4, 4, 4, 4, 4, 4, 6, 6, 6, 7, 8, 8 }, // Y_1 + { 1, 4, 4, 4, 4, 4, 4, 5, 5, 5, 6, 7, 8, 9, 10, 10 }, // Y_2 + { 1, 4, 4, 4, 4, 4, 4, 5, 5, 5, 7, 7, 7, 8, 9, 9 }, // U_0 + { 1, 4, 4, 4, 4, 4, 4, 4, 5, 6, 8, 8, 8, 9, 10, 10 }, // U_1 + { 1, 3, 4, 4, 4, 5, 5, 5, 5, 5, 6, 7, 8, 9, 10, 10 }, // V_0 + { 1, 3, 4, 4, 4, 4, 5, 5, 5, 6, 7, 8, 9, 10, 11, 11 } // V_1 }; -static const uint8_t clv_flagsy_0_syms[] = { - 15, 0, 3, 5, 12, 1, 10, 2, 4, 8, 7, 11, 14, 6, 9, 13 +static const uint8_t clv_flags_syms[][16] = { + { 15, 0, 3, 5, 12, 1, 10, 2, 4, 8, 7, 11, 14, 6, 9, 13 }, // Y_0 + { 0, 15, 3, 12, 5, 1, 4, 2, 8, 10, 11, 7, 9, 6, 13, 14 }, // Y_1 + { 0, 3, 12, 4, 2, 1, 8, 5, 7, 10, 9, 6, 11, 13, 14, 15 }, // Y_2 + { 0, 15, 3, 12, 1, 10, 2, 5, 4, 8, 11, 7, 14, 13, 9, 6 }, // U_0 + { 0, 2, 12, 3, 4, 1, 8, 5, 10, 7, 9, 6, 11, 14, 13, 15 }, // U_1 + { 0, 15, 1, 12, 3, 10, 2, 5, 8, 4, 11, 14, 6, 9, 7, 13 }, // V_0 + { 0, 8, 3, 4, 2, 1, 12, 5, 10, 7, 9, 6, 14, 11, 13, 15 } // V_1 }; -static const uint8_t clv_flagsy_1_bits[] = { - 2, 3, 3, 4, 4, 4, 4, 4, 4, 4, 6, 6, 6, 7, 8, 8 -}; - -static const uint8_t clv_flagsy_1_syms[] = { - 0, 15, 3, 12, 5, 1, 4, 2, 8, 10, 11, 7, 9, 6, 13, 14 -}; - -static const uint8_t clv_flagsy_2_bits[] = { - 1, 4, 4, 4, 4, 4, 4, 5, 5, 5, 6, 7, 8, 9, 10, 10 -}; - -static const uint8_t clv_flagsy_2_syms[] = { - 0, 3, 12, 4, 2, 1, 8, 5, 7, 10, 9, 6, 11, 13, 14, 15 -}; - -static const uint8_t clv_flagsu_0_bits[] = { - 1, 4, 4, 4, 4, 4, 4, 5, 5, 5, 7, 7, 7, 8, 9, 9 -}; - -static const uint8_t clv_flagsu_0_syms[] = { - 0, 15, 3, 12, 1, 10, 2, 5, 4, 8, 11, 7, 14, 13, 9, 6 -}; - -static const uint8_t clv_flagsu_1_bits[] = { - 1, 4, 4, 4, 4, 4, 4, 4, 5, 6, 8, 8, 8, 9, 10, 10 -}; - -static const uint8_t clv_flagsu_1_syms[] = { - 0, 2, 12, 3, 4, 1, 8, 5, 10, 7, 9, 6, 11, 14, 13, 15 -}; - -static const uint8_t clv_flagsv_0_bits[] = { - 1, 3, 4, 4, 4, 5, 5, 5, 5, 5, 6, 7, 8, 9, 10, 10 -}; - -static const uint8_t clv_flagsv_0_syms[] = { - 0, 15, 1, 12, 3, 10, 2, 5, 8, 4, 11, 14, 6, 9, 7, 13 -}; - -static const uint8_t clv_flagsv_1_bits[] = { - 1, 3, 4, 4, 4, 4, 5, 5, 5, 6, 7, 8, 9, 10, 11, 11 -}; - -static const uint8_t clv_flagsv_1_syms[] = { - 0, 8, 3, 4, 2, 1, 12, 5, 10, 7, 9, 6, 14, 11, 13, 15 +static const uint16_t clv_mv_escape[] = { + 0x0909, 0x0A0A, 0x1010, 0x1313, 0, 0x0808, 0x0B0B, 0, 0x0808, 0x0B0B }; static const uint8_t clv_mvy_0_bits[] = { @@ -1034,4 +1002,40 @@ static const uint16_t clv_biasv_2_syms[] = { 0x0048, 0xFFB4, 0x004C, 0x0100, 0xFFB0, 0x0054, 0xFFAC, 0x0050 }; +static const uint8_t *const clv_bias_bits[] = { + clv_biasy_1_bits, clv_biasy_2_bits, clv_biasy_3_bits, + clv_biasu_1_bits, clv_biasu_2_bits, + clv_biasv_1_bits, clv_biasv_2_bits +}; + +static const uint16_t *const clv_bias_syms[] = { + clv_biasy_1_syms, clv_biasy_2_syms, clv_biasy_3_syms, + clv_biasu_1_syms, clv_biasu_2_syms, + clv_biasv_1_syms, clv_biasv_2_syms +}; + +static const int clv_bias_sizes[] = { + FF_ARRAY_ELEMS(clv_biasy_1_bits), FF_ARRAY_ELEMS(clv_biasy_2_bits), FF_ARRAY_ELEMS(clv_biasy_3_bits), + FF_ARRAY_ELEMS(clv_biasu_1_bits), FF_ARRAY_ELEMS(clv_biasu_2_bits), + FF_ARRAY_ELEMS(clv_biasv_1_bits), FF_ARRAY_ELEMS(clv_biasv_2_bits) +}; + +static const uint8_t *const clv_mv_bits[] = { + clv_mvy_0_bits, clv_mvy_1_bits, clv_mvy_2_bits, clv_mvy_3_bits, + NULL, clv_mvu_1_bits, clv_mvu_2_bits, + NULL, clv_mvv_1_bits, clv_mvv_2_bits +}; + +static const uint16_t *const clv_mv_syms[] = { + clv_mvy_0_syms, clv_mvy_1_syms, clv_mvy_2_syms, clv_mvy_3_syms, + NULL, clv_mvu_1_syms, clv_mvu_2_syms, + NULL, clv_mvv_1_syms, clv_mvv_2_syms +}; + +static const int clv_mv_sizes[] = { + FF_ARRAY_ELEMS(clv_mvy_0_bits), FF_ARRAY_ELEMS(clv_mvy_1_bits), FF_ARRAY_ELEMS(clv_mvy_2_bits), FF_ARRAY_ELEMS(clv_mvy_3_bits), + 0, FF_ARRAY_ELEMS(clv_mvu_1_bits), FF_ARRAY_ELEMS(clv_mvu_2_bits), + 0, FF_ARRAY_ELEMS(clv_mvv_1_bits), FF_ARRAY_ELEMS(clv_mvv_2_bits) +}; + #endif /* AVCODEC_CLEARVIDEODATA_H */