20#include <va/va_dec_jpeg.h>
33 VAPictureParameterBufferJPEGBaseline pp;
38 pp = (VAPictureParameterBufferJPEGBaseline) {
39 .picture_width = avctx->
width,
40 .picture_height = avctx->
height,
42 .num_components =
s->nb_components,
45 for (
i = 0;
i <
s->nb_components;
i++) {
46 pp.components[
i].component_id =
s->component_id[
i];
47 pp.components[
i].h_sampling_factor =
s->h_count[
i];
48 pp.components[
i].v_sampling_factor =
s->v_count[
i];
49 pp.components[
i].quantiser_table_selector =
s->quant_index[
i];
53 VAPictureParameterBufferType,
79 VAHuffmanTableBufferJPEGBaseline huff;
80 VAIQMatrixBufferJPEGBaseline
quant;
81 VASliceParameterBufferJPEGBaseline sp;
84 memset(&huff, 0,
sizeof(huff));
85 for (
i = 0;
i < 2;
i++) {
86 huff.load_huffman_table[
i] = 1;
87 for (j = 0; j < 16; j++)
88 huff.huffman_table[
i].num_dc_codes[j] =
s->raw_huffman_lengths[0][
i][j];
89 for (j = 0; j < 12; j++)
90 huff.huffman_table[
i].dc_values[j] =
s->raw_huffman_values[0][
i][j];
91 for (j = 0; j < 16; j++)
92 huff.huffman_table[
i].num_ac_codes[j] =
s->raw_huffman_lengths[1][
i][j];
93 for (j = 0; j < 162; j++)
94 huff.huffman_table[
i].ac_values[j] =
s->raw_huffman_values[1][
i][j];
98 VAHuffmanTableBufferType,
104 for (
i = 0;
i < 4;
i++) {
105 quant.load_quantiser_table[
i] = 1;
106 for (j = 0; j < 64; j++)
107 quant.quantiser_table[
i][j] =
s->quant_matrixes[
i][j];
111 VAIQMatrixBufferType,
116 sp = (VASliceParameterBufferJPEGBaseline) {
117 .slice_data_size =
size,
118 .slice_data_offset = 0,
119 .slice_data_flag = VA_SLICE_DATA_FLAG_ALL,
121 .slice_horizontal_position = 0,
122 .slice_vertical_position = 0,
124 .restart_interval =
s->restart_interval,
125 .num_mcus =
s->mb_width *
s->mb_height,
128 sp.num_components =
s->nb_components;
129 for (
i = 0;
i <
s->nb_components;
i++) {
130 sp.components[
i].component_selector =
s->component_id[
s->comp_index[
i]];
131 sp.components[
i].dc_table_selector =
s->dc_index[
i];
132 sp.components[
i].ac_table_selector =
s->ac_index[
i];
147 .p.name =
"mjpeg_vaapi",
#define i(width, name, range_min, range_max)
int(* init)(AVBSFContext *ctx)
#define HWACCEL_CAP_ASYNC_SAFE
Header providing the internals of AVHWAccel.
const struct FFHWAccel ff_mjpeg_vaapi_hwaccel
static av_cold void uninit(AVBitStreamFilterContext *ctx)
@ AV_PIX_FMT_VAAPI
Hardware acceleration through VA-API, data[3] contains a VASurfaceID.
A reference to a data buffer.
main external API structure.
int width
picture width / height.
VASurfaceID output_surface
int ff_vaapi_decode_make_param_buffer(AVCodecContext *avctx, VAAPIDecodePicture *pic, int type, const void *data, size_t size)
int ff_vaapi_common_frame_params(AVCodecContext *avctx, AVBufferRef *hw_frames_ctx)
int ff_vaapi_decode_issue(AVCodecContext *avctx, VAAPIDecodePicture *pic)
int ff_vaapi_decode_init(AVCodecContext *avctx)
int ff_vaapi_decode_uninit(AVCodecContext *avctx)
int ff_vaapi_decode_cancel(AVCodecContext *avctx, VAAPIDecodePicture *pic)
int ff_vaapi_decode_make_slice_buffer(AVCodecContext *avctx, VAAPIDecodePicture *pic, const void *params_data, int nb_params, size_t params_size, const void *slice_data, size_t slice_size)
static VASurfaceID ff_vaapi_get_surface_id(AVFrame *pic)
static int vaapi_mjpeg_decode_slice(AVCodecContext *avctx, const uint8_t *buffer, uint32_t size)
static int vaapi_mjpeg_start_frame(AVCodecContext *avctx, av_unused const AVBufferRef *buffer_ref, av_unused const uint8_t *buffer, av_unused uint32_t size)
static int vaapi_mjpeg_end_frame(AVCodecContext *avctx)
static const uint8_t quant[64]