Lines Matching refs:ctx

46 #define INIT_CONTEXT_MPEG4ES    context_ENC_p ctx = (context_ENC_p) obj_context->format_data
47 #define SURFACE(id) ((object_surface_p) object_heap_lookup( &ctx->obj_context->driver_data->surface_heap, id ))
48 #define BUFFER(id) ((object_buffer_p) object_heap_lookup( &ctx->obj_context->driver_data->buffer_heap, id ))
108 context_ENC_p ctx;
118 ctx = (context_ENC_p) obj_context->format_data;
132 ctx->eCodec = IMG_CODEC_MPEG4_VBR;
133 ctx->sRCParams.RCEnable = IMG_TRUE;
135 ctx->eCodec = IMG_CODEC_MPEG4_CBR;
136 ctx->sRCParams.RCEnable = IMG_TRUE;
138 ctx->eCodec = IMG_CODEC_MPEG4_NO_RC;
139 ctx->sRCParams.RCEnable = IMG_FALSE;
142 ctx->eFormat = IMG_CODEC_PL12;
144 ctx->Slices = 1;
145 ctx->ParallelCores = 1;
147 ctx->IPEControl = pnw__get_ipe_control(ctx->eCodec);
151 ctx->profile_idc = 2;
154 ctx->profile_idc = 3;
157 ctx->profile_idc = 2;
181 vaStatus = pnw_BeginPicture(ctx);
186 static VAStatus pnw__MPEG4ES_process_sequence_param(context_ENC_p ctx, object_buffer_p obj_buffer)
190 pnw_cmdbuf_p cmdbuf = ctx->obj_context->pnw_cmdbuf;
200 ctx->sRCParams.InitialQp = 15;
201 ctx->sRCParams.MinQP = 1;
202 ctx->sRCParams.FrameRate = 30;
214 ctx->sRCParams.BitsPerSecond = TOPAZ_MPEG4_MAX_BITRATE;
220 ctx->sRCParams.BitsPerSecond = seq_params->bits_per_second;
222 ctx->sRCParams.FrameRate = (seq_params->frame_rate < 1) ?
224 ctx->sRCParams.InitialQp = seq_params->initial_qp;
225 ctx->sRCParams.MinQP = seq_params->min_qp;
226 ctx->sRCParams.BUSize = 0; /* default 0, and will be set in pnw__setup_busize */
228 ctx->sRCParams.Slices = 1;
229 ctx->sRCParams.QCPOffset = 0;/* FIXME */
231 if (ctx->sRCParams.IntraFreq != seq_params->intra_period
232 && ctx->raw_frame_count != 0
233 && ctx->sRCParams.IntraFreq != 0
234 && ((ctx->obj_context->frame_count + 1) % ctx->sRCParams.IntraFreq) != 0
235 && (!ctx->sRCParams.bDisableFrameSkipping)) {
244 ctx->sRCParams.IntraFreq = seq_params->intra_period;
246 ctx->sRCParams.IntraFreq = seq_params->intra_period;
248 frame_size = ctx->sRCParams.BitsPerSecond / ctx->sRCParams.FrameRate;
250 ctx->sRCParams.BufferSize = ctx->sRCParams.BitsPerSecond;
254 ctx->sRCParams.BufferSize /= 16384;
255 ctx->sRCParams.BufferSize *= 16384;
257 ctx->sRCParams.InitialLevel = (3 * ctx->sRCParams.BufferSize) >> 4;
259 ctx->sRCParams.InitialLevel += (frame_size / 2);
260 ctx->sRCParams.InitialLevel /= frame_size;
261 ctx->sRCParams.InitialLevel *= frame_size;
262 ctx->sRCParams.InitialDelay = ctx->sRCParams.BufferSize - ctx->sRCParams.InitialLevel;
263 ctx->buffer_size = ctx->sRCParams.BufferSize;
265 if (ctx->raw_frame_count == 0) { /* Add Register IO behind begin Picture */
266 for (i = (ctx->ParallelCores - 1); i >= 0; i--)
267 pnw_set_bias(ctx, i);
270 cmdbuf = ctx->obj_context->pnw_cmdbuf;
272 switch (ctx->profile_idc) {
284 memset(cmdbuf->header_mem_p + ctx->seq_header_ofs,
291 cmdbuf->header_mem_p + ctx->seq_header_ofs,
301 ctx->MPEG4_vop_time_increment_resolution = vop_time_increment_resolution;
303 pnw_cmdbuf_insert_command_package(ctx->obj_context,
304 ctx->ParallelCores - 1, /* Send to the last core as this will complete first */
307 ctx->seq_header_ofs);
314 static VAStatus pnw__MPEG4ES_process_picture_param(context_ENC_p ctx, object_buffer_p obj_buffer)
318 pnw_cmdbuf_p cmdbuf = ctx->obj_context->pnw_cmdbuf;
336 ctx->ref_surface = SURFACE(pBuffer->reference_picture);
337 ctx->dest_surface = SURFACE(pBuffer->reconstructed_picture);
338 ctx->coded_buf = BUFFER(pBuffer->coded_buf);
340 ASSERT(ctx->Width == pBuffer->picture_width);
341 ASSERT(ctx->Height == pBuffer->picture_height);
343 /*if (ctx->sRCParams.RCEnable && ctx->sRCParams.FrameSkip)
346 ctx->FCode = 4 - 1; /* 4 is default value of "ui8Search_range" */
348 pPictureHeaderMem = (unsigned int *)(cmdbuf->header_mem_p + ctx->pic_header_ofs);
358 ctx->MPEG4_vop_time_increment_resolution/* defaule value */);
369 ctx->MPEG4_vop_time_increment_resolution/* defaule value */);
371 pnw_cmdbuf_insert_command_package(ctx->obj_context,
372 ctx->ParallelCores - 1, /* Send to the last core as this will complete first */
375 ctx->pic_header_ofs);
378 for (i = (ctx->ParallelCores - 1); i >= 0; i--)
379 vaStatus = pnw_RenderPictureParameter(ctx, i);
385 static VAStatus pnw__MPEG4ES_process_slice_param(context_ENC_p ctx, object_buffer_p obj_buffer)
389 pnw_cmdbuf_p cmdbuf = ctx->obj_context->pnw_cmdbuf;
399 if ((ctx->slice_param_cache != NULL) && (obj_buffer->num_elements != ctx->slice_param_num)) {
401 ctx->slice_param_num, obj_buffer->num_elements);
402 free(ctx->slice_param_cache);
403 ctx->slice_param_cache = NULL;
404 ctx->slice_param_num = 0;
407 if (NULL == ctx->slice_param_cache) {
408 drv_debug_msg(VIDEO_DEBUG_GENERAL, "Allocate %d VAEncSliceParameterBuffer cache buffers\n", 2 * ctx->slice_param_num);
409 ctx->slice_param_num = obj_buffer->num_elements;
410 ctx->slice_param_cache = calloc(2 * ctx->slice_param_num, sizeof(VAEncSliceParameterBuffer));
411 if (NULL == ctx->slice_param_cache) {
426 pnw_reset_encoder_params(ctx);
427 ctx->BelowParamsBufIdx = (ctx->BelowParamsBufIdx + 1) & 0x1;
431 slice_param_idx = (pBuffer->slice_flags.bits.is_intra ? 0 : 1) * ctx->slice_param_num + i;
433 if (VAEncSliceParameter_Equal(&ctx->slice_param_cache[slice_param_idx], pBuffer) == 0) {
435 memcpy(&ctx->slice_param_cache[slice_param_idx],
439 pnw_setup_slice_params(ctx,
443 ctx->obj_context->frame_count > 0,
447 pnw__send_encode_slice_params(ctx,
451 ctx->obj_context->frame_count,
453 ctx->obj_context->slice_count);
456 ctx->obj_context->frame_count, ctx->obj_context->slice_count);
458 ctx->obj_context->slice_count++;
461 ASSERT(ctx->obj_context->slice_count < MAX_SLICES_PER_PICTURE);
488 vaStatus = pnw__MPEG4ES_process_sequence_param(ctx, obj_buffer);
494 vaStatus = pnw__MPEG4ES_process_picture_param(ctx, obj_buffer);
500 vaStatus = pnw__MPEG4ES_process_slice_param(ctx, obj_buffer);
518 return pnw_EndPicture(ctx);