Hello community, here is the log from the commit of package libva for openSUSE:Factory checked in at 2020-04-14 15:08:51 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libva (Old) and /work/SRC/openSUSE:Factory/.libva.new.2738 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libva" Tue Apr 14 15:08:51 2020 rev:53 rq:792964 version:2.7.0 Changes: -------- --- /work/SRC/openSUSE:Factory/libva/libva-gl.changes 2020-03-16 10:16:56.623553153 +0100 +++ /work/SRC/openSUSE:Factory/.libva.new.2738/libva-gl.changes 2020-04-14 16:23:34.447703952 +0200 @@ -1,0 +2,15 @@ +Fri Apr 10 15:14:22 UTC 2020 - Stefan Dirsch <sndir...@suse.com> + +- Update to version 2.7.0 + * trace: av1 decode buffers trace + * trace: Add HEVC REXT and SCC trace for decoding. + * Add av1 decode interfaces + * Fix crashes on system without supported hardware by PR #369. + * Add 2 FourCC for 10bit RGB(without Alpha) format: X2R10G10B10 + and X2B10G10R10. + * Fix android build issue #365 and remove some trailing + whitespace + * Adjust call sequence to ensure authenticate operation is + executed to fix #355 + +------------------------------------------------------------------- libva.changes: same change Old: ---- libva-2.6.1.tar.bz2 libva-2.6.1.tar.bz2.sha1sum New: ---- libva-2.7.0.tar.bz2 libva-2.7.0.tar.bz2.sha1sum ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libva-gl.spec ++++++ --- /var/tmp/diff_new_pack.1Iyg98/_old 2020-04-14 16:23:34.971704434 +0200 +++ /var/tmp/diff_new_pack.1Iyg98/_new 2020-04-14 16:23:34.971704434 +0200 @@ -23,7 +23,7 @@ Name: libva-gl %define _name libva -Version: 2.6.1 +Version: 2.7.0 Release: 0 Summary: Video Acceleration (VA) API License: MIT ++++++ libva.spec ++++++ --- /var/tmp/diff_new_pack.1Iyg98/_old 2020-04-14 16:23:34.987704449 +0200 +++ /var/tmp/diff_new_pack.1Iyg98/_new 2020-04-14 16:23:34.991704452 +0200 @@ -23,7 +23,7 @@ Name: libva %define _name libva -Version: 2.6.1 +Version: 2.7.0 Release: 0 Summary: Video Acceleration (VA) API License: MIT ++++++ libva-2.6.1.tar.bz2 -> libva-2.7.0.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libva-2.6.1/NEWS new/libva-2.7.0/NEWS --- old/libva-2.6.1/NEWS 2019-12-25 16:46:11.000000000 +0100 +++ new/libva-2.7.0/NEWS 2020-03-27 15:22:08.000000000 +0100 @@ -1,5 +1,14 @@ -libva NEWS -- summary of user visible changes. 2019-12-25 -Copyright (C) 2009-2019 Intel Corporation +libva NEWS -- summary of user visible changes. 2020-03-26 +Copyright (C) 2009-2020 Intel Corporation + +version 2.7.0 - 26.Mar.2020 +* trace: av1 decode buffers trace +* trace: Add HEVC REXT and SCC trace for decoding. +* Add av1 decode interfaces +* Fix crashes on system without supported hardware by PR #369. +* Add 2 FourCC for 10bit RGB(without Alpha) format: X2R10G10B10 and X2B10G10R10. +* Fix android build issue #365 and remove some trailing whitespace +* Adjust call sequence to ensure authenticate operation is executed to fix #355 version 2.6.0 - 15.Dec.2019 * enable the mutiple driver selection logic and enable it for DRM. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libva-2.6.1/configure new/libva-2.7.0/configure --- old/libva-2.6.1/configure 2020-01-17 12:30:10.000000000 +0100 +++ new/libva-2.7.0/configure 2020-04-09 17:48:09.000000000 +0200 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for libva 2.6.1. +# Generated by GNU Autoconf 2.69 for libva 2.7.0. # # Report bugs to <https://github.com/intel/libva/issues/new>. # @@ -590,8 +590,8 @@ # Identity of this package. PACKAGE_NAME='libva' PACKAGE_TARNAME='libva' -PACKAGE_VERSION='2.6.1' -PACKAGE_STRING='libva 2.6.1' +PACKAGE_VERSION='2.7.0' +PACKAGE_STRING='libva 2.7.0' PACKAGE_BUGREPORT='https://github.com/intel/libva/issues/new' PACKAGE_URL='https://github.com/intel/libva' @@ -1394,7 +1394,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures libva 2.6.1 to adapt to many kinds of systems. +\`configure' configures libva 2.7.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1465,7 +1465,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of libva 2.6.1:";; + short | recursive ) echo "Configuration of libva 2.7.0:";; esac cat <<\_ACEOF @@ -1603,7 +1603,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -libva configure 2.6.1 +libva configure 2.7.0 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2093,7 +2093,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by libva $as_me 2.6.1, which was +It was created by libva $as_me 2.7.0, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2959,7 +2959,7 @@ # Define the identity of the package. PACKAGE='libva' - VERSION='2.6.1' + VERSION='2.7.0' cat >>confdefs.h <<_ACEOF @@ -3099,26 +3099,26 @@ VA_API_MAJOR_VERSION=1 -VA_API_MINOR_VERSION=6 +VA_API_MINOR_VERSION=7 VA_API_MICRO_VERSION=0 -VA_API_VERSION=1.6.0 +VA_API_VERSION=1.7.0 LIBVA_MAJOR_VERSION=2 -LIBVA_MINOR_VERSION=6 -LIBVA_MICRO_VERSION=1 -LIBVA_VERSION=2.6.1 +LIBVA_MINOR_VERSION=7 +LIBVA_MICRO_VERSION=0 +LIBVA_VERSION=2.7.0 -LIBVA_LT_CURRENT=602 +LIBVA_LT_CURRENT=702 LIBVA_LT_REV=0 -LIBVA_LT_AGE=600 +LIBVA_LT_AGE=700 LIBVA_LT_VERSION="$LIBVA_LT_CURRENT:$LIBVA_LT_REV:$LIBVA_LT_AGE" LIBVA_LT_LDFLAGS="-version-info $LIBVA_LT_VERSION" @@ -18522,7 +18522,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by libva $as_me 2.6.1, which was +This file was extended by libva $as_me 2.7.0, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -18589,7 +18589,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -libva config.status 2.6.1 +libva config.status 2.7.0 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libva-2.6.1/configure.ac new/libva-2.7.0/configure.ac --- old/libva-2.6.1/configure.ac 2020-01-17 12:12:33.000000000 +0100 +++ new/libva-2.7.0/configure.ac 2020-04-09 17:43:02.000000000 +0200 @@ -27,7 +27,7 @@ # - reset micro version to zero when minor version is incremented # - reset minor version to zero when major version is incremented m4_define([va_api_major_version], [1]) -m4_define([va_api_minor_version], [6]) +m4_define([va_api_minor_version], [7]) m4_define([va_api_micro_version], [0]) m4_define([va_api_version], @@ -42,7 +42,7 @@ # - reset micro version to zero when VA-API major or minor version is changed m4_define([libva_major_version], [m4_eval(va_api_major_version + 1)]) m4_define([libva_minor_version], [m4_eval(va_api_minor_version)]) -m4_define([libva_micro_version], [1]) +m4_define([libva_micro_version], [0]) m4_define([libva_pre_version], [0]) m4_define([libva_version], diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libva-2.6.1/meson.build new/libva-2.7.0/meson.build --- old/libva-2.6.1/meson.build 2020-01-17 12:12:50.000000000 +0100 +++ new/libva-2.7.0/meson.build 2020-04-09 17:43:02.000000000 +0200 @@ -7,7 +7,7 @@ # - reset micro version to zero when VA-API major or minor version is changed project( 'libva', 'c', - version : '2.6.1', + version : '2.7.0', meson_version : '>= 0.37.0', default_options : [ 'warning_level=1', 'buildtype=debugoptimized' ]) @@ -19,7 +19,7 @@ # - reset micro version to zero when minor version is incremented # - reset minor version to zero when major version is incremented va_api_major_version = 1 -va_api_minor_version = 6 +va_api_minor_version = 7 va_api_micro_version = 0 va_api_version = '@0@.@1@.@2@'.format(va_api_major_version, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libva-2.6.1/va/Makefile.am new/libva-2.7.0/va/Makefile.am --- old/libva-2.6.1/va/Makefile.am 2019-12-17 14:46:07.000000000 +0100 +++ new/libva-2.7.0/va/Makefile.am 2020-03-16 16:42:07.000000000 +0100 @@ -42,6 +42,7 @@ va_backend.h \ va_backend_vpp.h \ va_compat.h \ + va_dec_av1.h \ va_dec_hevc.h \ va_dec_jpeg.h \ va_dec_vp8.h \ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libva-2.6.1/va/Makefile.in new/libva-2.7.0/va/Makefile.in --- old/libva-2.6.1/va/Makefile.in 2020-01-17 12:30:10.000000000 +0100 +++ new/libva-2.7.0/va/Makefile.in 2020-04-09 17:48:08.000000000 +0200 @@ -255,11 +255,11 @@ *) (install-info --version) >/dev/null 2>&1;; \ esac am__libvainclude_HEADERS_DIST = va.h va_backend.h va_backend_vpp.h \ - va_compat.h va_dec_hevc.h va_dec_jpeg.h va_dec_vp8.h \ - va_dec_vp9.h va_drmcommon.h va_egl.h va_enc_hevc.h \ - va_enc_h264.h va_enc_jpeg.h va_enc_vp8.h va_fei.h \ - va_fei_h264.h va_enc_mpeg2.h va_fei_hevc.h va_enc_vp9.h \ - va_str.h va_tpi.h va_version.h va_vpp.h va_x11.h + va_compat.h va_dec_av1.h va_dec_hevc.h va_dec_jpeg.h \ + va_dec_vp8.h va_dec_vp9.h va_drmcommon.h va_egl.h \ + va_enc_hevc.h va_enc_h264.h va_enc_jpeg.h va_enc_vp8.h \ + va_fei.h va_fei_h264.h va_enc_mpeg2.h va_fei_hevc.h \ + va_enc_vp9.h va_str.h va_tpi.h va_version.h va_vpp.h va_x11.h HEADERS = $(libvainclude_HEADERS) $(noinst_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive @@ -483,11 +483,12 @@ $(NULL) libva_source_h = va.h va_backend.h va_backend_vpp.h va_compat.h \ - va_dec_hevc.h va_dec_jpeg.h va_dec_vp8.h va_dec_vp9.h \ - va_drmcommon.h va_egl.h va_enc_hevc.h va_enc_h264.h \ - va_enc_jpeg.h va_enc_vp8.h va_fei.h va_fei_h264.h \ - va_enc_mpeg2.h va_fei_hevc.h va_enc_vp9.h va_str.h va_tpi.h \ - va_version.h va_vpp.h $(NULL) $(am__append_6) + va_dec_av1.h va_dec_hevc.h va_dec_jpeg.h va_dec_vp8.h \ + va_dec_vp9.h va_drmcommon.h va_egl.h va_enc_hevc.h \ + va_enc_h264.h va_enc_jpeg.h va_enc_vp8.h va_fei.h \ + va_fei_h264.h va_enc_mpeg2.h va_fei_hevc.h va_enc_vp9.h \ + va_str.h va_tpi.h va_version.h va_vpp.h $(NULL) \ + $(am__append_6) libva_source_h_priv = \ sysdeps.h \ va_fool.h \ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libva-2.6.1/va/drm/va_drm_utils.c new/libva-2.7.0/va/drm/va_drm_utils.c --- old/libva-2.6.1/va/drm/va_drm_utils.c 2019-12-25 16:38:29.000000000 +0100 +++ new/libva-2.7.0/va/drm/va_drm_utils.c 2020-03-25 23:08:39.000000000 +0100 @@ -54,7 +54,7 @@ { struct drm_state * const drm_state = ctx->drm_state; drmVersionPtr drm_version; - int num_of_candidate = 0; + int count = 0; const struct driver_name_map *m = NULL; if (!drm_state || drm_state->fd < 0) return VA_STATUS_ERROR_INVALID_DISPLAY; @@ -64,12 +64,12 @@ for (m = g_driver_name_map; m->key != NULL; m++) { if (drm_version->name_len >= m->key_len && strncmp(drm_version->name, m->key, m->key_len) == 0) { - num_of_candidate ++; + count ++; } } drmFreeVersion(drm_version); - *num_candidates = num_of_candidate; - return VA_STATUS_SUCCESS; + *num_candidates = count; + return count ? VA_STATUS_SUCCESS : VA_STATUS_ERROR_UNKNOWN; } /* Returns the VA driver name for the active display */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libva-2.6.1/va/meson.build new/libva-2.7.0/va/meson.build --- old/libva-2.6.1/va/meson.build 2019-11-15 10:51:03.000000000 +0100 +++ new/libva-2.7.0/va/meson.build 2020-03-16 16:42:07.000000000 +0100 @@ -26,6 +26,7 @@ 'va_dec_jpeg.h', 'va_dec_vp8.h', 'va_dec_vp9.h', + 'va_dec_av1.h', 'va_drmcommon.h', 'va_egl.h', 'va_enc_hevc.h', diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libva-2.6.1/va/va.c new/libva-2.7.0/va/va.c --- old/libva-2.6.1/va/va.c 2020-01-17 12:11:32.000000000 +0100 +++ new/libva-2.7.0/va/va.c 2020-04-09 17:43:02.000000000 +0200 @@ -378,7 +378,7 @@ status = pDisplayContext->vaGetDriverName(pDisplayContext, driver_name); else status = VA_STATUS_ERROR_INVALID_PARAMETER; - } + } driver_name_env = getenv("LIBVA_DRIVER_NAME"); /*if user set driver name by vaSetDriverName */ if (ctx->override_driver_name){ @@ -398,7 +398,7 @@ *driver_name = strdup(driver_name_env); va_infoMessage(dpy, "User environment variable requested driver '%s'\n", *driver_name); return VA_STATUS_SUCCESS; - } + } return status; } @@ -470,6 +470,7 @@ int minor; } compatible_versions[] = { { VA_MAJOR_VERSION, VA_MINOR_VERSION }, + { VA_MAJOR_VERSION, 6 }, { VA_MAJOR_VERSION, 5 }, { VA_MAJOR_VERSION, 4 }, { VA_MAJOR_VERSION, 3 }, @@ -744,7 +745,7 @@ if (vaStatus == VA_STATUS_SUCCESS) { break; } - + } *major_version = VA_MAJOR_VERSION; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libva-2.6.1/va/va.h new/libva-2.7.0/va/va.h --- old/libva-2.6.1/va/va.h 2019-12-17 14:46:07.000000000 +0100 +++ new/libva-2.7.0/va/va.h 2020-03-25 23:08:39.000000000 +0100 @@ -119,11 +119,12 @@ * - \ref api_enc_mpeg2 * - \ref api_enc_vp8 * - \ref api_enc_vp9 - * - Decoder (HEVC, JPEG, VP8, VP9) + * - Decoder (HEVC, JPEG, VP8, VP9, AV1) * - \ref api_dec_hevc * - \ref api_dec_jpeg * - \ref api_dec_vp8 * - \ref api_dec_vp9 + * - \ref api_dec_av1 * - \ref api_vpp * - FEI (H264, HEVC) * - \ref api_fei @@ -392,7 +393,9 @@ VAProfileHEVCMain444_12 = 28, VAProfileHEVCSccMain = 29, VAProfileHEVCSccMain10 = 30, - VAProfileHEVCSccMain444 = 31 + VAProfileHEVCSccMain444 = 31, + VAProfileAV1Profile0 = 32, + VAProfileAV1Profile1 = 33 } VAProfile; /** @@ -4005,6 +4008,14 @@ * 10-bit Pixel BGR formats. */ #define VA_FOURCC_A2B10G10R10 0x30334241 /* VA_FOURCC('A','B','3','0') */ +/** + * 10-bit Pixel RGB formats without alpha. + */ +#define VA_FOURCC_X2R10G10B10 0x30335258 /* VA_FOURCC('X','R','3','0') */ +/** + * 10-bit Pixel BGR formats without alpha. + */ +#define VA_FOURCC_X2B10G10R10 0x30334258 /* VA_FOURCC('X','B','3','0') */ /** Y8: 8-bit greyscale. * @@ -4616,6 +4627,7 @@ #include <va/va_dec_jpeg.h> #include <va/va_dec_vp8.h> #include <va/va_dec_vp9.h> +#include <va/va_dec_av1.h> #include <va/va_enc_hevc.h> #include <va/va_fei_hevc.h> #include <va/va_enc_h264.h> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libva-2.6.1/va/va_dec_av1.h new/libva-2.7.0/va/va_dec_av1.h --- old/libva-2.6.1/va/va_dec_av1.h 1970-01-01 01:00:00.000000000 +0100 +++ new/libva-2.7.0/va/va_dec_av1.h 2020-03-25 23:08:39.000000000 +0100 @@ -0,0 +1,660 @@ +/* + * Copyright (c) 2019 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/** + * \file va_dec_av1.h + * \brief The AV1 decoding API + * + * This file contains the \ref api_dec_av1 "AV1 decoding API". + */ + +#ifndef VA_DEC_AV1_H +#define VA_DEC_AV1_H + +#include <stdint.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief AV1 Decoding Picture Parameter Buffer Structure + * + * This structure conveys picture level parameters. + * App should send a surface with this data structure down to VAAPI once + * per frame. + * + */ + +/** \brief Segmentation Information + */ +typedef struct _VASegmentationStructAV1 { + union { + struct { + /** Indicates whether segmentation map related syntax elements + * are present or not for current frame. If equal to 0, + * the segmentation map related syntax elements are + * not present for the current frame and the control flags of + * segmentation map related tables feature_data[][], and + * feature_mask[] are not valid and shall be ignored by accelerator. + */ + uint32_t enabled : 1; + /** Value 1 indicates that the segmentation map are updated + * during the decoding of this frame. + * Value 0 means that the segmentation map from the previous + * frame is used. + */ + uint32_t update_map : 1; + /** Value 1 indicates that the updates to the segmentation map + * are coded relative to the existing segmentation map. + * Value 0 indicates that the new segmentation map is coded + * without reference to the existing segmentation map. + */ + uint32_t temporal_update : 1; + /** Value 1 indicates that new parameters are about to be + * specified for each segment. + * Value 0 indicates that the segmentation parameters + * should keep their existing values. + */ + uint32_t update_data : 1; + + /** \brief Reserved bytes for future use, must be zero */ + uint32_t reserved : 28; + } bits; + uint32_t value; + } segment_info_fields; + + /** \brief Segmentation parameters for current frame. + * feature_data[segment_id][feature_id] + * where segment_id has value range [0..7] indicating the segment id. + * and feature_id is defined as + typedef enum { + SEG_LVL_ALT_Q, // Use alternate Quantizer .... + SEG_LVL_ALT_LF_Y_V, // Use alternate loop filter value on y plane vertical + SEG_LVL_ALT_LF_Y_H, // Use alternate loop filter value on y plane horizontal + SEG_LVL_ALT_LF_U, // Use alternate loop filter value on u plane + SEG_LVL_ALT_LF_V, // Use alternate loop filter value on v plane + SEG_LVL_REF_FRAME, // Optional Segment reference frame + SEG_LVL_SKIP, // Optional Segment (0,0) + skip mode + SEG_LVL_GLOBALMV, + SEG_LVL_MAX + } SEG_LVL_FEATURES; + * feature_data[][] is equivalent to variable FeatureData[][] in spec, + * which is after clip3() operation. + * Clip3(x, y, z) = (z < x)? x : ((z > y)? y : z); + * The limit is defined in Segmentation_Feature_Max[ SEG_LVL_MAX ] = { + * 255, MAX_LOOP_FILTER, MAX_LOOP_FILTER, MAX_LOOP_FILTER, MAX_LOOP_FILTER, 7, 0, 0 } + */ + int16_t feature_data[8][8]; + + /** \brief indicates if a feature is enabled or not. + * Each bit field itself is the feature_id. Index is segment_id. + * feature_mask[segment_id] & (1 << feature_id) equal to 1 specify that the feature of + * feature_id for segment of segment_id is enabled, otherwise disabled. + */ + uint8_t feature_mask[8]; + + /** \brief Reserved bytes for future use, must be zero */ + uint32_t va_reserved[VA_PADDING_LOW]; + +} VASegmentationStructAV1; + +/** \brief Film Grain Information + */ +typedef struct _VAFilmGrainStructAV1 { + union { + struct { + /** \brief Specify whether or not film grain is applied on current frame. + * If set to 0, all the rest parameters should be set to zero + * and ignored. + */ + uint32_t apply_grain : 1; + uint32_t chroma_scaling_from_luma : 1; + uint32_t grain_scaling_minus_8 : 2; + uint32_t ar_coeff_lag : 2; + uint32_t ar_coeff_shift_minus_6 : 2; + uint32_t grain_scale_shift : 2; + uint32_t overlap_flag : 1; + uint32_t clip_to_restricted_range : 1; + /** \brief Reserved bytes for future use, must be zero */ + uint32_t reserved : 20; + } bits; + uint32_t value; + } film_grain_info_fields; + + uint16_t grain_seed; + /* value range [0..14] */ + uint8_t num_y_points; + uint8_t point_y_value[14]; + uint8_t point_y_scaling[14]; + /* value range [0..10] */ + uint8_t num_cb_points; + uint8_t point_cb_value[10]; + uint8_t point_cb_scaling[10]; + /* value range [0..10] */ + uint8_t num_cr_points; + uint8_t point_cr_value[10]; + uint8_t point_cr_scaling[10]; + /* value range [-128..127] */ + int8_t ar_coeffs_y[24]; + int8_t ar_coeffs_cb[25]; + int8_t ar_coeffs_cr[25]; + uint8_t cb_mult; + uint8_t cb_luma_mult; + uint16_t cb_offset; + uint8_t cr_mult; + uint8_t cr_luma_mult; + uint16_t cr_offset; + + /** \brief Reserved bytes for future use, must be zero */ + uint32_t va_reserved[VA_PADDING_LOW]; + +} VAFilmGrainStructAV1; + +typedef enum { + /** identity transformation, 0-parameter */ + VAAV1TransformationIdentity = 0, + /** translational motion, 2-parameter */ + VAAV1TransformationTranslation = 1, + /** simplified affine with rotation + zoom only, 4-parameter */ + VAAV1TransformationRotzoom = 2, + /** affine, 6-parameter */ + VAAV1TransformationAffine = 3, + /** transformation count */ + VAAV1TransformationCount +} VAAV1TransformationType; + +typedef struct _VAWarpedMotionParamsAV1{ + + /** \brief Specify the type of warped motion */ + VAAV1TransformationType wmtype; + + /** \brief Specify warp motion parameters + * wm.wmmat[] corresponds to gm_params[][] in spec. + * Details in AV1 spec section 5.9.24 or refer to libaom code + * https://aomedia.googlesource.com/aom/+/refs/heads/master/av1/decoder/decodeframe.c + */ + int32_t wmmat[8]; + + /* valid or invalid on affine set */ + uint8_t invalid; + + /** \brief Reserved bytes for future use, must be zero */ + uint32_t va_reserved[VA_PADDING_LOW]; + +} VAWarpedMotionParamsAV1; + +/** + * \brief AV1 Decoding Picture Parameter Buffer Structure + * + * This structure conveys picture level parameters and should be sent once + * per frame. + * + */ +typedef struct _VADecPictureParameterBufferAV1 +{ + /**@{*/ + + /** \brief sequence level information + */ + + /** \brief AV1 bit stream profile + */ + uint8_t profile; + + uint8_t order_hint_bits_minus_1; + + /** \brief bit depth index + * value range [0..2] + * 0 - bit depth 8; + * 1 - bit depth 10; + * 2 - bit depth 12; + */ + uint8_t bit_depth_idx; + + /** \brief corresponds to AV1 spec variable of the same name. */ + uint8_t matrix_coefficients; + + union { + struct { + uint32_t still_picture : 1; + uint32_t use_128x128_superblock : 1; + uint32_t enable_filter_intra : 1; + uint32_t enable_intra_edge_filter : 1; + + /** read_compound_tools */ + uint32_t enable_interintra_compound : 1; + uint32_t enable_masked_compound : 1; + + uint32_t enable_dual_filter : 1; + uint32_t enable_order_hint : 1; + uint32_t enable_jnt_comp : 1; + uint32_t enable_cdef : 1; + uint32_t mono_chrome : 1; + uint32_t color_range : 1; + uint32_t subsampling_x : 1; + uint32_t subsampling_y : 1; + uint32_t chroma_sample_position : 1; + uint32_t film_grain_params_present : 1; + /** \brief Reserved bytes for future use, must be zero */ + uint32_t reserved : 16; + } fields; + uint32_t value; + } seq_info_fields; + + /** \brief Picture level information + */ + + /** \brief buffer description of decoded current picture + */ + VASurfaceID current_frame; + + /** \brief display buffer of current picture + * Used for film grain applied decoded picture. + * Valid only when apply_grain equals 1. + */ + VASurfaceID current_display_picture; + + /** \brief number of anchor frames for large scale tile + * This parameter gives the number of entries of anchor_frames_list[]. + * Value range [0..128]. + */ + uint8_t anchor_frames_num; + + /** \brief anchor frame list for large scale tile + * For large scale tile applications, the anchor frames could come from + * previously decoded frames in current sequence (aka. internal), or + * from external sources. + * For external anchor frames, application should call API + * vaCreateBuffer() to generate frame buffers and populate them with + * pixel frames. And this process may happen multiple times. + * The array anchor_frames_list[] is used to register all the available + * anchor frames from both external and internal, up to the current + * frame instance. If a previously registerred anchor frame is no longer + * needed, it should be removed from the list. But it does not prevent + * applications from relacing the frame buffer with new anchor frames. + * Please note that the internal anchor frames may not still be present + * in the current DPB buffer. But if it is in the anchor_frames_list[], + * it should not be replaced with other frames or removed from memory + * until it is not shown in the list. + * This number of entries of the list is given by parameter anchor_frames_num. + */ + VASurfaceID *anchor_frames_list; + + /** \brief Picture resolution minus 1 + * Picture original resolution. If SuperRes is enabled, + * this is the upscaled resolution. + * The value may not be multiple of 8. + * value range [0..65535] + */ + uint16_t frame_width_minus1; + uint16_t frame_height_minus1; + + /** \brief Output frame buffer size in unit of tiles + * Valid only when large_scale_tile equals 1. + * value range [0..65535] + */ + uint16_t output_frame_width_in_tiles_minus_1; + uint16_t output_frame_height_in_tiles_minus_1; + + /** \brief Surface indices of reference frames in DPB. + * + * Contains a list of uncompressed frame buffer surface indices as references. + * Application needs to make sure all the entries point to valid frames + * except for the key frame by checking ref_frame_id[]. If missing frame + * is identified, application may choose to perform error recovery by + * pointing problematic index to an alternative frame buffer. + * Driver is not responsible to validate reference frames' id. + */ + VASurfaceID ref_frame_map[8]; + + /** \brief Reference frame indices. + * + * Contains a list of indices into ref_frame_map[8]. + * It specifies the reference frame correspondence. + * The indices of the array are defined as [LAST_FRAME – LAST_FRAME, + * LAST2_FRAME – LAST_FRAME, …, ALTREF2_FRAME – LAST_FRAME], where each + * symbol is defined as: + * enum{INTRA_FRAME = 0, LAST_FRAME, LAST2_FRAME, LAST3_FRAME, GOLDEN_FRAME, + * BWDREF_FRAME, ALTREF_FRAME}; + */ + uint8_t ref_frame_idx[7]; + + /** \brief primary reference frame index + * Index into ref_frame_idx[], specifying which reference frame contains + * propagated info that should be loaded at the start of the frame. + * When value equals PRIMARY_REF_NONE (7), it indicates there is + * no primary reference frame. + * value range [0..7] + */ + uint8_t primary_ref_frame; + + uint8_t order_hint; + + VASegmentationStructAV1 seg_info; + VAFilmGrainStructAV1 film_grain_info; + + /** \brief tile structure + * When uniform_tile_spacing_flag == 1, the value of tile_cols and + * tile_rows need to be power of 2, and width_in_sbs_minus_1[] and + * height_in_sbs_minus_1[] should be ignored, which will be generated + * by driver based on tile_cols and tile_rows. + */ + uint8_t tile_cols; + uint8_t tile_rows; + + /* specifes the width/height of a tile minus 1 in units of superblocks */ + uint16_t width_in_sbs_minus_1[63]; + uint16_t height_in_sbs_minus_1[63]; + + /** \brief number of tiles minus 1 in large scale tile list + * Same as AV1 semantic element. + * Valid only when large_scale_tiles == 1. + */ + uint16_t tile_count_minus_1; + + /* specify the tile index for context updating */ + uint16_t context_update_tile_id; + + union + { + struct + { + /** \brief flags for current picture + * same syntax and semantic as those in AV1 code + */ + + /** \brief Frame Type + * 0: KEY_FRAME; + * 1: INTER_FRAME; + * 2: INTRA_ONLY_FRAME; + * 3: SWITCH_FRAME + * For SWITCH_FRAME, application shall set error_resilient_mode = 1, + * refresh_frame_flags, etc. appropriately. And driver will convert it + * to INTER_FRAME. + */ + uint32_t frame_type : 2; + uint32_t show_frame : 1; + uint32_t showable_frame : 1; + uint32_t error_resilient_mode : 1; + uint32_t disable_cdf_update : 1; + uint32_t allow_screen_content_tools : 1; + uint32_t force_integer_mv : 1; + uint32_t allow_intrabc : 1; + uint32_t use_superres : 1; + uint32_t allow_high_precision_mv : 1; + uint32_t is_motion_mode_switchable : 1; + uint32_t use_ref_frame_mvs : 1; + /* disable_frame_end_update_cdf is coded as refresh_frame_context. */ + uint32_t disable_frame_end_update_cdf : 1; + uint32_t uniform_tile_spacing_flag : 1; + uint32_t allow_warped_motion : 1; + /** \brief indicate if current frame in large scale tile mode */ + uint32_t large_scale_tile : 1; + + /** \brief Reserved bytes for future use, must be zero */ + uint32_t reserved : 15; + } bits; + uint32_t value; + } pic_info_fields; + + /** \brief Supper resolution scale denominator. + * value range [9..16] + */ + uint8_t superres_scale_denominator; + + /** \brief Interpolation filter. + * value range [0..9] + */ + uint8_t interp_filter; + + /** \brief luma loop filter levels. + * value range [0..63]. + */ + uint8_t filter_level[2]; + + /** \brief chroma loop filter levels. + * value range [0..63]. + */ + uint8_t filter_level_u; + uint8_t filter_level_v; + + union + { + struct + { + /** \brief flags for reference pictures + * same syntax and semantic as those in AV1 code + */ + uint8_t sharpness_level : 3; + uint8_t mode_ref_delta_enabled : 1; + uint8_t mode_ref_delta_update : 1; + + /** \brief Reserved bytes for future use, must be zero */ + uint8_t reserved : 3; + } bits; + uint8_t value; + } loop_filter_info_fields; + + /** \brief The adjustment needed for the filter level based on + * the chosen reference frame. + * value range [-63..63]. + */ + int8_t ref_deltas[8]; + + /** \brief The adjustment needed for the filter level based on + * the chosen mode. + * value range [-63..63]. + */ + int8_t mode_deltas[2]; + + /** \brief quantization + */ + /** \brief Y AC index + * value range [0..255] + */ + uint8_t base_qindex; + /** \brief Y DC delta from Y AC + * value range [-63..63] + */ + int8_t y_dc_delta_q; + /** \brief U DC delta from Y AC + * value range [-63..63] + */ + int8_t u_dc_delta_q; + /** \brief U AC delta from Y AC + * value range [-63..63] + */ + int8_t u_ac_delta_q; + /** \brief V DC delta from Y AC + * value range [-63..63] + */ + int8_t v_dc_delta_q; + /** \brief V AC delta from Y AC + * value range [-63..63] + */ + int8_t v_ac_delta_q; + + /** \brief quantization_matrix + */ + union + { + struct + { + uint16_t using_qmatrix : 1; + /** \brief qm level + * value range [0..15] + * Invalid if using_qmatrix equals 0. + */ + uint16_t qm_y : 4; + uint16_t qm_u : 4; + uint16_t qm_v : 4; + + /** \brief Reserved bytes for future use, must be zero */ + uint16_t reserved : 3; + } bits; + uint16_t value; + } qmatrix_fields; + + union + { + struct + { + /** \brief delta_q parameters + */ + uint32_t delta_q_present_flag : 1; + uint32_t log2_delta_q_res : 2; + + /** \brief delta_lf parameters + */ + uint32_t delta_lf_present_flag : 1; + uint32_t log2_delta_lf_res : 2; + + /** \brief CONFIG_LOOPFILTER_LEVEL + */ + uint32_t delta_lf_multi : 1; + + /** \brief read_tx_mode + * value range [0..2] + */ + uint32_t tx_mode : 2; + + /* AV1 frame reference mode semantic */ + uint32_t reference_select : 1; + + uint32_t reduced_tx_set_used : 1; + + uint32_t skip_mode_present : 1; + + /** \brief Reserved bytes for future use, must be zero */ + uint32_t reserved : 20; + } bits; + uint32_t value; + } mode_control_fields; + + /** \brief CDEF parameters + */ + /* value range [0..3] */ + uint8_t cdef_damping_minus_3; + /* value range [0..3] */ + uint8_t cdef_bits; + /* value range [0..63] */ + uint8_t cdef_y_strengths[8]; + /* value range [0..63] */ + uint8_t cdef_uv_strengths[8]; + + /** \brief loop restoration parameters + */ + union + { + struct + { + uint16_t yframe_restoration_type : 2; + uint16_t cbframe_restoration_type : 2; + uint16_t crframe_restoration_type : 2; + uint16_t lr_unit_shift : 2; + uint16_t lr_uv_shift : 1; + + /** \brief Reserved bytes for future use, must be zero */ + uint16_t reserved : 7; + } bits; + uint16_t value; + } loop_restoration_fields; + + /** \brief global motion + */ + VAWarpedMotionParamsAV1 wm[7]; + + /**@}*/ + + /** \brief Reserved bytes for future use, must be zero */ + uint32_t va_reserved[VA_PADDING_MEDIUM]; +} VADecPictureParameterBufferAV1; + + +/** + * \brief AV1 Slice Parameter Buffer Structure + * + * This structure conveys parameters related to bit stream data and should be + * sent once per tile. + * + * It uses the name VASliceParameterBufferAV1 to be consistent with other codec, + * but actually means VATileParameterBufferAV1. + * + * Slice data buffer of VASliceDataBufferType is used + * to send the bitstream. + * + * Please note that host decoder is responsible to parse out the + * per tile information. And the bit stream in sent to driver in per + * tile granularity. + */ +typedef struct _VASliceParameterBufferAV1 +{ + /**@{*/ + /** \brief The byte count of current tile in the bitstream buffer, + * starting from first byte of the buffer. + * It uses the name slice_data_size to be consistent with other codec, + * but actually means tile_data_size. + */ + uint32_t slice_data_size; + /** + * offset to the first byte of the data buffer. + */ + uint32_t slice_data_offset; + /** + * see VA_SLICE_DATA_FLAG_XXX definitions + */ + uint32_t slice_data_flag; + + uint16_t tile_row; + uint16_t tile_column; + uint16_t tg_start; + uint16_t tg_end; + /** \brief anchor frame index for large scale tile. + * index into an array AnchorFrames of the frames that the tile uses + * for prediction. + * valid only when large_scale_tile equals 1. + */ + uint8_t anchor_frame_idx; + + /** \brief tile index in the tile list. + * Valid only when large_scale_tile is enabled. + * Driver uses this field to decide the tile output location. + */ + uint16_t tile_idx_in_tile_list; + + /**@}*/ + + /** \brief Reserved bytes for future use, must be zero */ + uint32_t va_reserved[VA_PADDING_LOW]; +} VASliceParameterBufferAV1; + + +/**@}*/ + +#ifdef __cplusplus +} +#endif + +#endif /* VA_DEC_AV1_H */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libva-2.6.1/va/va_trace.c new/libva-2.7.0/va/va_trace.c --- old/libva-2.6.1/va/va_trace.c 2019-12-17 14:46:07.000000000 +0100 +++ new/libva-2.7.0/va/va_trace.c 2020-03-25 23:08:39.000000000 +0100 @@ -2153,6 +2153,41 @@ } } +static inline void va_TraceIsRextProfile( + VADisplay dpy, + VAContextID context, + bool *isRext /* out */ +) +{ + DPY2TRACECTX(dpy, context, VA_INVALID_ID); + + *isRext = (\ + trace_ctx->trace_profile == VAProfileHEVCMain12 || \ + trace_ctx->trace_profile == VAProfileHEVCMain422_10 || \ + trace_ctx->trace_profile == VAProfileHEVCMain422_12 || \ + trace_ctx->trace_profile == VAProfileHEVCMain444 || \ + trace_ctx->trace_profile == VAProfileHEVCMain444_10 || \ + trace_ctx->trace_profile == VAProfileHEVCMain444_12 || \ + trace_ctx->trace_profile == VAProfileHEVCSccMain || \ + trace_ctx->trace_profile == VAProfileHEVCSccMain10 || \ + trace_ctx->trace_profile == VAProfileHEVCSccMain444 \ + ); +} + +static inline void va_TraceIsSccProfile( + VADisplay dpy, + VAContextID context, + bool *isScc /* out */ +) +{ + DPY2TRACECTX(dpy, context, VA_INVALID_ID); + + *isScc = (\ + trace_ctx->trace_profile == VAProfileHEVCSccMain || \ + trace_ctx->trace_profile == VAProfileHEVCSccMain10 || \ + trace_ctx->trace_profile == VAProfileHEVCSccMain444 \ + ); +} static void va_TraceVAPictureParameterBufferHEVC( VADisplay dpy, @@ -2163,8 +2198,24 @@ unsigned int num_elements, void *data) { - int i; - VAPictureParameterBufferHEVC *p = (VAPictureParameterBufferHEVC*)data; + int i, j; + bool isRext = false; + bool isScc = false; + VAPictureParameterBufferHEVC *p = NULL; + VAPictureParameterBufferHEVCRext *pRext = NULL; + VAPictureParameterBufferHEVCScc *pScc = NULL; + + va_TraceIsRextProfile(dpy, context, &isRext); + va_TraceIsSccProfile(dpy, context, &isScc); + + if (isRext) { + p = &((VAPictureParameterBufferHEVCExtension*)data)->base; + pRext = &((VAPictureParameterBufferHEVCExtension*)data)->rext; + + if (isScc) + pScc = &((VAPictureParameterBufferHEVCExtension*)data)->scc; + } else + p = (VAPictureParameterBufferHEVC*)data; DPY2TRACECTX(dpy, context, VA_INVALID_ID); @@ -2279,6 +2330,71 @@ va_TraceMsg(trace_ctx, "\tnum_extra_slice_header_bits = %d\n", p->num_extra_slice_header_bits); va_TraceMsg(trace_ctx, "\tst_rps_bits = %d\n", p->st_rps_bits); + if (isRext && pRext) { + va_TraceMsg(trace_ctx, "\trange_extension_pic_fields = %d\n", pRext->range_extension_pic_fields.value); + va_TraceMsg(trace_ctx, "\ttransform_skip_rotation_enabled_flag = %d\n", pRext->range_extension_pic_fields.bits.transform_skip_rotation_enabled_flag); + va_TraceMsg(trace_ctx, "\ttransform_skip_context_enabled_flag = %d\n", pRext->range_extension_pic_fields.bits.transform_skip_context_enabled_flag); + va_TraceMsg(trace_ctx, "\timplicit_rdpcm_enabled_flag = %d\n", pRext->range_extension_pic_fields.bits.implicit_rdpcm_enabled_flag); + va_TraceMsg(trace_ctx, "\texplicit_rdpcm_enabled_flag = %d\n", pRext->range_extension_pic_fields.bits.explicit_rdpcm_enabled_flag); + va_TraceMsg(trace_ctx, "\textended_precision_processing_flag = %d\n", pRext->range_extension_pic_fields.bits.extended_precision_processing_flag); + va_TraceMsg(trace_ctx, "\tintra_smoothing_disabled_flag = %d\n", pRext->range_extension_pic_fields.bits.intra_smoothing_disabled_flag); + va_TraceMsg(trace_ctx, "\thigh_precision_offsets_enabled_flag = %d\n", pRext->range_extension_pic_fields.bits.high_precision_offsets_enabled_flag); + va_TraceMsg(trace_ctx, "\tpersistent_rice_adaptation_enabled_flag = %d\n", pRext->range_extension_pic_fields.bits.persistent_rice_adaptation_enabled_flag); + va_TraceMsg(trace_ctx, "\tcabac_bypass_alignment_enabled_flag = %d\n", pRext->range_extension_pic_fields.bits.cabac_bypass_alignment_enabled_flag); + va_TraceMsg(trace_ctx, "\tcross_component_prediction_enabled_flag = %d\n", pRext->range_extension_pic_fields.bits.cross_component_prediction_enabled_flag); + va_TraceMsg(trace_ctx, "\tchroma_qp_offset_list_enabled_flag = %d\n", pRext->range_extension_pic_fields.bits.chroma_qp_offset_list_enabled_flag); + va_TraceMsg(trace_ctx, "\treserved = %d\n", pRext->range_extension_pic_fields.bits.reserved); + + va_TraceMsg(trace_ctx, "\tdiff_cu_chroma_qp_offset_depth = %d\n", pRext->diff_cu_chroma_qp_offset_depth); + va_TraceMsg(trace_ctx, "\tchroma_qp_offset_list_len_minus1 = %d\n", pRext->chroma_qp_offset_list_len_minus1); + va_TraceMsg(trace_ctx, "\tlog2_sao_offset_scale_luma = %d\n", pRext->log2_sao_offset_scale_luma); + va_TraceMsg(trace_ctx, "\tlog2_sao_offset_scale_chroma = %d\n", pRext->log2_sao_offset_scale_chroma); + va_TraceMsg(trace_ctx, "\tlog2_max_transform_skip_block_size_minus2 = %d\n", pRext->log2_max_transform_skip_block_size_minus2); + + va_TraceMsg(trace_ctx, "\tcb_qp_offset_list[6] = \n"); + va_TraceMsg(trace_ctx, ""); + for (i = 0; i < 6; i++) + va_TracePrint(trace_ctx, "\t%d", pRext->cb_qp_offset_list[i]); + va_TracePrint(trace_ctx, "\n"); + + va_TraceMsg(trace_ctx, "\tcr_qp_offset_list[] = \n"); + va_TraceMsg(trace_ctx, ""); + for (i = 0; i < 6; i++) + va_TracePrint(trace_ctx, "\t%d", pRext->cr_qp_offset_list[i]); + va_TracePrint(trace_ctx, "\n"); + } + + if (isScc && pScc) { + va_TraceMsg(trace_ctx, "\tscreen_content_pic_fields = %d\n", pScc->screen_content_pic_fields.value); + va_TraceMsg(trace_ctx, "\tpps_curr_pic_ref_enabled_flag = %d\n", pScc->screen_content_pic_fields.bits.pps_curr_pic_ref_enabled_flag); + va_TraceMsg(trace_ctx, "\tpalette_mode_enabled_flag = %d\n", pScc->screen_content_pic_fields.bits.palette_mode_enabled_flag); + va_TraceMsg(trace_ctx, "\tmotion_vector_resolution_control_idc = %d\n", pScc->screen_content_pic_fields.bits.motion_vector_resolution_control_idc); + va_TraceMsg(trace_ctx, "\tintra_boundary_filtering_disabled_flag = %d\n", pScc->screen_content_pic_fields.bits.intra_boundary_filtering_disabled_flag); + va_TraceMsg(trace_ctx, "\tresidual_adaptive_colour_transform_enabled_flag = %d\n", pScc->screen_content_pic_fields.bits.residual_adaptive_colour_transform_enabled_flag); + va_TraceMsg(trace_ctx, "\tpps_slice_act_qp_offsets_present_flag = %d\n", pScc->screen_content_pic_fields.bits.pps_slice_act_qp_offsets_present_flag); + va_TraceMsg(trace_ctx, "\treserved = %d\n", pScc->screen_content_pic_fields.bits.reserved); + + va_TraceMsg(trace_ctx, "\tpalette_max_size = %d\n", pScc->palette_max_size); + va_TraceMsg(trace_ctx, "\tdelta_palette_max_predictor_size = %d\n", pScc->delta_palette_max_predictor_size); + va_TraceMsg(trace_ctx, "\tpredictor_palette_size = %d\n", pScc->predictor_palette_size); + + va_TraceMsg(trace_ctx, "\tpredictor_palette_entries[3][128] = \n"); + va_TraceMsg(trace_ctx, ""); + for (i = 0; i < 3; i++) { + for (j = 0; j < 128; j++) { + va_TracePrint(trace_ctx, "\t%d", pScc->predictor_palette_entries[i][j]); + if ((j + 1) % 8 == 0) + TRACE_NEWLINE(); + } + TRACE_NEWLINE(); + } + va_TracePrint(trace_ctx, "\n"); + + va_TraceMsg(trace_ctx, "\tpps_act_y_qp_offset_plus5 = %d\n", pScc->pps_act_y_qp_offset_plus5); + va_TraceMsg(trace_ctx, "\tpps_act_cb_qp_offset_plus5 = %d\n", pScc->pps_act_cb_qp_offset_plus5); + va_TraceMsg(trace_ctx, "\tpps_act_cr_qp_offset_plus3 = %d\n", pScc->pps_act_cr_qp_offset_plus3); + } + return; } @@ -2292,7 +2408,16 @@ void *data) { int i,j; - VASliceParameterBufferHEVC* p = (VASliceParameterBufferHEVC*)data; + bool isRext = false; + VASliceParameterBufferHEVC* p = NULL; + VASliceParameterBufferHEVCRext *pRext = NULL; + + va_TraceIsRextProfile(dpy, context, &isRext); + if (isRext) { + p = &((VASliceParameterBufferHEVCExtension*)data)->base; + pRext = &((VASliceParameterBufferHEVCExtension*)data)->rext; + } else + p = (VASliceParameterBufferHEVC*)data; DPY2TRACECTX(dpy, context, VA_INVALID_ID); @@ -2366,6 +2491,59 @@ va_TraceMsg(trace_ctx, "\tfive_minus_max_num_merge_cand = %d\n", p->five_minus_max_num_merge_cand); + va_TraceMsg(trace_ctx, "\tnum_entry_point_offsets = %d\n", p->num_entry_point_offsets); + va_TraceMsg(trace_ctx, "\tentry_offset_to_subset_array = %d\n", p->entry_offset_to_subset_array); + va_TraceMsg(trace_ctx, "\tslice_data_num_emu_prevn_bytes = %d\n", p->slice_data_num_emu_prevn_bytes); + + if (isRext && pRext) { + va_TraceMsg(trace_ctx, "\tluma_offset_l0[15] = \n"); + va_TraceMsg(trace_ctx, ""); + for (i = 0; i < 15; i++) { + va_TracePrint(trace_ctx, "\t%d", pRext->luma_offset_l0[i]); + if ((i + 1) % 8 == 0) + TRACE_NEWLINE(); + } + va_TracePrint(trace_ctx, "\n"); + + va_TraceMsg(trace_ctx, "\tChromaOffsetL0[15][2] = \n"); + va_TraceMsg(trace_ctx, ""); + for (i = 0; i < 15; i++) { + for (j = 0; j < 2; j++) { + va_TracePrint(trace_ctx, "\t%d", pRext->ChromaOffsetL0[i][j]); + } + TRACE_NEWLINE(); + } + va_TracePrint(trace_ctx, "\n"); + + va_TraceMsg(trace_ctx, "\tluma_offset_l1[15] = \n"); + va_TraceMsg(trace_ctx, ""); + for (i = 0; i < 15; i++) { + va_TracePrint(trace_ctx, "\t%d", pRext->luma_offset_l1[i]); + if ((i + 1) % 8 == 0) + TRACE_NEWLINE(); + } + va_TracePrint(trace_ctx, "\n"); + + va_TraceMsg(trace_ctx, "\tChromaOffsetL1[15][2] = \n"); + va_TraceMsg(trace_ctx, ""); + for (i = 0; i < 15; i++) { + for (j = 0; j < 2; j++) { + va_TracePrint(trace_ctx, "\t%d", pRext->ChromaOffsetL1[i][j]); + } + TRACE_NEWLINE(); + } + va_TracePrint(trace_ctx, "\n"); + + va_TraceMsg(trace_ctx, "\tslice_ext_flags = %d\n", pRext->slice_ext_flags.value); + va_TraceMsg(trace_ctx, "\tcu_chroma_qp_offset_enabled_flag = %d\n", pRext->slice_ext_flags.bits.cu_chroma_qp_offset_enabled_flag); + va_TraceMsg(trace_ctx, "\tuse_integer_mv_flag = %d\n", pRext->slice_ext_flags.bits.use_integer_mv_flag); + va_TraceMsg(trace_ctx, "\treserved = %d\n", pRext->slice_ext_flags.bits.reserved); + + va_TraceMsg(trace_ctx, "\tslice_act_y_qp_offset = %d\n", pRext->slice_act_y_qp_offset); + va_TraceMsg(trace_ctx, "\tslice_act_cb_qp_offset = %d\n", pRext->slice_act_cb_qp_offset); + va_TraceMsg(trace_ctx, "\tslice_act_cr_qp_offset = %d\n", pRext->slice_act_cr_qp_offset); + } + va_TraceMsg(trace_ctx, NULL); } @@ -3030,9 +3208,8 @@ { VAEncSliceParameterBuffer* p = (VAEncSliceParameterBuffer*)data; DPY2TRACECTX(dpy, context, VA_INVALID_ID); - + va_TraceMsg(trace_ctx, "\t--VAEncSliceParameterBuffer\n"); - va_TraceMsg(trace_ctx, "\tstart_row_number = %d\n", p->start_row_number); va_TraceMsg(trace_ctx, "\tslice_height = %d\n", p->slice_height); va_TraceMsg(trace_ctx, "\tslice_flags.is_intra = %d\n", p->slice_flags.bits.is_intra); @@ -3797,6 +3974,119 @@ return; } +static void va_TraceVAPictureParameterBufferAV1( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *data) +{ + VADecPictureParameterBufferAV1 *p = (VADecPictureParameterBufferAV1 *)data; + DPY2TRACECTX(dpy, context, VA_INVALID_ID); + int i; + + va_TraceMsg(trace_ctx, "\t--VAPictureParameterBufferAV1\n"); + + va_TraceMsg(trace_ctx, "\tprofile = %d\n", p->profile); + + va_TraceMsg(trace_ctx, "\tframe_width_minus_1 = %d\n", p->frame_width_minus1); + va_TraceMsg(trace_ctx, "\tframe_height_minus_1 = %d\n", p->frame_height_minus1); + + va_TraceMsg(trace_ctx, "\toutput_frame_width_in_tiles_minus_1 = %d\n", p->output_frame_width_in_tiles_minus_1); + va_TraceMsg(trace_ctx, "\toutput_frame_height_in_tiles_minus_1 = %d\n", p->output_frame_height_in_tiles_minus_1); + + va_TraceMsg(trace_ctx, "\tbit_depth_idx = %d\n", p->bit_depth_idx); + va_TraceMsg(trace_ctx, "\tseq_info_fields = %X\n", p->seq_info_fields.value); + + va_TraceMsg(trace_ctx, "\t\tseq_info_fields.still_picture = %d\n", p->seq_info_fields.fields.still_picture); + va_TraceMsg(trace_ctx, "\t\tseq_info_fields.use_128x128_superblock = %d\n", p->seq_info_fields.fields.use_128x128_superblock); + va_TraceMsg(trace_ctx, "\t\tseq_info_fields.enable_filter_intra = %d\n", p->seq_info_fields.fields.enable_filter_intra); + va_TraceMsg(trace_ctx, "\t\tseq_info_fields.enable_intra_edge_filter = %d\n", p->seq_info_fields.fields.enable_intra_edge_filter); + va_TraceMsg(trace_ctx, "\t\tseq_info_fields.enable_interintra_compound = %d\n", p->seq_info_fields.fields.enable_interintra_compound); + va_TraceMsg(trace_ctx, "\t\tseq_info_fields.enable_masked_compound = %d\n", p->seq_info_fields.fields.enable_masked_compound); + va_TraceMsg(trace_ctx, "\t\tseq_info_fields.enable_dual_filter = %d\n", p->seq_info_fields.fields.enable_dual_filter); + va_TraceMsg(trace_ctx, "\t\tseq_info_fields.enable_order_hint = %d\n", p->seq_info_fields.fields.enable_order_hint); + va_TraceMsg(trace_ctx, "\t\tseq_info_fields.enable_jnt_comp = %d\n", p->seq_info_fields.fields.enable_jnt_comp); + va_TraceMsg(trace_ctx, "\t\tseq_info_fields.enable_cdef = %d\n", p->seq_info_fields.fields.enable_cdef); + va_TraceMsg(trace_ctx, "\t\tseq_info_fields.mono_chrome = %d\n", p->seq_info_fields.fields.mono_chrome); + va_TraceMsg(trace_ctx, "\t\tseq_info_fields.color_range = %d\n", p->seq_info_fields.fields.color_range); + va_TraceMsg(trace_ctx, "\t\tseq_info_fields.subsampling_x = %d\n", p->seq_info_fields.fields.subsampling_x); + va_TraceMsg(trace_ctx, "\t\tseq_info_fields.subsampling_y = %d\n", p->seq_info_fields.fields.subsampling_y); + va_TraceMsg(trace_ctx, "\t\tseq_info_fields.chroma_sample_position = %d\n", p->seq_info_fields.fields.chroma_sample_position); + va_TraceMsg(trace_ctx, "\t\tseq_info_fields.film_grain_params_present = %d\n", p->seq_info_fields.fields.film_grain_params_present); + + va_TraceMsg(trace_ctx, "\tpic_info_fields = %X\n", p->pic_info_fields.value); + va_TraceMsg(trace_ctx, "\t\tpic_info_fields.frame_type = %d\n", p->pic_info_fields.bits.frame_type); + va_TraceMsg(trace_ctx, "\t\tpic_info_fields.show_frame = %d\n", p->pic_info_fields.bits.show_frame); + va_TraceMsg(trace_ctx, "\t\tpic_info_fields.showable_frame = %d\n", p->pic_info_fields.bits.showable_frame); + va_TraceMsg(trace_ctx, "\t\tpic_info_fields.error_resilient_mode = %d\n", p->pic_info_fields.bits.error_resilient_mode); + va_TraceMsg(trace_ctx, "\t\tpic_info_fields.disable_cdf_update = %d\n", p->pic_info_fields.bits.disable_cdf_update); + va_TraceMsg(trace_ctx, "\t\tpic_info_fields.allow_screen_content_tools = %d\n", p->pic_info_fields.bits.allow_screen_content_tools); + va_TraceMsg(trace_ctx, "\t\tpic_info_fields.force_integer_mv = %d\n", p->pic_info_fields.bits.force_integer_mv); + va_TraceMsg(trace_ctx, "\t\tpic_info_fields.allow_intrabc = %d\n", p->pic_info_fields.bits.allow_intrabc); + va_TraceMsg(trace_ctx, "\t\tpic_info_fields.use_superres = %d\n", p->pic_info_fields.bits.use_superres); + va_TraceMsg(trace_ctx, "\t\tpic_info_fields.allow_high_precision_mv = %d\n", p->pic_info_fields.bits.allow_high_precision_mv); + va_TraceMsg(trace_ctx, "\t\tpic_info_fields.is_motion_mode_switchable = %d\n", p->pic_info_fields.bits.is_motion_mode_switchable); + va_TraceMsg(trace_ctx, "\t\tpic_info_fields.use_ref_frame_mvs = %d\n", p->pic_info_fields.bits.use_ref_frame_mvs); + va_TraceMsg(trace_ctx, "\t\tpic_info_fields.disable_frame_end_update_cdf = %d\n", p->pic_info_fields.bits.disable_frame_end_update_cdf); + va_TraceMsg(trace_ctx, "\t\tpic_info_fields.uniform_tile_spacing_flag = %d\n", p->pic_info_fields.bits.uniform_tile_spacing_flag); + va_TraceMsg(trace_ctx, "\t\tpic_info_fields.allow_warped_motion = %d\n", p->pic_info_fields.bits.allow_warped_motion); + va_TraceMsg(trace_ctx, "\t\tpic_info_fields.large_scale_tile = %d\n", p->pic_info_fields.bits.large_scale_tile); + + va_TraceMsg(trace_ctx, "\tloop_filter_info_fields = %X\n", p->loop_filter_info_fields.value); + va_TraceMsg(trace_ctx, "\t\tloop_filter_info_fields.bits.sharpness_level = %d\n", p->loop_filter_info_fields.bits.sharpness_level); + va_TraceMsg(trace_ctx, "\t\tloop_filter_info_fields.bits.mode_ref_delta_enabled = %d\n", p->loop_filter_info_fields.bits.mode_ref_delta_enabled); + va_TraceMsg(trace_ctx, "\t\tloop_filter_info_fields.bits.mode_ref_delta_update = %d\n", p->loop_filter_info_fields.bits.mode_ref_delta_update); + + va_TraceMsg(trace_ctx, "\tcurrent_frame = %X\n", p->current_frame); + va_TraceMsg(trace_ctx, "\tcurrent_display_picture = %X\n", p->current_display_picture); + + va_TraceMsg(trace_ctx, "\ttile_cols = %d\n", p->tile_cols); + va_TraceMsg(trace_ctx, "\ttile_rows = %d\n", p->tile_rows); + va_TraceMsg(trace_ctx, "\ttile_count_minus_1 = %d\n", p->tile_count_minus_1); + va_TraceMsg(trace_ctx, "\tcontext_update_tile_id = %d\n", p->context_update_tile_id); + + va_TraceMsg(trace_ctx, "\tprimary_ref_frame = %d\n", p->primary_ref_frame); + for (i=0;i<8;i++) + va_TraceMsg(trace_ctx, "\tref_frame_map[%d] = %X\n", i, p->ref_frame_map[i]); + + for (i=0;i<7;i++) + va_TraceMsg(trace_ctx, "\tref_frame_idx[%d] = %d\n", i, p->ref_frame_idx[i]); + + va_TraceMsg(trace_ctx, "\torder_hint = %d\n", p->order_hint); + + va_TraceMsg(trace_ctx, "\tanchor_frames_num = %d\n", p->anchor_frames_num); + for (i=0;i<p->anchor_frames_num;i++) + va_TraceMsg(trace_ctx, "\t\tanchor_frames_list[%d] = %X\n", i, p->anchor_frames_list[i]); + + va_TraceMsg(trace_ctx, "\tsuperres_scale_denominator = %d\n", p->superres_scale_denominator); + va_TraceMsg(trace_ctx, "\tinterp_filter = %d\n", p->interp_filter); + va_TraceMsg(trace_ctx, "\tfilter_level[0] = %d\n", p->filter_level[0]); + va_TraceMsg(trace_ctx, "\tfilter_level[1] = %d\n", p->filter_level[1]); + va_TraceMsg(trace_ctx, "\tfilter_level_u = %d\n", p->filter_level_u); + va_TraceMsg(trace_ctx, "\tfilter_level_v = %d\n", p->filter_level_v); + + va_TraceMsg(trace_ctx, "\tmode_control_fields = %X\n", p->mode_control_fields.value); + va_TraceMsg(trace_ctx, "\t\tmode_control_fields.delta_q_present_flag = %d\n", p->mode_control_fields.bits.delta_q_present_flag); + va_TraceMsg(trace_ctx, "\t\tmode_control_fields.log2_delta_q_res = %d\n", p->mode_control_fields.bits.log2_delta_q_res); + va_TraceMsg(trace_ctx, "\t\tmode_control_fields.delta_lf_present_flag = %d\n", p->mode_control_fields.bits.delta_lf_present_flag); + va_TraceMsg(trace_ctx, "\t\tmode_control_fields.log2_delta_lf_res = %d\n", p->mode_control_fields.bits.log2_delta_lf_res); + va_TraceMsg(trace_ctx, "\t\tmode_control_fields.delta_lf_multi = %d\n", p->mode_control_fields.bits.delta_lf_multi); + va_TraceMsg(trace_ctx, "\t\tmode_control_fields.tx_mode = %d\n", p->mode_control_fields.bits.tx_mode); + va_TraceMsg(trace_ctx, "\t\tmode_control_fields.reference_select = %d\n", p->mode_control_fields.bits.reference_select); + va_TraceMsg(trace_ctx, "\t\tmode_control_fields.reduced_tx_set_used = %d\n", p->mode_control_fields.bits.reduced_tx_set_used); + va_TraceMsg(trace_ctx, "\t\tmode_control_fields.skip_mode_present = %d\n", p->mode_control_fields.bits.skip_mode_present); + va_TraceMsg(trace_ctx, "\t\tmode_control_fields.skip_mode_present = %d\n", p->mode_control_fields.bits.skip_mode_present); + + va_TraceMsg(trace_ctx, "\tloop_filter_info_fields = %X\n", p->loop_filter_info_fields.value); + + va_TraceMsg(trace_ctx, NULL); + + return; +} + static void va_TraceVAEncPictureParameterBufferVP8( VADisplay dpy, VAContextID context, @@ -3995,6 +4285,39 @@ return; } +static void va_TraceVASliceParameterBufferAV1( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *data) +{ + + VASliceParameterBufferAV1 *p = (VASliceParameterBufferAV1 *)data; + DPY2TRACECTX(dpy, context, VA_INVALID_ID); + + va_TraceMsg(trace_ctx, "\t--VASliceParameterBufferAV1\n"); + + va_TraceMsg(trace_ctx, "\tslice_data_size = %d\n", p->slice_data_size); + va_TraceMsg(trace_ctx, "\tslice_data_offset = %d\n", p->slice_data_offset); + va_TraceMsg(trace_ctx, "\tslice_data_flag = %d\n", p->slice_data_flag); + + va_TraceMsg(trace_ctx, "\ttile_row = %d\n", p->tile_row); + va_TraceMsg(trace_ctx, "\ttile_column = %d\n", p->tile_column); + + va_TraceMsg(trace_ctx, "\ttg_start = %d\n", p->tg_start); + va_TraceMsg(trace_ctx, "\ttg_end = %d\n", p->tg_end); + + va_TraceMsg(trace_ctx, "\tanchor_frame_idx = %d\n", p->anchor_frame_idx); + va_TraceMsg(trace_ctx, "\ttile_idx_in_tile_list = %d\n", p->tile_idx_in_tile_list); + + va_TraceMsg(trace_ctx, NULL); + + return; +} + void va_TraceBeginPicture( VADisplay dpy, VAContextID context, @@ -4621,6 +4944,30 @@ } } +static void va_TraceAV1Buf( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *pbuf +) +{ + DPY2TRACECTX(dpy, context, VA_INVALID_ID); + + switch (type) { + case VAPictureParameterBufferType: + va_TraceVAPictureParameterBufferAV1(dpy, context, buffer, type, size, num_elements, pbuf); + break; + case VASliceParameterBufferType: + va_TraceVASliceParameterBufferAV1(dpy, context, buffer, type, size, num_elements, pbuf); + break; + default: + va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf); + break; + } +} static void va_TraceVC1Buf( VADisplay dpy, VAContextID context, @@ -5012,6 +5359,9 @@ case VAProfileHEVCMain444_12: case VAProfileHEVCMain: case VAProfileHEVCMain10: + case VAProfileHEVCSccMain: + case VAProfileHEVCSccMain10: + case VAProfileHEVCSccMain444: for (j=0; j<num_elements; j++) { va_TraceMsg(trace_ctx, "\telement[%d] = ", j); @@ -5028,6 +5378,14 @@ va_TraceVP9Buf(dpy, context, buffers[i], type, size, num_elements, pbuf + size*j); } break; + case VAProfileAV1Profile0: + case VAProfileAV1Profile1: + for (j=0; j<num_elements; j++) { + va_TraceMsg(trace_ctx, "\telement[%d] = \n", j); + + va_TraceAV1Buf(dpy, context, buffers[i], type, size, num_elements, pbuf + size*j); + } + break; default: break; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libva-2.6.1/va/va_version.h new/libva-2.7.0/va/va_version.h --- old/libva-2.6.1/va/va_version.h 2020-01-17 12:30:16.000000000 +0100 +++ new/libva-2.7.0/va/va_version.h 2020-04-09 17:48:12.000000000 +0200 @@ -37,7 +37,7 @@ * * The minor version of VA-API (2, if %VA_VERSION is 1.2.3) */ -#define VA_MINOR_VERSION 6 +#define VA_MINOR_VERSION 7 /** * VA_MICRO_VERSION: @@ -51,7 +51,7 @@ * * The full version of VA-API, like 1.2.3 */ -#define VA_VERSION 1.6.0 +#define VA_VERSION 1.7.0 /** * VA_VERSION_S: @@ -59,7 +59,7 @@ * The full version of VA-API, in string form (suited for string * concatenation) */ -#define VA_VERSION_S "1.6.0" +#define VA_VERSION_S "1.7.0" /** * VA_VERSION_HEX: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libva-2.6.1/va/wayland/wayland-drm-client-protocol.c new/libva-2.7.0/va/wayland/wayland-drm-client-protocol.c --- old/libva-2.6.1/va/wayland/wayland-drm-client-protocol.c 2019-12-24 14:45:00.000000000 +0100 +++ new/libva-2.7.0/va/wayland/wayland-drm-client-protocol.c 2020-03-11 10:42:57.000000000 +0100 @@ -34,54 +34,54 @@ extern const struct wl_interface wl_buffer_interface; static const struct wl_interface *types[] = { - NULL, - &wl_buffer_interface, - NULL, - NULL, - NULL, - NULL, - NULL, - &wl_buffer_interface, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - &wl_buffer_interface, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, + NULL, + &wl_buffer_interface, + NULL, + NULL, + NULL, + NULL, + NULL, + &wl_buffer_interface, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + &wl_buffer_interface, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, }; static const struct wl_message wl_drm_requests[] = { - { "authenticate", "u", types + 0 }, - { "create_buffer", "nuiiuu", types + 1 }, - { "create_planar_buffer", "nuiiuiiiiii", types + 7 }, - { "create_prime_buffer", "2nhiiuiiiiii", types + 18 }, + { "authenticate", "u", types + 0 }, + { "create_buffer", "nuiiuu", types + 1 }, + { "create_planar_buffer", "nuiiuiiiiii", types + 7 }, + { "create_prime_buffer", "2nhiiuiiiiii", types + 18 }, }; static const struct wl_message wl_drm_events[] = { - { "device", "s", types + 0 }, - { "format", "u", types + 0 }, - { "authenticated", "", types + 0 }, - { "capabilities", "u", types + 0 }, + { "device", "s", types + 0 }, + { "format", "u", types + 0 }, + { "authenticated", "", types + 0 }, + { "capabilities", "u", types + 0 }, }; DLL_HIDDEN const struct wl_interface wl_drm_interface = { - "wl_drm", 2, - 4, wl_drm_requests, - 4, wl_drm_events, + "wl_drm", 2, + 4, wl_drm_requests, + 4, wl_drm_events, }; ++++++ libva-2.6.1.tar.bz2.sha1sum -> libva-2.7.0.tar.bz2.sha1sum ++++++ --- /work/SRC/openSUSE:Factory/libva/libva-2.6.1.tar.bz2.sha1sum 2020-03-06 21:26:24.345519330 +0100 +++ /work/SRC/openSUSE:Factory/.libva.new.2738/libva-2.7.0.tar.bz2.sha1sum 2020-04-14 16:23:34.431703937 +0200 @@ -1 +1 @@ -6b218e5622174a37fd0cfd8777b10717c95bd20e libva-2.6.1.tar.bz2 +e0119fdfbc225e47d5723e38d35e914dd5eb8d2f libva-2.7.0.tar.bz2