annotate vaapi_mpeg4.c @ 12530:63edd10ad4bc libavcodec tip

Try to fix crashes introduced by r25218 r25218 made assumptions about the existence of past reference frames that weren't necessarily true.
author darkshikari
date Tue, 28 Sep 2010 09:06:22 +0000
parents 7589f76ce761
children
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"
11984
7589f76ce761 vaapi: add missing #include "h263.h"
mru
parents: 11560
diff changeset
24 #include "h263.h"
9331
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
25
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
26 /** Reconstruct bitstream intra_dc_vlc_thr */
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
27 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
28 {
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
29 switch (s->intra_dc_threshold) {
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
30 case 99: return 0;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
31 case 13: return 1;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
32 case 15: return 2;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
33 case 17: return 3;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
34 case 19: return 4;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
35 case 21: return 5;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
36 case 23: return 6;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
37 case 0: return 7;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
38 }
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
39 return 0;
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
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
42 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
43 {
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
44 MpegEncContext * const s = avctx->priv_data;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
45 struct vaapi_context * const vactx = avctx->hwaccel_context;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
46 VAPictureParameterBufferMPEG4 *pic_param;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
47 VAIQMatrixBufferMPEG4 *iq_matrix;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
48 int i;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
49
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
50 dprintf(avctx, "vaapi_mpeg4_start_frame()\n");
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
51
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
52 vactx->slice_param_size = sizeof(VASliceParameterBufferMPEG4);
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
53
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
54 /* Fill in VAPictureParameterBufferMPEG4 */
10724
de8d07d87c45 Rename ff_vaapi_alloc_picture() to ff_vaapi_alloc_pic_param().
gb
parents: 10723
diff changeset
55 pic_param = ff_vaapi_alloc_pic_param(vactx, sizeof(VAPictureParameterBufferMPEG4));
9331
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
56 if (!pic_param)
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
57 return -1;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
58 pic_param->vop_width = s->width;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
59 pic_param->vop_height = s->height;
10725
3b6b7fe1c27c Use VA_INVALID_ID instead of hard coded values.
gb
parents: 10724
diff changeset
60 pic_param->forward_reference_picture = VA_INVALID_ID;
3b6b7fe1c27c Use VA_INVALID_ID instead of hard coded values.
gb
parents: 10724
diff changeset
61 pic_param->backward_reference_picture = VA_INVALID_ID;
9331
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
62 pic_param->vol_fields.value = 0; /* reset all bits */
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
63 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
64 pic_param->vol_fields.bits.chroma_format = CHROMA_420;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
65 pic_param->vol_fields.bits.interlaced = !s->progressive_sequence;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
66 pic_param->vol_fields.bits.obmc_disable = 1;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
67 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
68 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
69 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
70 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
71 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
72 pic_param->vol_fields.bits.reversible_vlc = s->rvlc;
10702
ea1b3a06bb26 Add new fields for the VDPAU/MPEG-4 back-end.
gb
parents: 9331
diff changeset
73 pic_param->vol_fields.bits.resync_marker_disable = !s->resync_marker;
9331
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
74 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
75 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
76 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
77 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
78 }
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
79 pic_param->quant_precision = s->quant_precision;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
80 pic_param->vop_fields.value = 0; /* reset all bits */
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
81 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
82 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
83 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
84 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
85 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
86 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
87 pic_param->vop_fcode_forward = s->f_code;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
88 pic_param->vop_fcode_backward = s->b_code;
10702
ea1b3a06bb26 Add new fields for the VDPAU/MPEG-4 back-end.
gb
parents: 9331
diff changeset
89 pic_param->vop_time_increment_resolution = avctx->time_base.den;
9331
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
90 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
91 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
92 pic_param->TRB = s->pb_time;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
93 pic_param->TRD = s->pp_time;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
94
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
95 if (s->pict_type == FF_B_TYPE)
10723
3f08c340020f Rename ff_vaapi_get_surface() to ff_vaapi_get_surface_id().
gb
parents: 10702
diff changeset
96 pic_param->backward_reference_picture = ff_vaapi_get_surface_id(&s->next_picture);
9331
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
97 if (s->pict_type != FF_I_TYPE)
10723
3f08c340020f Rename ff_vaapi_get_surface() to ff_vaapi_get_surface_id().
gb
parents: 10702
diff changeset
98 pic_param->forward_reference_picture = ff_vaapi_get_surface_id(&s->last_picture);
9331
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
99
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
100 /* Fill in VAIQMatrixBufferMPEG4 */
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
101 /* 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
102 if (pic_param->vol_fields.bits.quant_type) {
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
103 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
104 if (!iq_matrix)
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
105 return -1;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
106 iq_matrix->load_intra_quant_mat = 1;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
107 iq_matrix->load_non_intra_quant_mat = 1;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
108
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
109 for (i = 0; i < 64; i++) {
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
110 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
111 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
112 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
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 return 0;
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
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
118 static int vaapi_mpeg4_end_frame(AVCodecContext *avctx)
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 return ff_vaapi_common_end_frame(avctx->priv_data);
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
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
123 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
124 {
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
125 MpegEncContext * const s = avctx->priv_data;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
126 VASliceParameterBufferMPEG4 *slice_param;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
127
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
128 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
129
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
130 /* video_plane_with_short_video_header() contains all GOBs
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
131 * 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
132 * 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
133 * 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
134 */
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
135 if (avctx->codec->id == CODEC_ID_H263)
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
136 size = s->gb.buffer_end - buffer;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
137
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
138 /* Fill in VASliceParameterBufferMPEG4 */
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
139 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
140 if (!slice_param)
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
141 return -1;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
142 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
143 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
144 slice_param->quant_scale = s->qscale;
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 if (avctx->codec->id == CODEC_ID_H263)
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
147 s->mb_y = s->mb_height;
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 return 0;
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
150 }
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
151
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
152 #if CONFIG_MPEG4_VAAPI_HWACCEL
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
153 AVHWAccel mpeg4_vaapi_hwaccel = {
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
154 .name = "mpeg4_vaapi",
11560
8a4984c5cacc Define AVMediaType enum, and use it instead of enum CodecType, which
stefano
parents: 10725
diff changeset
155 .type = AVMEDIA_TYPE_VIDEO,
9331
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
156 .id = CODEC_ID_MPEG4,
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
157 .pix_fmt = PIX_FMT_VAAPI_VLD,
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
158 .capabilities = 0,
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
159 .start_frame = vaapi_mpeg4_start_frame,
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
160 .end_frame = vaapi_mpeg4_end_frame,
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
161 .decode_slice = vaapi_mpeg4_decode_slice,
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
162 .priv_data_size = 0,
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
163 };
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
164 #endif
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
165
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
166 #if CONFIG_H263_VAAPI_HWACCEL
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
167 AVHWAccel h263_vaapi_hwaccel = {
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
168 .name = "h263_vaapi",
11560
8a4984c5cacc Define AVMediaType enum, and use it instead of enum CodecType, which
stefano
parents: 10725
diff changeset
169 .type = AVMEDIA_TYPE_VIDEO,
9331
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
170 .id = CODEC_ID_H263,
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
171 .pix_fmt = PIX_FMT_VAAPI_VLD,
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
172 .capabilities = 0,
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
173 .start_frame = vaapi_mpeg4_start_frame,
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
174 .end_frame = vaapi_mpeg4_end_frame,
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
175 .decode_slice = vaapi_mpeg4_decode_slice,
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
176 .priv_data_size = 0,
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
177 };
fe5c4cf6a8cc Add MPEG-4 / H.263 bitstream decoding through VA API.
gb
parents:
diff changeset
178 #endif