annotate vaapi_mpeg4.c @ 9473:e38284cd69dc libavcodec

Use memcpy instead of the very inefficient bytecopy where both are correct (i.e. no overlap of src and dst is possible).
author reimar
date Fri, 17 Apr 2009 17:20:48 +0000
parents fe5c4cf6a8cc
children ea1b3a06bb26
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
9331
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
1 /*
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
2 * MPEG-4 / H.263 HW decode acceleration through VA API
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
3 *
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
4 * Copyright (C) 2008-2009 Splitted-Desktop Systems
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
5 *
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
6 * This file is part of FFmpeg.
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
7 *
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
8 * FFmpeg is free software; you can redistribute it and/or
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
9 * modify it under the terms of the GNU Lesser General Public
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
10 * License as published by the Free Software Foundation; either
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
11 * version 2.1 of the License, or (at your option) any later version.
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
12 *
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
13 * FFmpeg is distributed in the hope that it will be useful,
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
16 * Lesser General Public License for more details.
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
17 *
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
18 * You should have received a copy of the GNU Lesser General Public
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
19 * License along with FFmpeg; if not, write to the Free Software
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
21 */
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
22
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
23 #include "vaapi_internal.h"
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
24
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
25 /** Reconstruct bitstream intra_dc_vlc_thr */
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
26 static int mpeg4_get_intra_dc_vlc_thr(MpegEncContext *s)
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
27 {
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
28 switch (s->intra_dc_threshold) {
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
29 case 99: return 0;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
30 case 13: return 1;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
31 case 15: return 2;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
32 case 17: return 3;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
33 case 19: return 4;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
34 case 21: return 5;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
35 case 23: return 6;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
36 case 0: return 7;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
37 }
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
38 return 0;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
39 }
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
40
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
41 static int vaapi_mpeg4_start_frame(AVCodecContext *avctx, av_unused const uint8_t *buffer, av_unused uint32_t size)
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
42 {
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
43 MpegEncContext * const s = avctx->priv_data;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
44 struct vaapi_context * const vactx = avctx->hwaccel_context;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
45 VAPictureParameterBufferMPEG4 *pic_param;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
46 VAIQMatrixBufferMPEG4 *iq_matrix;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
47 int i;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
48
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
49 dprintf(avctx, "vaapi_mpeg4_start_frame()\n");
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
50
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
51 vactx->slice_param_size = sizeof(VASliceParameterBufferMPEG4);
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
52
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
53 /* Fill in VAPictureParameterBufferMPEG4 */
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
54 pic_param = ff_vaapi_alloc_picture(vactx, sizeof(VAPictureParameterBufferMPEG4));
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
55 if (!pic_param)
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
56 return -1;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
57 pic_param->vop_width = s->width;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
58 pic_param->vop_height = s->height;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
59 pic_param->forward_reference_picture = 0xffffffff;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
60 pic_param->backward_reference_picture = 0xffffffff;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
61 pic_param->vol_fields.value = 0; /* reset all bits */
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
62 pic_param->vol_fields.bits.short_video_header = avctx->codec->id == CODEC_ID_H263;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
63 pic_param->vol_fields.bits.chroma_format = CHROMA_420;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
64 pic_param->vol_fields.bits.interlaced = !s->progressive_sequence;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
65 pic_param->vol_fields.bits.obmc_disable = 1;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
66 pic_param->vol_fields.bits.sprite_enable = s->vol_sprite_usage;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
67 pic_param->vol_fields.bits.sprite_warping_accuracy = s->sprite_warping_accuracy;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
68 pic_param->vol_fields.bits.quant_type = s->mpeg_quant;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
69 pic_param->vol_fields.bits.quarter_sample = s->quarter_sample;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
70 pic_param->vol_fields.bits.data_partitioned = s->data_partitioning;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
71 pic_param->vol_fields.bits.reversible_vlc = s->rvlc;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
72 pic_param->no_of_sprite_warping_points = s->num_sprite_warping_points;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
73 for (i = 0; i < s->num_sprite_warping_points && i < 3; i++) {
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
74 pic_param->sprite_trajectory_du[i] = s->sprite_traj[i][0];
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
75 pic_param->sprite_trajectory_dv[i] = s->sprite_traj[i][1];
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
76 }
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
77 pic_param->quant_precision = s->quant_precision;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
78 pic_param->vop_fields.value = 0; /* reset all bits */
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
79 pic_param->vop_fields.bits.vop_coding_type = s->pict_type - FF_I_TYPE;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
80 pic_param->vop_fields.bits.backward_reference_vop_coding_type = s->pict_type == FF_B_TYPE ? s->next_picture.pict_type - FF_I_TYPE : 0;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
81 pic_param->vop_fields.bits.vop_rounding_type = s->no_rounding;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
82 pic_param->vop_fields.bits.intra_dc_vlc_thr = mpeg4_get_intra_dc_vlc_thr(s);
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
83 pic_param->vop_fields.bits.top_field_first = s->top_field_first;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
84 pic_param->vop_fields.bits.alternate_vertical_scan_flag = s->alternate_scan;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
85 pic_param->vop_fcode_forward = s->f_code;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
86 pic_param->vop_fcode_backward = s->b_code;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
87 pic_param->num_macroblocks_in_gob = s->mb_width * ff_h263_get_gob_height(s);
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
88 pic_param->num_gobs_in_vop = (s->mb_width * s->mb_height) / pic_param->num_macroblocks_in_gob;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
89 pic_param->TRB = s->pb_time;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
90 pic_param->TRD = s->pp_time;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
91
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
92 if (s->pict_type == FF_B_TYPE)
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
93 pic_param->backward_reference_picture = ff_vaapi_get_surface(&s->next_picture);
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
94 if (s->pict_type != FF_I_TYPE)
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
95 pic_param->forward_reference_picture = ff_vaapi_get_surface(&s->last_picture);
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
96
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
97 /* Fill in VAIQMatrixBufferMPEG4 */
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
98 /* Only the first inverse quantisation method uses the weighthing matrices */
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
99 if (pic_param->vol_fields.bits.quant_type) {
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
100 iq_matrix = ff_vaapi_alloc_iq_matrix(vactx, sizeof(VAIQMatrixBufferMPEG4));
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
101 if (!iq_matrix)
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
102 return -1;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
103 iq_matrix->load_intra_quant_mat = 1;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
104 iq_matrix->load_non_intra_quant_mat = 1;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
105
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
106 for (i = 0; i < 64; i++) {
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
107 int n = s->dsp.idct_permutation[ff_zigzag_direct[i]];
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
108 iq_matrix->intra_quant_mat[i] = s->intra_matrix[n];
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
109 iq_matrix->non_intra_quant_mat[i] = s->inter_matrix[n];
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
110 }
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
111 }
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
112 return 0;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
113 }
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
114
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
115 static int vaapi_mpeg4_end_frame(AVCodecContext *avctx)
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
116 {
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
117 return ff_vaapi_common_end_frame(avctx->priv_data);
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
118 }
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
119
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
120 static int vaapi_mpeg4_decode_slice(AVCodecContext *avctx, const uint8_t *buffer, uint32_t size)
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
121 {
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
122 MpegEncContext * const s = avctx->priv_data;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
123 VASliceParameterBufferMPEG4 *slice_param;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
124
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
125 dprintf(avctx, "vaapi_mpeg4_decode_slice(): buffer %p, size %d\n", buffer, size);
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
126
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
127 /* video_plane_with_short_video_header() contains all GOBs
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
128 * in-order, and this is what VA API (Intel backend) expects: only
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
129 * a single slice param. So fake macroblock_number for FFmpeg so
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
130 * that we don't call vaapi_mpeg4_decode_slice() again
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
131 */
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
132 if (avctx->codec->id == CODEC_ID_H263)
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
133 size = s->gb.buffer_end - buffer;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
134
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
135 /* Fill in VASliceParameterBufferMPEG4 */
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
136 slice_param = (VASliceParameterBufferMPEG4 *)ff_vaapi_alloc_slice(avctx->hwaccel_context, buffer, size);
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
137 if (!slice_param)
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
138 return -1;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
139 slice_param->macroblock_offset = get_bits_count(&s->gb) % 8;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
140 slice_param->macroblock_number = s->mb_y * s->mb_width + s->mb_x;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
141 slice_param->quant_scale = s->qscale;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
142
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
143 if (avctx->codec->id == CODEC_ID_H263)
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
144 s->mb_y = s->mb_height;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
145
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
146 return 0;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
147 }
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
148
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
149 #if CONFIG_MPEG4_VAAPI_HWACCEL
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
150 AVHWAccel mpeg4_vaapi_hwaccel = {
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
151 .name = "mpeg4_vaapi",
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
152 .type = CODEC_TYPE_VIDEO,
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
153 .id = CODEC_ID_MPEG4,
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
154 .pix_fmt = PIX_FMT_VAAPI_VLD,
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
155 .capabilities = 0,
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
156 .start_frame = vaapi_mpeg4_start_frame,
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
157 .end_frame = vaapi_mpeg4_end_frame,
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
158 .decode_slice = vaapi_mpeg4_decode_slice,
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
159 .priv_data_size = 0,
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
160 };
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
161 #endif
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
162
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
163 #if CONFIG_H263_VAAPI_HWACCEL
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
164 AVHWAccel h263_vaapi_hwaccel = {
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
165 .name = "h263_vaapi",
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
166 .type = CODEC_TYPE_VIDEO,
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
167 .id = CODEC_ID_H263,
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
168 .pix_fmt = PIX_FMT_VAAPI_VLD,
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
169 .capabilities = 0,
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
170 .start_frame = vaapi_mpeg4_start_frame,
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
171 .end_frame = vaapi_mpeg4_end_frame,
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
172 .decode_slice = vaapi_mpeg4_decode_slice,
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
173 .priv_data_size = 0,
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
174 };
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
175 #endif