mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-08 16:35:40 +00:00
dxva: Build gir and remove SDK header dependency
Build gir for documentation Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5481>
This commit is contained in:
parent
c5d60cee01
commit
347dd37225
18 changed files with 956 additions and 409 deletions
5
subprojects/gst-plugins-bad/docs/libs/dxva/index.md
Normal file
5
subprojects/gst-plugins-bad/docs/libs/dxva/index.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
# DXVA library
|
||||
|
||||
This library consists of baseclasses for DXVA (DirectX Video Acceleration) decoders.
|
||||
|
||||
> NOTE: This library API is considered *unstable*
|
1
subprojects/gst-plugins-bad/docs/libs/dxva/sitemap.txt
Normal file
1
subprojects/gst-plugins-bad/docs/libs/dxva/sitemap.txt
Normal file
|
@ -0,0 +1 @@
|
|||
gi-index
|
|
@ -112,7 +112,8 @@ foreach f: [
|
|||
'sys/winks/ksvideohelpers.h',
|
||||
'gst/videoparsers/gstjpeg2000parse.h',
|
||||
'gst-libs/gst/*/*-prelude.h',
|
||||
'gst-libs/gst/vulkan/vulkan_fwd.h'
|
||||
'gst-libs/gst/vulkan/vulkan_fwd.h',
|
||||
'gst-libs/gst/dxva/gstdxvatypedef.h',
|
||||
]
|
||||
excludes += [join_paths(meson.current_source_dir(), root_rel, f)]
|
||||
endforeach
|
||||
|
@ -132,6 +133,7 @@ if build_gir
|
|||
{'name': 'transcoder', 'gir': transcoder_gir, 'lib': gst_transcoder_dep},
|
||||
{'name': 'codecs', 'gir': codecs_gir, 'lib': gstcodecs_dep},
|
||||
{'name': 'cuda', 'gir': gst_cuda_gir, 'lib': gstcuda_dep, 'c_source_patterns': ['*.h', '*.cpp']},
|
||||
{'name': 'dxva', 'gir': dxva_gir, 'lib': gstdxva_dep, 'c_source_patterns': ['*.h', '*.cpp']},
|
||||
]
|
||||
|
||||
if gstopencv_dep.found()
|
||||
|
|
|
@ -1,339 +0,0 @@
|
|||
/* GStreamer
|
||||
* Copyright (C) 2023 Seungha Yang <seungha@centricular.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <windows.h>
|
||||
#include <gst/gst.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
/* Might not be defined in dxva.h, copied from DXVA AV1 spec available at
|
||||
* https://www.microsoft.com/en-us/download/confirmation.aspx?id=101577
|
||||
* and modified with "GST_" prefix
|
||||
*/
|
||||
#pragma pack(push, 1)
|
||||
|
||||
/* AV1 picture entry data structure */
|
||||
typedef struct _GST_DXVA_PicEntry_AV1
|
||||
{
|
||||
UINT width;
|
||||
UINT height;
|
||||
|
||||
// Global motion parameters
|
||||
INT wmmat[6];
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
UCHAR wminvalid:1;
|
||||
UCHAR wmtype:2;
|
||||
UCHAR Reserved:5;
|
||||
};
|
||||
UCHAR GlobalMotionFlags;
|
||||
} DUMMYUNIONNAME;
|
||||
|
||||
UCHAR Index;
|
||||
UINT16 Reserved16Bits;
|
||||
|
||||
} GST_DXVA_PicEntry_AV1;
|
||||
|
||||
/* AV1 picture parameters structure */
|
||||
typedef struct _GST_DXVA_PicParams_AV1
|
||||
{
|
||||
UINT width;
|
||||
UINT height;
|
||||
|
||||
UINT max_width;
|
||||
UINT max_height;
|
||||
|
||||
UCHAR CurrPicTextureIndex;
|
||||
UCHAR superres_denom;
|
||||
UCHAR bitdepth;
|
||||
UCHAR seq_profile;
|
||||
|
||||
// Tiles:
|
||||
struct
|
||||
{
|
||||
UCHAR cols;
|
||||
UCHAR rows;
|
||||
USHORT context_update_id;
|
||||
USHORT widths[64];
|
||||
USHORT heights[64];
|
||||
} tiles;
|
||||
|
||||
// Coding Tools
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
UINT use_128x128_superblock:1;
|
||||
UINT intra_edge_filter:1;
|
||||
UINT interintra_compound:1;
|
||||
UINT masked_compound:1;
|
||||
UINT warped_motion:1;
|
||||
UINT dual_filter:1;
|
||||
UINT jnt_comp:1;
|
||||
UINT screen_content_tools:1;
|
||||
UINT integer_mv:1;
|
||||
UINT cdef:1;
|
||||
UINT restoration:1;
|
||||
UINT film_grain:1;
|
||||
UINT intrabc:1;
|
||||
UINT high_precision_mv:1;
|
||||
UINT switchable_motion_mode:1;
|
||||
UINT filter_intra:1;
|
||||
UINT disable_frame_end_update_cdf:1;
|
||||
UINT disable_cdf_update:1;
|
||||
UINT reference_mode:1;
|
||||
UINT skip_mode:1;
|
||||
UINT reduced_tx_set:1;
|
||||
UINT superres:1;
|
||||
UINT tx_mode:2;
|
||||
UINT use_ref_frame_mvs:1;
|
||||
UINT enable_ref_frame_mvs:1;
|
||||
UINT reference_frame_update:1;
|
||||
UINT Reserved:5;
|
||||
};
|
||||
UINT32 CodingParamToolFlags;
|
||||
} coding;
|
||||
|
||||
// Format & Picture Info flags
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
UCHAR frame_type:2;
|
||||
UCHAR show_frame:1;
|
||||
UCHAR showable_frame:1;
|
||||
UCHAR subsampling_x:1;
|
||||
UCHAR subsampling_y:1;
|
||||
UCHAR mono_chrome:1;
|
||||
UCHAR Reserved:1;
|
||||
};
|
||||
UCHAR FormatAndPictureInfoFlags;
|
||||
} format;
|
||||
|
||||
// References
|
||||
UCHAR primary_ref_frame;
|
||||
UCHAR order_hint;
|
||||
UCHAR order_hint_bits;
|
||||
|
||||
GST_DXVA_PicEntry_AV1 frame_refs[7];
|
||||
UCHAR RefFrameMapTextureIndex[8];
|
||||
|
||||
// Loop filter parameters
|
||||
struct
|
||||
{
|
||||
UCHAR filter_level[2];
|
||||
UCHAR filter_level_u;
|
||||
UCHAR filter_level_v;
|
||||
|
||||
UCHAR sharpness_level;
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
UCHAR mode_ref_delta_enabled:1;
|
||||
UCHAR mode_ref_delta_update:1;
|
||||
UCHAR delta_lf_multi:1;
|
||||
UCHAR delta_lf_present:1;
|
||||
UCHAR Reserved:4;
|
||||
};
|
||||
UCHAR ControlFlags;
|
||||
} DUMMYUNIONNAME;
|
||||
CHAR ref_deltas[8];
|
||||
CHAR mode_deltas[2];
|
||||
UCHAR delta_lf_res;
|
||||
UCHAR frame_restoration_type[3];
|
||||
USHORT log2_restoration_unit_size[3];
|
||||
UINT16 Reserved16Bits;
|
||||
} loop_filter;
|
||||
|
||||
// Quantization
|
||||
struct
|
||||
{
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
UCHAR delta_q_present:1;
|
||||
UCHAR delta_q_res:2;
|
||||
UCHAR Reserved:5;
|
||||
};
|
||||
UCHAR ControlFlags;
|
||||
} DUMMYUNIONNAME;
|
||||
|
||||
UCHAR base_qindex;
|
||||
CHAR y_dc_delta_q;
|
||||
CHAR u_dc_delta_q;
|
||||
CHAR v_dc_delta_q;
|
||||
CHAR u_ac_delta_q;
|
||||
CHAR v_ac_delta_q;
|
||||
// using_qmatrix:
|
||||
UCHAR qm_y;
|
||||
UCHAR qm_u;
|
||||
UCHAR qm_v;
|
||||
UINT16 Reserved16Bits;
|
||||
} quantization;
|
||||
|
||||
// Cdef parameters
|
||||
struct
|
||||
{
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
UCHAR damping:2;
|
||||
UCHAR bits:2;
|
||||
UCHAR Reserved:4;
|
||||
};
|
||||
UCHAR ControlFlags;
|
||||
} DUMMYUNIONNAME;
|
||||
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
UCHAR primary:6;
|
||||
UCHAR secondary:2;
|
||||
};
|
||||
UCHAR combined;
|
||||
} y_strengths[8];
|
||||
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
UCHAR primary:6;
|
||||
UCHAR secondary:2;
|
||||
};
|
||||
UCHAR combined;
|
||||
} uv_strengths[8];
|
||||
|
||||
} cdef;
|
||||
|
||||
UCHAR interp_filter;
|
||||
|
||||
// Segmentation
|
||||
struct
|
||||
{
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
UCHAR enabled:1;
|
||||
UCHAR update_map:1;
|
||||
UCHAR update_data:1;
|
||||
UCHAR temporal_update:1;
|
||||
UCHAR Reserved:4;
|
||||
};
|
||||
UCHAR ControlFlags;
|
||||
} DUMMYUNIONNAME;
|
||||
UCHAR Reserved24Bits[3];
|
||||
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
UCHAR alt_q:1;
|
||||
UCHAR alt_lf_y_v:1;
|
||||
UCHAR alt_lf_y_h:1;
|
||||
UCHAR alt_lf_u:1;
|
||||
UCHAR alt_lf_v:1;
|
||||
UCHAR ref_frame:1;
|
||||
UCHAR skip:1;
|
||||
UCHAR globalmv:1;
|
||||
};
|
||||
UCHAR mask;
|
||||
} feature_mask[8];
|
||||
|
||||
SHORT feature_data[8][8];
|
||||
|
||||
} segmentation;
|
||||
|
||||
struct
|
||||
{
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
USHORT apply_grain:1;
|
||||
USHORT scaling_shift_minus8:2;
|
||||
USHORT chroma_scaling_from_luma:1;
|
||||
USHORT ar_coeff_lag:2;
|
||||
USHORT ar_coeff_shift_minus6:2;
|
||||
USHORT grain_scale_shift:2;
|
||||
USHORT overlap_flag:1;
|
||||
USHORT clip_to_restricted_range:1;
|
||||
USHORT matrix_coeff_is_identity:1;
|
||||
USHORT Reserved:3;
|
||||
};
|
||||
USHORT ControlFlags;
|
||||
} DUMMYUNIONNAME;
|
||||
|
||||
USHORT grain_seed;
|
||||
UCHAR scaling_points_y[14][2];
|
||||
UCHAR num_y_points;
|
||||
UCHAR scaling_points_cb[10][2];
|
||||
UCHAR num_cb_points;
|
||||
UCHAR scaling_points_cr[10][2];
|
||||
UCHAR num_cr_points;
|
||||
UCHAR ar_coeffs_y[24];
|
||||
UCHAR ar_coeffs_cb[25];
|
||||
UCHAR ar_coeffs_cr[25];
|
||||
UCHAR cb_mult;
|
||||
UCHAR cb_luma_mult;
|
||||
UCHAR cr_mult;
|
||||
UCHAR cr_luma_mult;
|
||||
UCHAR Reserved8Bits;
|
||||
SHORT cb_offset;
|
||||
SHORT cr_offset;
|
||||
} film_grain;
|
||||
|
||||
UINT Reserved32Bits;
|
||||
UINT StatusReportFeedbackNumber;
|
||||
} GST_DXVA_PicParams_AV1;
|
||||
|
||||
/* AV1 tile structure */
|
||||
typedef struct _GST_DXVA_Tile_AV1
|
||||
{
|
||||
UINT DataOffset;
|
||||
UINT DataSize;
|
||||
USHORT row;
|
||||
USHORT column;
|
||||
UINT16 Reserved16Bits;
|
||||
UCHAR anchor_frame;
|
||||
UCHAR Reserved8Bits;
|
||||
} GST_DXVA_Tile_AV1;
|
||||
|
||||
/* AV1 status reporting data structure */
|
||||
typedef struct _GST_DXVA_Status_AV1
|
||||
{
|
||||
UINT StatusReportFeedbackNumber;
|
||||
GST_DXVA_PicEntry_AV1 CurrPic;
|
||||
UCHAR BufType;
|
||||
UCHAR Status;
|
||||
UCHAR Reserved8Bits;
|
||||
USHORT NumMbsAffected;
|
||||
} GST_DXVA_Status_AV1;
|
||||
|
||||
#pragma pack(pop)
|
||||
|
||||
G_END_DECLS
|
|
@ -22,10 +22,11 @@
|
|||
#endif
|
||||
|
||||
#include "gstdxvaav1decoder.h"
|
||||
#include "gstdxvaav1.h"
|
||||
#include <string.h>
|
||||
#include <vector>
|
||||
|
||||
#include "gstdxvatypedef.h"
|
||||
|
||||
GST_DEBUG_CATEGORY_STATIC (gst_dxva_av1_decoder_debug);
|
||||
#define GST_CAT_DEFAULT gst_dxva_av1_decoder_debug
|
||||
|
||||
|
@ -33,9 +34,9 @@ GST_DEBUG_CATEGORY_STATIC (gst_dxva_av1_decoder_debug);
|
|||
struct _GstDxvaAV1DecoderPrivate
|
||||
{
|
||||
GstAV1SequenceHeaderOBU seq_hdr;
|
||||
GST_DXVA_PicParams_AV1 pic_params;
|
||||
DXVA_PicParams_AV1 pic_params;
|
||||
|
||||
std::vector<GST_DXVA_Tile_AV1> tile_list;
|
||||
std::vector<DXVA_Tile_AV1> tile_list;
|
||||
std::vector<guint8> bitstream_buffer;
|
||||
GPtrArray *ref_pics = nullptr;
|
||||
|
||||
|
@ -259,7 +260,7 @@ gst_dxva_av1_decoder_start_picture (GstAV1Decoder * decoder,
|
|||
GstDxvaAV1DecoderClass *klass = GST_DXVA_AV1_DECODER_GET_CLASS (self);
|
||||
const GstAV1SequenceHeaderOBU *seq_hdr = &priv->seq_hdr;
|
||||
const GstAV1FrameHeaderOBU *frame_hdr = &picture->frame_hdr;
|
||||
GST_DXVA_PicParams_AV1 *pic_params = &priv->pic_params;
|
||||
DXVA_PicParams_AV1 *pic_params = &priv->pic_params;
|
||||
GstCodecPicture *codec_picture = GST_CODEC_PICTURE (picture);
|
||||
guint i, j;
|
||||
GstFlowReturn ret;
|
||||
|
@ -276,7 +277,7 @@ gst_dxva_av1_decoder_start_picture (GstAV1Decoder * decoder,
|
|||
priv->tile_list.resize (0);
|
||||
g_ptr_array_set_size (priv->ref_pics, 0);
|
||||
|
||||
memset (pic_params, 0, sizeof (GST_DXVA_PicParams_AV1));
|
||||
memset (pic_params, 0, sizeof (DXVA_PicParams_AV1));
|
||||
|
||||
pic_params->width = frame_hdr->frame_width;
|
||||
pic_params->height = frame_hdr->frame_height;
|
||||
|
@ -600,7 +601,7 @@ gst_dxva_av1_decoder_decode_tile (GstAV1Decoder * decoder,
|
|||
tile_group->num_tiles, tile_group->tg_start, tile_group->tg_end);
|
||||
|
||||
for (guint i = tile_group->tg_start; i <= tile_group->tg_end; i++) {
|
||||
GST_DXVA_Tile_AV1 *dxva_tile = &priv->tile_list[i];
|
||||
DXVA_Tile_AV1 *dxva_tile = &priv->tile_list[i];
|
||||
|
||||
GST_TRACE_OBJECT (self,
|
||||
"Tile offset %d, size %d, row %d, col %d",
|
||||
|
@ -655,15 +656,14 @@ gst_dxva_av1_decoder_end_picture (GstAV1Decoder * decoder,
|
|||
* the last slice data needs to be zero-padded */
|
||||
priv->bitstream_buffer.resize (bitstream_buffer_size, 0);
|
||||
|
||||
GST_DXVA_Tile_AV1 & tile = priv->tile_list.back ();
|
||||
DXVA_Tile_AV1 & tile = priv->tile_list.back ();
|
||||
tile.DataSize += padding;
|
||||
}
|
||||
|
||||
args.picture_params = &priv->pic_params;
|
||||
args.picture_params_size = sizeof (GST_DXVA_PicParams_AV1);
|
||||
args.picture_params_size = sizeof (DXVA_PicParams_AV1);
|
||||
args.slice_control = &priv->tile_list[0];
|
||||
args.slice_control_size =
|
||||
sizeof (GST_DXVA_Tile_AV1) * priv->tile_list.size ();
|
||||
args.slice_control_size = sizeof (DXVA_Tile_AV1) * priv->tile_list.size ();
|
||||
args.bitstream = &priv->bitstream_buffer[0];
|
||||
args.bitstream_size = priv->bitstream_buffer.size ();
|
||||
|
||||
|
|
|
@ -31,12 +31,16 @@ G_BEGIN_DECLS
|
|||
#define GST_DXVA_AV1_DECODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj),GST_TYPE_DXVA_AV1_DECODER,GstDxvaAV1DecoderClass))
|
||||
#define GST_IS_DXVA_AV1_DECODER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DXVA_AV1_DECODER))
|
||||
#define GST_IS_DXVA_AV1_DECODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DXVA_AV1_DECODER))
|
||||
#define GST_DXVA_AV1_DECODER_CAST(obj) ((GstDxvaAV1Decoder*)obj)
|
||||
|
||||
typedef struct _GstDxvaAV1Decoder GstDxvaAV1Decoder;
|
||||
typedef struct _GstDxvaAV1DecoderClass GstDxvaAV1DecoderClass;
|
||||
typedef struct _GstDxvaAV1DecoderPrivate GstDxvaAV1DecoderPrivate;
|
||||
|
||||
/**
|
||||
* GstDxvaAV1Decoder:
|
||||
*
|
||||
* Since: 1.24
|
||||
*/
|
||||
struct _GstDxvaAV1Decoder
|
||||
{
|
||||
GstAV1Decoder parent;
|
||||
|
@ -45,6 +49,11 @@ struct _GstDxvaAV1Decoder
|
|||
GstDxvaAV1DecoderPrivate *priv;
|
||||
};
|
||||
|
||||
/**
|
||||
* GstDxvaAV1DecoderClass:
|
||||
*
|
||||
* Since: 1.24
|
||||
*/
|
||||
struct _GstDxvaAV1DecoderClass
|
||||
{
|
||||
GstAV1DecoderClass parent_class;
|
||||
|
|
|
@ -25,13 +25,7 @@
|
|||
#include <string.h>
|
||||
#include <vector>
|
||||
|
||||
/* HACK: to expose dxva data structure on UWP */
|
||||
#ifdef WINAPI_PARTITION_DESKTOP
|
||||
#undef WINAPI_PARTITION_DESKTOP
|
||||
#endif
|
||||
#define WINAPI_PARTITION_DESKTOP 1
|
||||
#include <d3d9.h>
|
||||
#include <dxva.h>
|
||||
#include "gstdxvatypedef.h"
|
||||
|
||||
GST_DEBUG_CATEGORY_STATIC (gst_dxva_h264_decoder_debug);
|
||||
#define GST_CAT_DEFAULT gst_dxva_h264_decoder_debug
|
||||
|
|
|
@ -31,12 +31,16 @@ G_BEGIN_DECLS
|
|||
#define GST_DXVA_H264_DECODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj),GST_TYPE_DXVA_H264_DECODER,GstDxvaH264DecoderClass))
|
||||
#define GST_IS_DXVA_H264_DECODER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DXVA_H264_DECODER))
|
||||
#define GST_IS_DXVA_H264_DECODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DXVA_H264_DECODER))
|
||||
#define GST_DXVA_H264_DECODER_CAST(obj) ((GstDxvaH264Decoder*)obj)
|
||||
|
||||
typedef struct _GstDxvaH264Decoder GstDxvaH264Decoder;
|
||||
typedef struct _GstDxvaH264DecoderClass GstDxvaH264DecoderClass;
|
||||
typedef struct _GstDxvaH264DecoderPrivate GstDxvaH264DecoderPrivate;
|
||||
|
||||
/**
|
||||
* GstDxvaH264Decoder:
|
||||
*
|
||||
* Since: 1.24
|
||||
*/
|
||||
struct _GstDxvaH264Decoder
|
||||
{
|
||||
GstH264Decoder parent;
|
||||
|
@ -45,6 +49,11 @@ struct _GstDxvaH264Decoder
|
|||
GstDxvaH264DecoderPrivate *priv;
|
||||
};
|
||||
|
||||
/**
|
||||
* GstDxvaH264DecoderClass:
|
||||
*
|
||||
* Since: 1.24
|
||||
*/
|
||||
struct _GstDxvaH264DecoderClass
|
||||
{
|
||||
GstH264DecoderClass parent_class;
|
||||
|
|
|
@ -25,13 +25,7 @@
|
|||
#include <string.h>
|
||||
#include <vector>
|
||||
|
||||
/* HACK: to expose dxva data structure on UWP */
|
||||
#ifdef WINAPI_PARTITION_DESKTOP
|
||||
#undef WINAPI_PARTITION_DESKTOP
|
||||
#endif
|
||||
#define WINAPI_PARTITION_DESKTOP 1
|
||||
#include <d3d9.h>
|
||||
#include <dxva.h>
|
||||
#include "gstdxvatypedef.h"
|
||||
|
||||
GST_DEBUG_CATEGORY_STATIC (gst_dxva_h265_decoder_debug);
|
||||
#define GST_CAT_DEFAULT gst_dxva_h265_decoder_debug
|
||||
|
|
|
@ -31,12 +31,16 @@ G_BEGIN_DECLS
|
|||
#define GST_DXVA_H265_DECODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj),GST_TYPE_DXVA_H265_DECODER,GstDxvaH265DecoderClass))
|
||||
#define GST_IS_DXVA_H265_DECODER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DXVA_H265_DECODER))
|
||||
#define GST_IS_DXVA_H265_DECODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DXVA_H265_DECODER))
|
||||
#define GST_DXVA_H265_DECODER_CAST(obj) ((GstDxvaH265Decoder*)obj)
|
||||
|
||||
typedef struct _GstDxvaH265Decoder GstDxvaH265Decoder;
|
||||
typedef struct _GstDxvaH265DecoderClass GstDxvaH265DecoderClass;
|
||||
typedef struct _GstDxvaH265DecoderPrivate GstDxvaH265DecoderPrivate;
|
||||
|
||||
/**
|
||||
* GstDxvaH265Decoder:
|
||||
*
|
||||
* Since: 1.24
|
||||
*/
|
||||
struct _GstDxvaH265Decoder
|
||||
{
|
||||
GstH265Decoder parent;
|
||||
|
@ -45,6 +49,11 @@ struct _GstDxvaH265Decoder
|
|||
GstDxvaH265DecoderPrivate *priv;
|
||||
};
|
||||
|
||||
/**
|
||||
* GstDxvaH265DecoderClass:
|
||||
*
|
||||
* Since: 1.24
|
||||
*/
|
||||
struct _GstDxvaH265DecoderClass
|
||||
{
|
||||
GstH265DecoderClass parent_class;
|
||||
|
|
|
@ -25,13 +25,7 @@
|
|||
#include <string.h>
|
||||
#include <vector>
|
||||
|
||||
/* HACK: to expose dxva data structure on UWP */
|
||||
#ifdef WINAPI_PARTITION_DESKTOP
|
||||
#undef WINAPI_PARTITION_DESKTOP
|
||||
#endif
|
||||
#define WINAPI_PARTITION_DESKTOP 1
|
||||
#include <d3d9.h>
|
||||
#include <dxva.h>
|
||||
#include "gstdxvatypedef.h"
|
||||
|
||||
GST_DEBUG_CATEGORY_STATIC (gst_dxva_mpeg2_decoder_debug);
|
||||
#define GST_CAT_DEFAULT gst_dxva_mpeg2_decoder_debug
|
||||
|
|
|
@ -31,12 +31,16 @@ G_BEGIN_DECLS
|
|||
#define GST_DXVA_MPEG2_DECODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj),GST_TYPE_DXVA_MPEG2_DECODER,GstDxvaMpeg2DecoderClass))
|
||||
#define GST_IS_DXVA_MPEG2_DECODER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DXVA_MPEG2_DECODER))
|
||||
#define GST_IS_DXVA_MPEG2_DECODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DXVA_MPEG2_DECODER))
|
||||
#define GST_DXVA_MPEG2_DECODER_CAST(obj) ((GstDxvaMpeg2Decoder*)obj)
|
||||
|
||||
typedef struct _GstDxvaMpeg2Decoder GstDxvaMpeg2Decoder;
|
||||
typedef struct _GstDxvaMpeg2DecoderClass GstDxvaMpeg2DecoderClass;
|
||||
typedef struct _GstDxvaMpeg2DecoderPrivate GstDxvaMpeg2DecoderPrivate;
|
||||
|
||||
/**
|
||||
* GstDxvaMpeg2Decoder:
|
||||
*
|
||||
* Since: 1.24
|
||||
*/
|
||||
struct _GstDxvaMpeg2Decoder
|
||||
{
|
||||
GstMpeg2Decoder parent;
|
||||
|
@ -45,6 +49,11 @@ struct _GstDxvaMpeg2Decoder
|
|||
GstDxvaMpeg2DecoderPrivate *priv;
|
||||
};
|
||||
|
||||
/**
|
||||
* GstDxvaMpeg2DecoderClass:
|
||||
*
|
||||
* Since: 1.24
|
||||
*/
|
||||
struct _GstDxvaMpeg2DecoderClass
|
||||
{
|
||||
GstMpeg2DecoderClass parent_class;
|
||||
|
|
834
subprojects/gst-plugins-bad/gst-libs/gst/dxva/gstdxvatypedef.h
Normal file
834
subprojects/gst-plugins-bad/gst-libs/gst/dxva/gstdxvatypedef.h
Normal file
|
@ -0,0 +1,834 @@
|
|||
/* GStreamer
|
||||
* Copyright (C) 2023 Seungha Yang <seungha@centricular.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifdef G_OS_WIN32
|
||||
#include <windows.h>
|
||||
#else
|
||||
typedef int INT;
|
||||
typedef unsigned int UINT;
|
||||
typedef unsigned int UINT32;
|
||||
typedef unsigned char UCHAR;
|
||||
typedef unsigned char BYTE;
|
||||
typedef char CHAR;
|
||||
typedef unsigned short UINT16;
|
||||
typedef unsigned short USHORT;
|
||||
typedef unsigned short WORD;
|
||||
typedef unsigned long ULONG;
|
||||
typedef unsigned long DWORD;
|
||||
typedef short SHORT;
|
||||
#endif
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#pragma pack(push, BeforeDXVApacking, 1)
|
||||
typedef struct _DXVA_PicEntry_H264
|
||||
{
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
UCHAR Index7Bits:7;
|
||||
UCHAR AssociatedFlag:1;
|
||||
};
|
||||
UCHAR bPicEntry;
|
||||
};
|
||||
} DXVA_PicEntry_H264, *LPDXVA_PicEntry_H264; /* 1 byte */
|
||||
|
||||
typedef struct _DXVA_PicParams_H264
|
||||
{
|
||||
USHORT wFrameWidthInMbsMinus1;
|
||||
USHORT wFrameHeightInMbsMinus1;
|
||||
DXVA_PicEntry_H264 CurrPic; /* flag is bot field flag */
|
||||
UCHAR num_ref_frames;
|
||||
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
USHORT field_pic_flag:1;
|
||||
USHORT MbaffFrameFlag:1;
|
||||
USHORT residual_colour_transform_flag:1;
|
||||
USHORT sp_for_switch_flag:1;
|
||||
USHORT chroma_format_idc:2;
|
||||
USHORT RefPicFlag:1;
|
||||
USHORT constrained_intra_pred_flag:1;
|
||||
|
||||
USHORT weighted_pred_flag:1;
|
||||
USHORT weighted_bipred_idc:2;
|
||||
USHORT MbsConsecutiveFlag:1;
|
||||
USHORT frame_mbs_only_flag:1;
|
||||
USHORT transform_8x8_mode_flag:1;
|
||||
USHORT MinLumaBipredSize8x8Flag:1;
|
||||
USHORT IntraPicFlag:1;
|
||||
};
|
||||
USHORT wBitFields;
|
||||
};
|
||||
UCHAR bit_depth_luma_minus8;
|
||||
UCHAR bit_depth_chroma_minus8;
|
||||
|
||||
USHORT Reserved16Bits;
|
||||
UINT StatusReportFeedbackNumber;
|
||||
|
||||
DXVA_PicEntry_H264 RefFrameList[16]; /* flag LT */
|
||||
INT CurrFieldOrderCnt[2];
|
||||
INT FieldOrderCntList[16][2];
|
||||
|
||||
CHAR pic_init_qs_minus26;
|
||||
CHAR chroma_qp_index_offset; /* also used for QScb */
|
||||
CHAR second_chroma_qp_index_offset; /* also for QScr */
|
||||
UCHAR ContinuationFlag;
|
||||
|
||||
/* remainder for parsing */
|
||||
CHAR pic_init_qp_minus26;
|
||||
UCHAR num_ref_idx_l0_active_minus1;
|
||||
UCHAR num_ref_idx_l1_active_minus1;
|
||||
UCHAR Reserved8BitsA;
|
||||
|
||||
USHORT FrameNumList[16];
|
||||
UINT UsedForReferenceFlags;
|
||||
USHORT NonExistingFrameFlags;
|
||||
USHORT frame_num;
|
||||
|
||||
UCHAR log2_max_frame_num_minus4;
|
||||
UCHAR pic_order_cnt_type;
|
||||
UCHAR log2_max_pic_order_cnt_lsb_minus4;
|
||||
UCHAR delta_pic_order_always_zero_flag;
|
||||
|
||||
UCHAR direct_8x8_inference_flag;
|
||||
UCHAR entropy_coding_mode_flag;
|
||||
UCHAR pic_order_present_flag;
|
||||
UCHAR num_slice_groups_minus1;
|
||||
|
||||
UCHAR slice_group_map_type;
|
||||
UCHAR deblocking_filter_control_present_flag;
|
||||
UCHAR redundant_pic_cnt_present_flag;
|
||||
UCHAR Reserved8BitsB;
|
||||
|
||||
USHORT slice_group_change_rate_minus1;
|
||||
|
||||
UCHAR SliceGroupMap[810]; /* 4b/sgmu, Size BT.601 */
|
||||
|
||||
} DXVA_PicParams_H264, *LPDXVA_PicParams_H264;
|
||||
|
||||
typedef struct _DXVA_Qmatrix_H264
|
||||
{
|
||||
UCHAR bScalingLists4x4[6][16];
|
||||
UCHAR bScalingLists8x8[2][64];
|
||||
|
||||
} DXVA_Qmatrix_H264, *LPDXVA_Qmatrix_H264;
|
||||
|
||||
typedef struct _DXVA_Slice_H264_Short
|
||||
{
|
||||
UINT BSNALunitDataLocation; /* type 1..5 */
|
||||
UINT SliceBytesInBuffer; /* for off-host parse */
|
||||
USHORT wBadSliceChopping; /* for off-host parse */
|
||||
} DXVA_Slice_H264_Short, *LPDXVA_Slice_H264_Short;
|
||||
|
||||
typedef struct _DXVA_PicEntry_HEVC
|
||||
{
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
UCHAR Index7Bits:7;
|
||||
UCHAR AssociatedFlag:1;
|
||||
};
|
||||
UCHAR bPicEntry;
|
||||
};
|
||||
} DXVA_PicEntry_HEVC, *LPDXVA_PicEntry_HEVC;
|
||||
|
||||
typedef struct _DXVA_PicParams_HEVC
|
||||
{
|
||||
USHORT PicWidthInMinCbsY;
|
||||
USHORT PicHeightInMinCbsY;
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
USHORT chroma_format_idc:2;
|
||||
USHORT separate_colour_plane_flag:1;
|
||||
USHORT bit_depth_luma_minus8:3;
|
||||
USHORT bit_depth_chroma_minus8:3;
|
||||
USHORT log2_max_pic_order_cnt_lsb_minus4:4;
|
||||
USHORT NoPicReorderingFlag:1;
|
||||
USHORT NoBiPredFlag:1;
|
||||
USHORT ReservedBits1:1;
|
||||
};
|
||||
USHORT wFormatAndSequenceInfoFlags;
|
||||
};
|
||||
DXVA_PicEntry_HEVC CurrPic;
|
||||
UCHAR sps_max_dec_pic_buffering_minus1;
|
||||
UCHAR log2_min_luma_coding_block_size_minus3;
|
||||
UCHAR log2_diff_max_min_luma_coding_block_size;
|
||||
UCHAR log2_min_transform_block_size_minus2;
|
||||
UCHAR log2_diff_max_min_transform_block_size;
|
||||
UCHAR max_transform_hierarchy_depth_inter;
|
||||
UCHAR max_transform_hierarchy_depth_intra;
|
||||
UCHAR num_short_term_ref_pic_sets;
|
||||
UCHAR num_long_term_ref_pics_sps;
|
||||
UCHAR num_ref_idx_l0_default_active_minus1;
|
||||
UCHAR num_ref_idx_l1_default_active_minus1;
|
||||
CHAR init_qp_minus26;
|
||||
UCHAR ucNumDeltaPocsOfRefRpsIdx;
|
||||
USHORT wNumBitsForShortTermRPSInSlice;
|
||||
USHORT ReservedBits2;
|
||||
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
UINT32 scaling_list_enabled_flag:1;
|
||||
UINT32 amp_enabled_flag:1;
|
||||
UINT32 sample_adaptive_offset_enabled_flag:1;
|
||||
UINT32 pcm_enabled_flag:1;
|
||||
UINT32 pcm_sample_bit_depth_luma_minus1:4;
|
||||
UINT32 pcm_sample_bit_depth_chroma_minus1:4;
|
||||
UINT32 log2_min_pcm_luma_coding_block_size_minus3:2;
|
||||
UINT32 log2_diff_max_min_pcm_luma_coding_block_size:2;
|
||||
UINT32 pcm_loop_filter_disabled_flag:1;
|
||||
UINT32 long_term_ref_pics_present_flag:1;
|
||||
UINT32 sps_temporal_mvp_enabled_flag:1;
|
||||
UINT32 strong_intra_smoothing_enabled_flag:1;
|
||||
UINT32 dependent_slice_segments_enabled_flag:1;
|
||||
UINT32 output_flag_present_flag:1;
|
||||
UINT32 num_extra_slice_header_bits:3;
|
||||
UINT32 sign_data_hiding_enabled_flag:1;
|
||||
UINT32 cabac_init_present_flag:1;
|
||||
UINT32 ReservedBits3:5;
|
||||
};
|
||||
UINT32 dwCodingParamToolFlags;
|
||||
};
|
||||
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
UINT32 constrained_intra_pred_flag:1;
|
||||
UINT32 transform_skip_enabled_flag:1;
|
||||
UINT32 cu_qp_delta_enabled_flag:1;
|
||||
UINT32 pps_slice_chroma_qp_offsets_present_flag:1;
|
||||
UINT32 weighted_pred_flag:1;
|
||||
UINT32 weighted_bipred_flag:1;
|
||||
UINT32 transquant_bypass_enabled_flag:1;
|
||||
UINT32 tiles_enabled_flag:1;
|
||||
UINT32 entropy_coding_sync_enabled_flag:1;
|
||||
UINT32 uniform_spacing_flag:1;
|
||||
UINT32 loop_filter_across_tiles_enabled_flag:1;
|
||||
UINT32 pps_loop_filter_across_slices_enabled_flag:1;
|
||||
UINT32 deblocking_filter_override_enabled_flag:1;
|
||||
UINT32 pps_deblocking_filter_disabled_flag:1;
|
||||
UINT32 lists_modification_present_flag:1;
|
||||
UINT32 slice_segment_header_extension_present_flag:1;
|
||||
UINT32 IrapPicFlag:1;
|
||||
UINT32 IdrPicFlag:1;
|
||||
UINT32 IntraPicFlag:1;
|
||||
UINT32 ReservedBits4:13;
|
||||
};
|
||||
UINT32 dwCodingSettingPicturePropertyFlags;
|
||||
};
|
||||
CHAR pps_cb_qp_offset;
|
||||
CHAR pps_cr_qp_offset;
|
||||
UCHAR num_tile_columns_minus1;
|
||||
UCHAR num_tile_rows_minus1;
|
||||
USHORT column_width_minus1[19];
|
||||
USHORT row_height_minus1[21];
|
||||
UCHAR diff_cu_qp_delta_depth;
|
||||
CHAR pps_beta_offset_div2;
|
||||
CHAR pps_tc_offset_div2;
|
||||
UCHAR log2_parallel_merge_level_minus2;
|
||||
INT CurrPicOrderCntVal;
|
||||
DXVA_PicEntry_HEVC RefPicList[15];
|
||||
UCHAR ReservedBits5;
|
||||
INT PicOrderCntValList[15];
|
||||
UCHAR RefPicSetStCurrBefore[8];
|
||||
UCHAR RefPicSetStCurrAfter[8];
|
||||
UCHAR RefPicSetLtCurr[8];
|
||||
USHORT ReservedBits6;
|
||||
USHORT ReservedBits7;
|
||||
UINT StatusReportFeedbackNumber;
|
||||
} DXVA_PicParams_HEVC, *LPDXVA_PicParams_HEVC;
|
||||
|
||||
typedef struct _DXVA_Qmatrix_HEVC
|
||||
{
|
||||
UCHAR ucScalingLists0[6][16];
|
||||
UCHAR ucScalingLists1[6][64];
|
||||
UCHAR ucScalingLists2[6][64];
|
||||
UCHAR ucScalingLists3[2][64];
|
||||
UCHAR ucScalingListDCCoefSizeID2[6];
|
||||
UCHAR ucScalingListDCCoefSizeID3[2];
|
||||
} DXVA_Qmatrix_HEVC, *LPDXVA_Qmatrix_HEVC;
|
||||
|
||||
typedef struct _DXVA_Slice_HEVC_Short
|
||||
{
|
||||
UINT BSNALunitDataLocation;
|
||||
UINT SliceBytesInBuffer;
|
||||
USHORT wBadSliceChopping;
|
||||
} DXVA_Slice_HEVC_Short, *LPDXVA_Slice_HEVC_Short;
|
||||
|
||||
#define DXVA_USUAL_BLOCK_WIDTH 8
|
||||
#define DXVA_USUAL_BLOCK_HEIGHT 8
|
||||
#define DXVA_USUAL_BLOCK_SIZE (DXVA_USUAL_BLOCK_WIDTH * DXVA_USUAL_BLOCK_HEIGHT)
|
||||
|
||||
typedef struct _DXVA_PictureParameters
|
||||
{
|
||||
|
||||
WORD wDecodedPictureIndex;
|
||||
WORD wDeblockedPictureIndex;
|
||||
|
||||
WORD wForwardRefPictureIndex;
|
||||
WORD wBackwardRefPictureIndex;
|
||||
|
||||
WORD wPicWidthInMBminus1;
|
||||
WORD wPicHeightInMBminus1;
|
||||
|
||||
BYTE bMacroblockWidthMinus1;
|
||||
BYTE bMacroblockHeightMinus1;
|
||||
|
||||
BYTE bBlockWidthMinus1;
|
||||
BYTE bBlockHeightMinus1;
|
||||
|
||||
BYTE bBPPminus1;
|
||||
|
||||
BYTE bPicStructure;
|
||||
BYTE bSecondField;
|
||||
BYTE bPicIntra;
|
||||
BYTE bPicBackwardPrediction;
|
||||
|
||||
BYTE bBidirectionalAveragingMode;
|
||||
BYTE bMVprecisionAndChromaRelation;
|
||||
BYTE bChromaFormat;
|
||||
|
||||
BYTE bPicScanFixed;
|
||||
BYTE bPicScanMethod;
|
||||
BYTE bPicReadbackRequests;
|
||||
|
||||
BYTE bRcontrol;
|
||||
BYTE bPicSpatialResid8;
|
||||
BYTE bPicOverflowBlocks;
|
||||
BYTE bPicExtrapolation;
|
||||
|
||||
BYTE bPicDeblocked;
|
||||
BYTE bPicDeblockConfined;
|
||||
BYTE bPic4MVallowed;
|
||||
BYTE bPicOBMC;
|
||||
BYTE bPicBinPB;
|
||||
BYTE bMV_RPS;
|
||||
|
||||
BYTE bReservedBits;
|
||||
|
||||
WORD wBitstreamFcodes;
|
||||
WORD wBitstreamPCEelements;
|
||||
BYTE bBitstreamConcealmentNeed;
|
||||
BYTE bBitstreamConcealmentMethod;
|
||||
|
||||
} DXVA_PictureParameters, *LPDXVA_PictureParameters;
|
||||
|
||||
typedef struct _DXVA_QmatrixData
|
||||
{
|
||||
BYTE bNewQmatrix[4]; /* intra Y, inter Y, intra chroma, inter chroma */
|
||||
WORD Qmatrix[4][DXVA_USUAL_BLOCK_WIDTH * DXVA_USUAL_BLOCK_HEIGHT];
|
||||
} DXVA_QmatrixData, *LPDXVA_QmatrixData;
|
||||
|
||||
typedef struct _DXVA_SliceInfo
|
||||
{
|
||||
WORD wHorizontalPosition;
|
||||
WORD wVerticalPosition;
|
||||
DWORD dwSliceBitsInBuffer;
|
||||
DWORD dwSliceDataLocation;
|
||||
BYTE bStartCodeBitOffset;
|
||||
BYTE bReservedBits;
|
||||
WORD wMBbitOffset;
|
||||
WORD wNumberMBsInSlice;
|
||||
WORD wQuantizerScaleCode;
|
||||
WORD wBadSliceChopping;
|
||||
} DXVA_SliceInfo, *LPDXVA_SliceInfo;
|
||||
|
||||
typedef struct _DXVA_PicEntry_VPx
|
||||
{
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
UCHAR Index7Bits:7;
|
||||
UCHAR AssociatedFlag:1;
|
||||
};
|
||||
UCHAR bPicEntry;
|
||||
};
|
||||
} DXVA_PicEntry_VPx, *LPDXVA_PicEntry_VPx;
|
||||
|
||||
typedef struct _segmentation_VP8
|
||||
{
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
UCHAR segmentation_enabled:1;
|
||||
UCHAR update_mb_segmentation_map:1;
|
||||
UCHAR update_mb_segmentation_data:1;
|
||||
UCHAR mb_segement_abs_delta:1;
|
||||
UCHAR ReservedSegmentFlags4Bits:4;
|
||||
};
|
||||
UCHAR wSegmentFlags;
|
||||
};
|
||||
CHAR segment_feature_data[2][4];
|
||||
UCHAR mb_segment_tree_probs[3];
|
||||
} DXVA_segmentation_VP8;
|
||||
|
||||
/* VP8 picture parameters structure */
|
||||
typedef struct _DXVA_PicParams_VP8
|
||||
{
|
||||
UINT first_part_size;
|
||||
UINT width;
|
||||
UINT height;
|
||||
DXVA_PicEntry_VPx CurrPic;
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
UCHAR frame_type:1;
|
||||
UCHAR version:3;
|
||||
UCHAR show_frame:1;
|
||||
UCHAR clamp_type:1;
|
||||
UCHAR ReservedFrameTag3Bits:2;
|
||||
};
|
||||
UCHAR wFrameTagFlags;
|
||||
};
|
||||
DXVA_segmentation_VP8 stVP8Segments;
|
||||
UCHAR filter_type;
|
||||
UCHAR filter_level;
|
||||
UCHAR sharpness_level;
|
||||
UCHAR mode_ref_lf_delta_enabled;
|
||||
UCHAR mode_ref_lf_delta_update;
|
||||
CHAR ref_lf_deltas[4];
|
||||
CHAR mode_lf_deltas[4];
|
||||
UCHAR log2_nbr_of_dct_partitions;
|
||||
UCHAR base_qindex;
|
||||
CHAR y1dc_delta_q;
|
||||
CHAR y2dc_delta_q;
|
||||
CHAR y2ac_delta_q;
|
||||
CHAR uvdc_delta_q;
|
||||
CHAR uvac_delta_q;
|
||||
DXVA_PicEntry_VPx alt_fb_idx;
|
||||
DXVA_PicEntry_VPx gld_fb_idx;
|
||||
DXVA_PicEntry_VPx lst_fb_idx;
|
||||
UCHAR ref_frame_sign_bias_golden;
|
||||
UCHAR ref_frame_sign_bias_altref;
|
||||
UCHAR refresh_entropy_probs;
|
||||
UCHAR vp8_coef_update_probs[4][8][3][11];
|
||||
UCHAR mb_no_coeff_skip;
|
||||
UCHAR prob_skip_false;
|
||||
UCHAR prob_intra;
|
||||
UCHAR prob_last;
|
||||
UCHAR prob_golden;
|
||||
UCHAR intra_16x16_prob[4];
|
||||
UCHAR intra_chroma_prob[3];
|
||||
UCHAR vp8_mv_update_probs[2][19];
|
||||
USHORT ReservedBits1;
|
||||
USHORT ReservedBits2;
|
||||
USHORT ReservedBits3;
|
||||
UINT StatusReportFeedbackNumber;
|
||||
} DXVA_PicParams_VP8, *LPDXVA_PicParams_VP8;
|
||||
|
||||
typedef struct _DXVA_Slice_VPx_Short
|
||||
{
|
||||
UINT BSNALunitDataLocation;
|
||||
UINT SliceBytesInBuffer;
|
||||
USHORT wBadSliceChopping;
|
||||
} DXVA_Slice_VPx_Short, *LPDXVA_Slice_VPx_Short;
|
||||
|
||||
typedef struct _segmentation_VP9
|
||||
{
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
UCHAR enabled:1;
|
||||
UCHAR update_map:1;
|
||||
UCHAR temporal_update:1;
|
||||
UCHAR abs_delta:1;
|
||||
UCHAR ReservedSegmentFlags4Bits:4;
|
||||
};
|
||||
UCHAR wSegmentInfoFlags;
|
||||
};
|
||||
UCHAR tree_probs[7];
|
||||
UCHAR pred_probs[3];
|
||||
SHORT feature_data[8][4];
|
||||
UCHAR feature_mask[8];
|
||||
} DXVA_segmentation_VP9;
|
||||
|
||||
typedef struct _DXVA_PicParams_VP9
|
||||
{
|
||||
DXVA_PicEntry_VPx CurrPic;
|
||||
UCHAR profile;
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
USHORT frame_type:1;
|
||||
USHORT show_frame:1;
|
||||
USHORT error_resilient_mode:1;
|
||||
USHORT subsampling_x:1;
|
||||
USHORT subsampling_y:1;
|
||||
USHORT extra_plane:1;
|
||||
USHORT refresh_frame_context:1;
|
||||
USHORT frame_parallel_decoding_mode:1;
|
||||
USHORT intra_only:1;
|
||||
USHORT frame_context_idx:2;
|
||||
USHORT reset_frame_context:2;
|
||||
USHORT allow_high_precision_mv:1;
|
||||
USHORT ReservedFormatInfo2Bits:2;
|
||||
};
|
||||
USHORT wFormatAndPictureInfoFlags;
|
||||
};
|
||||
UINT width;
|
||||
UINT height;
|
||||
UCHAR BitDepthMinus8Luma;
|
||||
UCHAR BitDepthMinus8Chroma;
|
||||
UCHAR interp_filter;
|
||||
UCHAR Reserved8Bits;
|
||||
DXVA_PicEntry_VPx ref_frame_map[8];
|
||||
UINT ref_frame_coded_width[8];
|
||||
UINT ref_frame_coded_height[8];
|
||||
DXVA_PicEntry_VPx frame_refs[3];
|
||||
CHAR ref_frame_sign_bias[4];
|
||||
CHAR filter_level;
|
||||
CHAR sharpness_level;
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
UCHAR mode_ref_delta_enabled:1;
|
||||
UCHAR mode_ref_delta_update:1;
|
||||
UCHAR use_prev_in_find_mv_refs:1;
|
||||
UCHAR ReservedControlInfo5Bits:5;
|
||||
};
|
||||
UCHAR wControlInfoFlags;
|
||||
};
|
||||
CHAR ref_deltas[4];
|
||||
CHAR mode_deltas[2];
|
||||
SHORT base_qindex;
|
||||
CHAR y_dc_delta_q;
|
||||
CHAR uv_dc_delta_q;
|
||||
CHAR uv_ac_delta_q;
|
||||
DXVA_segmentation_VP9 stVP9Segments;
|
||||
UCHAR log2_tile_cols;
|
||||
UCHAR log2_tile_rows;
|
||||
USHORT uncompressed_header_size_byte_aligned;
|
||||
USHORT first_partition_size;
|
||||
USHORT Reserved16Bits;
|
||||
UINT Reserved32Bits;
|
||||
UINT StatusReportFeedbackNumber;
|
||||
} DXVA_PicParams_VP9, *LPDXVA_PicParams_VP9;
|
||||
|
||||
typedef struct _DXVA_PicEntry_AV1
|
||||
{
|
||||
|
||||
UINT width;
|
||||
UINT height;
|
||||
|
||||
// Global motion parameters
|
||||
INT wmmat[6];
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
UCHAR wminvalid:1;
|
||||
UCHAR wmtype:2;
|
||||
UCHAR Reserved:5;
|
||||
};
|
||||
UCHAR GlobalMotionFlags;
|
||||
};
|
||||
|
||||
UCHAR Index;
|
||||
UINT16 Reserved16Bits;
|
||||
|
||||
} DXVA_PicEntry_AV1, *LPDXVA_PicEntry_AV1;
|
||||
|
||||
typedef struct _DXVA_PicParams_AV1
|
||||
{
|
||||
UINT width;
|
||||
UINT height;
|
||||
|
||||
UINT max_width;
|
||||
UINT max_height;
|
||||
|
||||
UCHAR CurrPicTextureIndex;
|
||||
UCHAR superres_denom;
|
||||
UCHAR bitdepth;
|
||||
UCHAR seq_profile;
|
||||
|
||||
// Tiles:
|
||||
struct
|
||||
{
|
||||
UCHAR cols;
|
||||
UCHAR rows;
|
||||
USHORT context_update_id;
|
||||
USHORT widths[64];
|
||||
USHORT heights[64];
|
||||
} tiles;
|
||||
|
||||
// Coding Tools
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
UINT use_128x128_superblock:1;
|
||||
UINT intra_edge_filter:1;
|
||||
UINT interintra_compound:1;
|
||||
UINT masked_compound:1;
|
||||
UINT warped_motion:1;
|
||||
UINT dual_filter:1;
|
||||
UINT jnt_comp:1;
|
||||
UINT screen_content_tools:1;
|
||||
UINT integer_mv:1;
|
||||
UINT cdef:1;
|
||||
UINT restoration:1;
|
||||
UINT film_grain:1;
|
||||
UINT intrabc:1;
|
||||
UINT high_precision_mv:1;
|
||||
UINT switchable_motion_mode:1;
|
||||
UINT filter_intra:1;
|
||||
UINT disable_frame_end_update_cdf:1;
|
||||
UINT disable_cdf_update:1;
|
||||
UINT reference_mode:1;
|
||||
UINT skip_mode:1;
|
||||
UINT reduced_tx_set:1;
|
||||
UINT superres:1;
|
||||
UINT tx_mode:2;
|
||||
UINT use_ref_frame_mvs:1;
|
||||
UINT enable_ref_frame_mvs:1;
|
||||
UINT reference_frame_update:1;
|
||||
UINT Reserved:5;
|
||||
};
|
||||
UINT32 CodingParamToolFlags;
|
||||
} coding;
|
||||
|
||||
// Format & Picture Info flags
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
UCHAR frame_type:2;
|
||||
UCHAR show_frame:1;
|
||||
UCHAR showable_frame:1;
|
||||
UCHAR subsampling_x:1;
|
||||
UCHAR subsampling_y:1;
|
||||
UCHAR mono_chrome:1;
|
||||
UCHAR Reserved:1;
|
||||
};
|
||||
UCHAR FormatAndPictureInfoFlags;
|
||||
} format;
|
||||
|
||||
// References
|
||||
UCHAR primary_ref_frame;
|
||||
UCHAR order_hint;
|
||||
UCHAR order_hint_bits;
|
||||
|
||||
DXVA_PicEntry_AV1 frame_refs[7];
|
||||
UCHAR RefFrameMapTextureIndex[8];
|
||||
|
||||
// Loop filter parameters
|
||||
struct
|
||||
{
|
||||
UCHAR filter_level[2];
|
||||
UCHAR filter_level_u;
|
||||
UCHAR filter_level_v;
|
||||
|
||||
UCHAR sharpness_level;
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
UCHAR mode_ref_delta_enabled:1;
|
||||
UCHAR mode_ref_delta_update:1;
|
||||
UCHAR delta_lf_multi:1;
|
||||
UCHAR delta_lf_present:1;
|
||||
UCHAR Reserved:4;
|
||||
};
|
||||
UCHAR ControlFlags;
|
||||
};
|
||||
CHAR ref_deltas[8];
|
||||
CHAR mode_deltas[2];
|
||||
UCHAR delta_lf_res;
|
||||
UCHAR frame_restoration_type[3];
|
||||
USHORT log2_restoration_unit_size[3];
|
||||
UINT16 Reserved16Bits;
|
||||
} loop_filter;
|
||||
|
||||
// Quantization
|
||||
struct
|
||||
{
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
UCHAR delta_q_present:1;
|
||||
UCHAR delta_q_res:2;
|
||||
UCHAR Reserved:5;
|
||||
};
|
||||
UCHAR ControlFlags;
|
||||
};
|
||||
|
||||
UCHAR base_qindex;
|
||||
CHAR y_dc_delta_q;
|
||||
CHAR u_dc_delta_q;
|
||||
CHAR v_dc_delta_q;
|
||||
CHAR u_ac_delta_q;
|
||||
CHAR v_ac_delta_q;
|
||||
// using_qmatrix:
|
||||
UCHAR qm_y;
|
||||
UCHAR qm_u;
|
||||
UCHAR qm_v;
|
||||
UINT16 Reserved16Bits;
|
||||
} quantization;
|
||||
|
||||
// Cdef parameters
|
||||
struct
|
||||
{
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
UCHAR damping:2;
|
||||
UCHAR bits:2;
|
||||
UCHAR Reserved:4;
|
||||
};
|
||||
UCHAR ControlFlags;
|
||||
};
|
||||
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
UCHAR primary:6;
|
||||
UCHAR secondary:2;
|
||||
};
|
||||
UCHAR combined;
|
||||
} y_strengths[8];
|
||||
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
UCHAR primary:6;
|
||||
UCHAR secondary:2;
|
||||
};
|
||||
UCHAR combined;
|
||||
} uv_strengths[8];
|
||||
|
||||
} cdef;
|
||||
|
||||
UCHAR interp_filter;
|
||||
|
||||
// Segmentation
|
||||
struct
|
||||
{
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
UCHAR enabled:1;
|
||||
UCHAR update_map:1;
|
||||
UCHAR update_data:1;
|
||||
UCHAR temporal_update:1;
|
||||
UCHAR Reserved:4;
|
||||
};
|
||||
UCHAR ControlFlags;
|
||||
};
|
||||
UCHAR Reserved24Bits[3];
|
||||
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
UCHAR alt_q:1;
|
||||
UCHAR alt_lf_y_v:1;
|
||||
UCHAR alt_lf_y_h:1;
|
||||
UCHAR alt_lf_u:1;
|
||||
UCHAR alt_lf_v:1;
|
||||
UCHAR ref_frame:1;
|
||||
UCHAR skip:1;
|
||||
UCHAR globalmv:1;
|
||||
};
|
||||
UCHAR mask;
|
||||
} feature_mask[8];
|
||||
|
||||
SHORT feature_data[8][8];
|
||||
|
||||
} segmentation;
|
||||
|
||||
struct
|
||||
{
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
USHORT apply_grain:1;
|
||||
USHORT scaling_shift_minus8:2;
|
||||
USHORT chroma_scaling_from_luma:1;
|
||||
USHORT ar_coeff_lag:2;
|
||||
USHORT ar_coeff_shift_minus6:2;
|
||||
USHORT grain_scale_shift:2;
|
||||
USHORT overlap_flag:1;
|
||||
USHORT clip_to_restricted_range:1;
|
||||
USHORT matrix_coeff_is_identity:1;
|
||||
USHORT Reserved:3;
|
||||
};
|
||||
USHORT ControlFlags;
|
||||
};
|
||||
|
||||
USHORT grain_seed;
|
||||
UCHAR scaling_points_y[14][2];
|
||||
UCHAR num_y_points;
|
||||
UCHAR scaling_points_cb[10][2];
|
||||
UCHAR num_cb_points;
|
||||
UCHAR scaling_points_cr[10][2];
|
||||
UCHAR num_cr_points;
|
||||
UCHAR ar_coeffs_y[24];
|
||||
UCHAR ar_coeffs_cb[25];
|
||||
UCHAR ar_coeffs_cr[25];
|
||||
UCHAR cb_mult;
|
||||
UCHAR cb_luma_mult;
|
||||
UCHAR cr_mult;
|
||||
UCHAR cr_luma_mult;
|
||||
UCHAR Reserved8Bits;
|
||||
SHORT cb_offset;
|
||||
SHORT cr_offset;
|
||||
} film_grain;
|
||||
|
||||
UINT Reserved32Bits;
|
||||
UINT StatusReportFeedbackNumber;
|
||||
} DXVA_PicParams_AV1, *LPDXVA_PicParams_AV1;
|
||||
|
||||
typedef struct _DXVA_Tile_AV1
|
||||
{
|
||||
UINT DataOffset;
|
||||
UINT DataSize;
|
||||
USHORT row;
|
||||
USHORT column;
|
||||
UINT16 Reserved16Bits;
|
||||
UCHAR anchor_frame;
|
||||
UCHAR Reserved8Bits;
|
||||
} DXVA_Tile_AV1, *LPDXVA_Tile_AV1;
|
||||
|
||||
#pragma pack(pop, BeforeDXVApacking)
|
||||
|
||||
G_END_DECLS
|
|
@ -25,13 +25,7 @@
|
|||
#include <string.h>
|
||||
#include <vector>
|
||||
|
||||
/* HACK: to expose dxva data structure on UWP */
|
||||
#ifdef WINAPI_PARTITION_DESKTOP
|
||||
#undef WINAPI_PARTITION_DESKTOP
|
||||
#endif
|
||||
#define WINAPI_PARTITION_DESKTOP 1
|
||||
#include <d3d9.h>
|
||||
#include <dxva.h>
|
||||
#include "gstdxvatypedef.h"
|
||||
|
||||
GST_DEBUG_CATEGORY_STATIC (gst_dxva_vp8_decoder_debug);
|
||||
#define GST_CAT_DEFAULT gst_dxva_vp8_decoder_debug
|
||||
|
|
|
@ -31,12 +31,16 @@ G_BEGIN_DECLS
|
|||
#define GST_DXVA_VP8_DECODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj),GST_TYPE_DXVA_VP8_DECODER,GstDxvaVp8DecoderClass))
|
||||
#define GST_IS_DXVA_VP8_DECODER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DXVA_VP8_DECODER))
|
||||
#define GST_IS_DXVA_VP8_DECODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DXVA_VP8_DECODER))
|
||||
#define GST_DXVA_VP8_DECODER_CAST(obj) ((GstDxvaVp8Decoder*)obj)
|
||||
|
||||
typedef struct _GstDxvaVp8Decoder GstDxvaVp8Decoder;
|
||||
typedef struct _GstDxvaVp8DecoderClass GstDxvaVp8DecoderClass;
|
||||
typedef struct _GstDxvaVp8DecoderPrivate GstDxvaVp8DecoderPrivate;
|
||||
|
||||
/**
|
||||
* GstDxvaVp8Decoder:
|
||||
*
|
||||
* Since: 1.24
|
||||
*/
|
||||
struct _GstDxvaVp8Decoder
|
||||
{
|
||||
GstVp8Decoder parent;
|
||||
|
@ -45,6 +49,11 @@ struct _GstDxvaVp8Decoder
|
|||
GstDxvaVp8DecoderPrivate *priv;
|
||||
};
|
||||
|
||||
/**
|
||||
* GstDxvaVp8DecoderClass:
|
||||
*
|
||||
* Since: 1.24
|
||||
*/
|
||||
struct _GstDxvaVp8DecoderClass
|
||||
{
|
||||
GstVp8DecoderClass parent_class;
|
||||
|
|
|
@ -25,13 +25,7 @@
|
|||
#include <string.h>
|
||||
#include <vector>
|
||||
|
||||
/* HACK: to expose dxva data structure on UWP */
|
||||
#ifdef WINAPI_PARTITION_DESKTOP
|
||||
#undef WINAPI_PARTITION_DESKTOP
|
||||
#endif
|
||||
#define WINAPI_PARTITION_DESKTOP 1
|
||||
#include <d3d9.h>
|
||||
#include <dxva.h>
|
||||
#include "gstdxvatypedef.h"
|
||||
|
||||
GST_DEBUG_CATEGORY_STATIC (gst_dxva_vp9_decoder_debug);
|
||||
#define GST_CAT_DEFAULT gst_dxva_vp9_decoder_debug
|
||||
|
|
|
@ -31,12 +31,16 @@ G_BEGIN_DECLS
|
|||
#define GST_DXVA_VP9_DECODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj),GST_TYPE_DXVA_VP9_DECODER,GstDxvaVp9DecoderClass))
|
||||
#define GST_IS_DXVA_VP9_DECODER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DXVA_VP9_DECODER))
|
||||
#define GST_IS_DXVA_VP9_DECODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DXVA_VP9_DECODER))
|
||||
#define GST_DXVA_VP9_DECODER_CAST(obj) ((GstDxvaVp9Decoder*)obj)
|
||||
|
||||
typedef struct _GstDxvaVp9Decoder GstDxvaVp9Decoder;
|
||||
typedef struct _GstDxvaVp9DecoderClass GstDxvaVp9DecoderClass;
|
||||
typedef struct _GstDxvaVp9DecoderPrivate GstDxvaVp9DecoderPrivate;
|
||||
|
||||
/**
|
||||
* GstDxvaVp9Decoder:
|
||||
*
|
||||
* Since: 1.24
|
||||
*/
|
||||
struct _GstDxvaVp9Decoder
|
||||
{
|
||||
GstVp9Decoder parent;
|
||||
|
@ -45,6 +49,11 @@ struct _GstDxvaVp9Decoder
|
|||
GstDxvaVp9DecoderPrivate *priv;
|
||||
};
|
||||
|
||||
/**
|
||||
* GstDxvaVp9DecoderClass:
|
||||
*
|
||||
* Since: 1.24
|
||||
*/
|
||||
struct _GstDxvaVp9DecoderClass
|
||||
{
|
||||
GstVp9DecoderClass parent_class;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
dxva_sources = [
|
||||
dxva_sources = files(
|
||||
'gstdxvaav1decoder.cpp',
|
||||
'gstdxvah264decoder.cpp',
|
||||
'gstdxvah265decoder.cpp',
|
||||
|
@ -6,7 +6,18 @@ dxva_sources = [
|
|||
'gstdxvautils.cpp',
|
||||
'gstdxvavp8decoder.cpp',
|
||||
'gstdxvavp9decoder.cpp',
|
||||
]
|
||||
)
|
||||
|
||||
dxva_headers = files(
|
||||
'gstdxvaav1decoder.h',
|
||||
'gstdxvah264decoder.h',
|
||||
'gstdxvah265decoder.h',
|
||||
'gstdxvampeg2decoder.h',
|
||||
'gstdxvatypes.h',
|
||||
'gstdxvautils.h',
|
||||
'gstdxvavp8decoder.h',
|
||||
'gstdxvavp9decoder.h',
|
||||
)
|
||||
|
||||
extra_args = [
|
||||
'-DGST_USE_UNSTABLE_API',
|
||||
|
@ -14,24 +25,10 @@ extra_args = [
|
|||
'-DG_LOG_DOMAIN="GStreamer-Dxva"',
|
||||
]
|
||||
|
||||
if host_system != 'windows'
|
||||
if host_system != 'windows' and not build_gir
|
||||
subdir_done()
|
||||
endif
|
||||
|
||||
if not cc.has_header('dxva.h') or not cc.has_header('d3d9.h')
|
||||
subdir_done()
|
||||
endif
|
||||
|
||||
# MinGW 32bits compiler seems to be complaining about redundant-decls
|
||||
# when ComPtr is in use. Let's just disable the warning
|
||||
if cc.get_id() != 'msvc'
|
||||
extra_mingw_args = cc.get_supported_arguments([
|
||||
'-Wno-redundant-decls',
|
||||
])
|
||||
|
||||
extra_args += extra_mingw_args
|
||||
endif
|
||||
|
||||
pkg_name = 'gstreamer-dxva-' + api_version
|
||||
gstdxva = library('gstdxva-' + api_version,
|
||||
dxva_sources,
|
||||
|
@ -45,11 +42,34 @@ gstdxva = library('gstdxva-' + api_version,
|
|||
)
|
||||
|
||||
library_def = {'lib': gstdxva}
|
||||
gen_sources = []
|
||||
if build_gir
|
||||
gir = {
|
||||
'sources' : dxva_sources + dxva_headers,
|
||||
'namespace' : 'GstDxva',
|
||||
'nsversion' : api_version,
|
||||
'identifier_prefix' : 'Gst',
|
||||
'symbol_prefix' : 'gst',
|
||||
'export_packages' : pkg_name,
|
||||
'includes' : ['Gst-1.0', 'GstVideo-1.0', 'GstCodecs-1.0'],
|
||||
'install' : true,
|
||||
'extra_args' : gir_init_section + ['-DGST_USE_UNSTABLE_API'],
|
||||
'dependencies' : [gstvideo_dep, gstcodecs_dep]
|
||||
}
|
||||
library_def += {'gir': [gir]}
|
||||
if not static_build
|
||||
dxva_gir = gnome.generate_gir(gstdxva, kwargs: gir)
|
||||
library_def += {'gir_targets': library_def.get('gir_targets', []) + [dxva_gir]}
|
||||
gen_sources += dxva_gir
|
||||
endif
|
||||
endif
|
||||
|
||||
gst_libraries += [[pkg_name, library_def]]
|
||||
|
||||
# Still non-public api, should not install headers
|
||||
gstdxva_dep = declare_dependency(link_with : gstdxva,
|
||||
include_directories : [libsinc],
|
||||
sources: gen_sources,
|
||||
dependencies : [gstvideo_dep, gstcodecs_dep])
|
||||
|
||||
meson.override_dependency(pkg_name, gstdxva_dep)
|
||||
meson.override_dependency(pkg_name, gstdxva_dep)
|
||||
|
|
Loading…
Reference in a new issue