struct intel_batchbuffer *batch = gen6_encoder_context->base.batch;
struct gen6_mfc_context *mfc_context = &gen6_encoder_context->mfc_context;
struct gen6_vme_context *vme_context = &gen6_encoder_context->vme_context;
- VAEncSequenceParameterBufferH264Ext *pSequenceParameter = (VAEncSequenceParameterBufferH264Ext *)encode_state->seq_param->buffer;
- VAEncPictureParameterBufferH264Ext *pPicParameter = (VAEncPictureParameterBufferH264Ext *)encode_state->pic_param->buffer;
- VAEncSliceParameterBufferH264Ext *pSliceParameter = (VAEncSliceParameterBufferH264Ext *)encode_state->slice_params[0]->buffer; /* FIXME: multi slices */
+ VAEncSequenceParameterBufferH264Ext *pSequenceParameter = (VAEncSequenceParameterBufferH264Ext *)encode_state->seq_param_ext->buffer;
+ VAEncPictureParameterBufferH264Ext *pPicParameter = (VAEncPictureParameterBufferH264Ext *)encode_state->pic_param_ext->buffer;
+ VAEncSliceParameterBufferH264Ext *pSliceParameter = (VAEncSliceParameterBufferH264Ext *)encode_state->slice_params_ext[0]->buffer; /* FIXME: multi slices */
unsigned int *msg = NULL, offset = 0;
int emit_new_state = 1, object_len_in_bytes;
struct object_surface *obj_surface;
struct object_buffer *obj_buffer;
dri_bo *bo;
- VAEncPictureParameterBufferH264Ext *pPicParameter = (VAEncPictureParameterBufferH264Ext *)encode_state->pic_param->buffer;
+ VAEncPictureParameterBufferH264Ext *pPicParameter = (VAEncPictureParameterBufferH264Ext *)encode_state->pic_param_ext->buffer;
VAStatus vaStatus = VA_STATUS_SUCCESS;
int i;
struct i965_driver_data *i965 = i965_driver_data(ctx);
struct gen6_mfc_context *mfc_context = &gen6_encoder_context->mfc_context;
- VAEncPictureParameterBufferH264 *pPicParameter = (VAEncPictureParameterBufferH264 *)encode_state->pic_param->buffer;
+ VAEncPictureParameterBufferH264Ext *pPicParameter = (VAEncPictureParameterBufferH264Ext *)encode_state->pic_param_ext->buffer;
struct object_surface *obj_surface = SURFACE(pPicParameter->reconstructed_picture);
//struct object_surface *obj_surface = SURFACE(pPicParameter->reference_picture[0]);
struct gen6_vme_context *vme_context = &gen6_encoder_context->vme_context;
struct i965_surface_state *ss;
dri_bo *bo;
- VAEncSequenceParameterBufferH264 *pSequenceParameter = (VAEncSequenceParameterBufferH264 *)encode_state->seq_param->buffer;
- VAEncSliceParameterBufferH264Ext *pSliceParameter = (VAEncSliceParameterBufferH264Ext *)encode_state->slice_params[0]->buffer;
+ VAEncSequenceParameterBufferH264Ext *pSequenceParameter = (VAEncSequenceParameterBufferH264Ext *)encode_state->seq_param_ext->buffer;
+ VAEncSliceParameterBufferH264Ext *pSliceParameter = (VAEncSliceParameterBufferH264Ext *)encode_state->slice_params_ext[0]->buffer;
int is_intra = pSliceParameter->slice_type == SLICE_TYPE_I;
int width_in_mbs = pSequenceParameter->picture_width_in_mbs;
int height_in_mbs = pSequenceParameter->picture_height_in_mbs;
{
struct i965_driver_data *i965 = i965_driver_data(ctx);
struct object_surface *obj_surface;
- VAEncPictureParameterBufferH264Ext *pPicParameter = (VAEncPictureParameterBufferH264Ext *)encode_state->pic_param->buffer;
+ VAEncPictureParameterBufferH264Ext *pPicParameter = (VAEncPictureParameterBufferH264Ext *)encode_state->pic_param_ext->buffer;
/*Setup surfaces state*/
/* current picture for encoding */
struct gen6_vme_context *vme_context = &gen6_encoder_context->vme_context;
struct gen7_surface_state *ss;
dri_bo *bo;
- VAEncSequenceParameterBufferH264 *pSequenceParameter = (VAEncSequenceParameterBufferH264 *)encode_state->seq_param->buffer;
- VAEncSliceParameterBuffer *pSliceParameter = (VAEncSliceParameterBuffer *)encode_state->slice_params[0]->buffer;
- int is_intra = pSliceParameter->slice_flags.bits.is_intra;
+ VAEncSequenceParameterBufferH264Ext *pSequenceParameter = (VAEncSequenceParameterBufferH264Ext *)encode_state->seq_param_ext->buffer;
+ VAEncSliceParameterBufferH264Ext *pSliceParameter = (VAEncSliceParameterBufferH264Ext *)encode_state->slice_params_ext[0]->buffer;
+ int is_intra = pSliceParameter->slice_type == SLICE_TYPE_I;
int width_in_mbs = pSequenceParameter->picture_width_in_mbs;
int height_in_mbs = pSequenceParameter->picture_height_in_mbs;
int num_entries;
{
struct i965_driver_data *i965 = i965_driver_data(ctx);
struct object_surface *obj_surface;
- VAEncPictureParameterBufferH264Ext *pPicParameter = (VAEncPictureParameterBufferH264Ext *)encode_state->pic_param->buffer;
+ VAEncPictureParameterBufferH264Ext *pPicParameter = (VAEncPictureParameterBufferH264Ext *)encode_state->pic_param_ext->buffer;
/*Setup surfaces state*/
/* current picture for encoding */
struct gen6_encoder_context *gen6_encoder_context)
{
struct intel_batchbuffer *batch = gen6_encoder_context->base.batch;
- VAEncSliceParameterBufferH264Ext *pSliceParameter = (VAEncSliceParameterBufferH264Ext *)encode_state->slice_params[0]->buffer;
- VAEncSequenceParameterBufferH264 *pSequenceParameter = (VAEncSequenceParameterBufferH264 *)encode_state->seq_param->buffer;
+ VAEncSliceParameterBufferH264Ext *pSliceParameter = (VAEncSliceParameterBufferH264Ext *)encode_state->slice_params_ext[0]->buffer;
+ VAEncSequenceParameterBufferH264Ext *pSequenceParameter = (VAEncSequenceParameterBufferH264Ext *)encode_state->seq_param_ext->buffer;
int is_intra = pSliceParameter->slice_type == SLICE_TYPE_I;
int width_in_mbs = pSequenceParameter->picture_width_in_mbs;
int height_in_mbs = pSequenceParameter->picture_height_in_mbs;
{
struct i965_driver_data *i965 = i965_driver_data(ctx);
VAStatus vaStatus = VA_STATUS_SUCCESS;
- VAEncSliceParameterBufferH264Ext *pSliceParameter = (VAEncSliceParameterBufferH264Ext *)encode_state->slice_params[0]->buffer;
+ VAEncSliceParameterBufferH264Ext *pSliceParameter = (VAEncSliceParameterBufferH264Ext *)encode_state->slice_params_ext[0]->buffer;
int is_intra = pSliceParameter->slice_type == SLICE_TYPE_I;
/*Setup all the memory object*/
i965_release_buffer_store(&obj_context->codec_state.encode.slice_params[i]);
free(obj_context->codec_state.encode.slice_params);
+
+ assert(obj_context->codec_state.encode.num_slice_params_ext <= obj_context->codec_state.encode.max_slice_params_ext);
+ i965_release_buffer_store(&obj_context->codec_state.encode.pic_param_ext);
+ i965_release_buffer_store(&obj_context->codec_state.encode.seq_param_ext);
+ i965_release_buffer_store(&obj_context->codec_state.encode.dec_ref_pic_marking);
+ i965_release_buffer_store(&obj_context->codec_state.encode.packed_sps);
+ i965_release_buffer_store(&obj_context->codec_state.encode.packed_pps);
+ i965_release_buffer_store(&obj_context->codec_state.encode.packed_slice_header);
+
+ for (i = 0; i < obj_context->codec_state.encode.num_slice_params_ext; i++)
+ i965_release_buffer_store(&obj_context->codec_state.encode.slice_params_ext[i]);
+
+ free(obj_context->codec_state.encode.slice_params_ext);
} else {
assert(obj_context->codec_state.decode.num_slice_params <= obj_context->codec_state.decode.max_slice_params);
assert(obj_context->codec_state.decode.num_slice_datas <= obj_context->codec_state.decode.max_slice_datas);
case VAEncSequenceParameterBufferType:
case VAEncPictureParameterBufferType:
case VAEncSliceParameterBufferType:
+ case VAEncSequenceParameterBufferH264ExtType:
+ case VAEncPictureParameterBufferH264ExtType:
+ case VAEncSliceParameterBufferH264ExtType:
+ case VAEncDecRefPicMarkingBufferH264Type:
+ case VAEncPackedSequenceParameterBufferType:
+ case VAEncPackedPictureParameterBufferType:
+ case VAEncPackedSliceParameterBufferType:
+
/* Ok */
break;
if (data)
dri_bo_subdata(buffer_store->bo, 0, size * num_elements, data);
- } else if (type == VASliceDataBufferType || type == VAImageBufferType || type == VAEncCodedBufferType) {
+ } else if (type == VASliceDataBufferType ||
+ type == VAImageBufferType ||
+ type == VAEncCodedBufferType ||
+ type == VAEncPackedSequenceParameterBufferType ||
+ type == VAEncPackedPictureParameterBufferType ||
+ type == VAEncPackedSliceParameterBufferType) {
buffer_store->bo = dri_bo_alloc(i965->intel.bufmgr,
"Buffer",
size * num_elements, 64);
}
obj_context->codec_state.encode.num_slice_params = 0;
+
+ /* ext */
+ i965_release_buffer_store(&obj_context->codec_state.encode.pic_param_ext);
+ i965_release_buffer_store(&obj_context->codec_state.encode.seq_param_ext);
+ i965_release_buffer_store(&obj_context->codec_state.encode.dec_ref_pic_marking);
+ i965_release_buffer_store(&obj_context->codec_state.encode.packed_sps);
+ i965_release_buffer_store(&obj_context->codec_state.encode.packed_pps);
+ i965_release_buffer_store(&obj_context->codec_state.encode.packed_slice_header);
+
+ for (i = 0; i < obj_context->codec_state.encode.num_slice_params_ext; i++)
+ i965_release_buffer_store(&obj_context->codec_state.encode.slice_params_ext[i]);
+
+ obj_context->codec_state.encode.num_slice_params_ext = 0;
+
obj_context->codec_state.encode.current_render_target = render_target; /*This is input new frame*/
} else {
obj_context->codec_state.decode.current_render_target = render_target;
DEF_RENDER_ENCODE_SINGLE_BUFFER_FUNC(picture_control, pic_control)
DEF_RENDER_ENCODE_SINGLE_BUFFER_FUNC(qmatrix, q_matrix)
DEF_RENDER_ENCODE_SINGLE_BUFFER_FUNC(iqmatrix, iq_matrix)
+/* extended buffer */
+DEF_RENDER_ENCODE_SINGLE_BUFFER_FUNC(sequence_parameter_ext, seq_param_ext)
+DEF_RENDER_ENCODE_SINGLE_BUFFER_FUNC(picture_parameter_ext, pic_param_ext)
+DEF_RENDER_ENCODE_SINGLE_BUFFER_FUNC(dec_ref_pic_marking, dec_ref_pic_marking)
+DEF_RENDER_ENCODE_SINGLE_BUFFER_FUNC(packed_sps, packed_sps)
+DEF_RENDER_ENCODE_SINGLE_BUFFER_FUNC(packed_pps, packed_pps)
+DEF_RENDER_ENCODE_SINGLE_BUFFER_FUNC(packed_slice_header, packed_slice_header)
#define DEF_RENDER_ENCODE_MULTI_BUFFER_FUNC(name, member) DEF_RENDER_MULTI_BUFFER_FUNC(encode, name, member)
DEF_RENDER_ENCODE_MULTI_BUFFER_FUNC(slice_parameter, slice_params)
+DEF_RENDER_ENCODE_MULTI_BUFFER_FUNC(slice_parameter_ext, slice_params_ext)
static VAStatus
i965_encoder_render_picture(VADriverContextP ctx,
vaStatus = I965_RENDER_ENCODE_BUFFER(iqmatrix);
break;
+ case VAEncSequenceParameterBufferH264ExtType:
+ vaStatus = I965_RENDER_ENCODE_BUFFER(sequence_parameter_ext);
+ break;
+
+ case VAEncPictureParameterBufferH264ExtType:
+ vaStatus = I965_RENDER_ENCODE_BUFFER(picture_parameter_ext);
+ break;
+
+ case VAEncSliceParameterBufferH264ExtType:
+ vaStatus = I965_RENDER_ENCODE_BUFFER(slice_parameter_ext);
+ break;
+
+ case VAEncDecRefPicMarkingBufferH264Type:
+ vaStatus = I965_RENDER_ENCODE_BUFFER(dec_ref_pic_marking);
+ break;
+
+ case VAEncPackedSequenceParameterBufferType:
+ vaStatus = I965_RENDER_ENCODE_BUFFER(packed_sps);
+ break;
+
+ case VAEncPackedPictureParameterBufferType:
+ vaStatus = I965_RENDER_ENCODE_BUFFER(packed_pps);
+ break;
+
+ case VAEncPackedSliceParameterBufferType:
+ vaStatus = I965_RENDER_ENCODE_BUFFER(packed_slice_header);
+
default:
vaStatus = VA_STATUS_ERROR_UNSUPPORTED_BUFFERTYPE;
break;
if (obj_context->codec_type == CODEC_ENC) {
assert(VAEntrypointEncSlice == obj_config->entrypoint);
- assert(obj_context->codec_state.encode.pic_param);
- assert(obj_context->codec_state.encode.seq_param);
- assert(obj_context->codec_state.encode.num_slice_params >= 1);
+ assert(obj_context->codec_state.encode.pic_param ||
+ obj_context->codec_state.encode.pic_param_ext);
+ assert(obj_context->codec_state.encode.seq_param ||
+ obj_context->codec_state.encode.seq_param_ext);
+ assert(obj_context->codec_state.encode.num_slice_params >= 1 ||
+ obj_context->codec_state.encode.num_slice_params_ext >= 1);
} else {
assert(obj_context->codec_state.decode.pic_param);
assert(obj_context->codec_state.decode.num_slice_params >= 1);