Lines Matching defs:vtctx

272 static void set_async_error(VTEncContext *vtctx, int err)
276 pthread_mutex_lock(&vtctx->lock);
278 vtctx->async_error = err;
280 info = vtctx->q_head;
281 vtctx->q_head = vtctx->q_tail = NULL;
290 pthread_mutex_unlock(&vtctx->lock);
293 static void clear_frame_queue(VTEncContext *vtctx)
295 set_async_error(vtctx, 0);
298 static int vtenc_q_pop(VTEncContext *vtctx, bool wait, CMSampleBufferRef *buf, ExtraSEI **sei)
302 pthread_mutex_lock(&vtctx->lock);
304 if (vtctx->async_error) {
305 pthread_mutex_unlock(&vtctx->lock);
306 return vtctx->async_error;
309 if (vtctx->flushing && vtctx->frame_ct_in == vtctx->frame_ct_out) {
312 pthread_mutex_unlock(&vtctx->lock);
316 while (!vtctx->q_head && !vtctx->async_error && wait && !vtctx->flushing) {
317 pthread_cond_wait(&vtctx->cv_sample_sent, &vtctx->lock);
320 if (!vtctx->q_head) {
321 pthread_mutex_unlock(&vtctx->lock);
326 info = vtctx->q_head;
327 vtctx->q_head = vtctx->q_head->next;
328 if (!vtctx->q_head) {
329 vtctx->q_tail = NULL;
332 vtctx->frame_ct_out++;
333 pthread_mutex_unlock(&vtctx->lock);
348 static void vtenc_q_push(VTEncContext *vtctx, CMSampleBufferRef buffer, ExtraSEI *sei)
352 set_async_error(vtctx, AVERROR(ENOMEM));
361 pthread_mutex_lock(&vtctx->lock);
363 if (!vtctx->q_head) {
364 vtctx->q_head = info;
366 vtctx->q_tail->next = info;
369 vtctx->q_tail = info;
371 pthread_cond_signal(&vtctx->cv_sample_sent);
372 pthread_mutex_unlock(&vtctx->lock);
468 VTEncContext *vtctx = avctx->priv_data;
474 status = vtctx->get_param_set_func(vid_fmt,
489 status = vtctx->get_param_set_func(vid_fmt,
523 VTEncContext *vtctx = avctx->priv_data;
530 status = vtctx->get_param_set_func(vid_fmt,
548 status = vtctx->get_param_set_func(vid_fmt,
583 VTEncContext *vtctx = avctx->priv_data;
594 if (vtctx->get_param_set_func) {
638 VTEncContext *vtctx = avctx->priv_data;
641 if (vtctx->async_error) {
647 set_async_error(vtctx, AVERROR_EXTERNAL);
658 set_async_error(vtctx, set_status);
663 vtenc_q_push(vtctx, sample_buffer, sei);
671 VTEncContext *vtctx = avctx->priv_data;
682 status = vtctx->get_param_set_func(vid_fmt,
706 VTEncContext *vtctx = avctx->priv_data;
707 int64_t profile = vtctx->profile;
709 if (profile == H264_PROF_AUTO && vtctx->level) {
711 profile = vtctx->has_b_frames ? H264_PROF_MAIN : H264_PROF_BASELINE;
721 switch (vtctx->level) {
743 switch (vtctx->level) {
762 switch (vtctx->level) {
785 switch (vtctx->level) {
811 VTEncContext *vtctx = avctx->priv_data;
812 int64_t profile = vtctx->profile;
853 VTEncContext *vtctx = avctx->priv_data;
855 if (vtctx->color_primaries) {
858 vtctx->color_primaries);
861 if (vtctx->transfer_function) {
864 vtctx->transfer_function);
867 if (vtctx->ycbcr_matrix) {
870 vtctx->ycbcr_matrix);
1084 VTEncContext *vtctx = avctx->priv_data;
1108 if (status || !vtctx->session) {
1112 if (!vtctx->allow_sw) {
1132 status = VTSessionSetProperty(vtctx->session,
1142 status = VTSessionSetProperty(vtctx->session,
1153 if (vtctx->prio_speed >= 0) {
1154 status = VTSessionSetProperty(vtctx->session,
1156 vtctx->prio_speed ? kCFBooleanTrue : kCFBooleanFalse);
1162 if ((vtctx->codec_id == AV_CODEC_ID_H264 || vtctx->codec_id == AV_CODEC_ID_HEVC)
1191 status = VTSessionSetProperty(vtctx->session,
1204 if (vtctx->codec_id != AV_CODEC_ID_HEVC)
1209 if (vtctx->codec_id == AV_CODEC_ID_HEVC) {
1210 if (avctx->pix_fmt == AV_PIX_FMT_BGRA && vtctx->alpha_quality > 0.0) {
1213 &vtctx->alpha_quality);
1216 status = VTSessionSetProperty(vtctx->session,
1224 status = VTSessionSetProperty(vtctx->session,
1240 status = VTSessionSetProperty(vtctx->session,
1251 if (vtctx->frames_before) {
1252 status = VTSessionSetProperty(vtctx->session,
1263 if (vtctx->frames_after) {
1264 status = VTSessionSetProperty(vtctx->session,
1318 status = VTSessionSetProperty(vtctx->session,
1339 if (vtctx->transfer_function) {
1340 status = VTSessionSetProperty(vtctx->session,
1342 vtctx->transfer_function);
1350 if (vtctx->ycbcr_matrix) {
1351 status = VTSessionSetProperty(vtctx->session,
1353 vtctx->ycbcr_matrix);
1361 if (vtctx->color_primaries) {
1362 status = VTSessionSetProperty(vtctx->session,
1364 vtctx->color_primaries);
1372 status = VTSessionSetProperty(vtctx->session,
1381 if (!vtctx->has_b_frames && avctx->codec_id != AV_CODEC_ID_PRORES) {
1382 status = VTSessionSetProperty(vtctx->session,
1392 if (vtctx->entropy != VT_ENTROPY_NOT_SET) {
1393 CFStringRef entropy = vtctx->entropy == VT_CABAC ?
1397 status = VTSessionSetProperty(vtctx->session,
1406 if (vtctx->realtime >= 0) {
1407 status = VTSessionSetProperty(vtctx->session,
1409 vtctx->realtime ? kCFBooleanTrue : kCFBooleanFalse);
1416 status = VTCompressionSessionPrepareToEncodeFrames(vtctx->session);
1430 VTEncContext *vtctx = avctx->priv_data;
1435 codec_type = get_cm_codec_type(avctx, vtctx->profile, vtctx->alpha_quality);
1449 vtctx->codec_id = avctx->codec_id;
1451 if (vtctx->codec_id == AV_CODEC_ID_H264) {
1452 vtctx->get_param_set_func = CMVideoFormatDescriptionGetH264ParameterSetAtIndex;
1454 vtctx->has_b_frames = avctx->max_b_frames > 0;
1455 if(vtctx->has_b_frames && vtctx->profile == H264_PROF_BASELINE){
1457 vtctx->has_b_frames = 0;
1460 if (vtctx->entropy == VT_CABAC && vtctx->profile == H264_PROF_BASELINE) {
1462 vtctx->entropy = VT_ENTROPY_NOT_SET;
1466 } else if (vtctx->codec_id == AV_CODEC_ID_HEVC) {
1467 vtctx->get_param_set_func = compat_keys.CMVideoFormatDescriptionGetHEVCParameterSetAtIndex;
1468 if (!vtctx->get_param_set_func) return AVERROR(EINVAL);
1471 vtctx->has_b_frames = avctx->max_b_frames > 0 ? 2 : 0;
1472 } else if (vtctx->codec_id == AV_CODEC_ID_PRORES) {
1486 if(vtctx->require_sw) {
1490 } else if (!vtctx->allow_sw) {
1509 vtctx->dts_delta = vtctx->has_b_frames ? -1 : 0;
1511 get_cv_transfer_function(avctx, &vtctx->transfer_function, &gamma_level);
1512 get_cv_ycbcr_matrix(avctx, &vtctx->ycbcr_matrix);
1513 get_cv_color_primaries(avctx, &vtctx->color_primaries);
1533 &vtctx->session);
1549 VTEncContext *vtctx = avctx->priv_data;
1555 pthread_mutex_init(&vtctx->lock, NULL);
1556 pthread_cond_init(&vtctx->cv_sample_sent, NULL);
1558 vtctx->session = NULL;
1562 status = VTSessionCopyProperty(vtctx->session,
1571 vtctx->has_b_frames = avctx->codec_id == AV_CODEC_ID_HEVC ? 2 : 1;
1573 vtctx->has_b_frames = 0;
1576 avctx->has_b_frames = vtctx->has_b_frames;
1987 VTEncContext *vtctx = avctx->priv_data;
2006 if (vtctx->get_param_set_func) {
2091 if (!vtctx->has_b_frames) {
2099 dts_delta = vtctx->dts_delta >= 0 ? vtctx->dts_delta : 0;
2122 VTEncContext *vtctx = avctx->priv_data;
2147 if (!vtctx->warned_color_range) {
2148 vtctx->warned_color_range = true;
2289 VTEncContext* vtctx = avctx->priv_data;
2329 pix_buf_pool = VTCompressionSessionGetPixelBufferPool(vtctx->session);
2337 vtstatus = VTCompressionSessionPrepareToEncodeFrames(vtctx->session);
2339 CFRelease(vtctx->session);
2340 vtctx->session = NULL;
2343 pix_buf_pool = VTCompressionSessionGetPixelBufferPool(vtctx->session);
2391 VTEncContext *vtctx,
2411 if (vtctx->a53_cc && side_data && side_data->size) {
2428 vtctx->session,
2454 VTEncContext *vtctx = avctx->priv_data;
2461 status = vtenc_send_frame(avctx, vtctx, frame);
2468 if (vtctx->frame_ct_in == 0) {
2469 vtctx->first_pts = frame->pts;
2470 } else if(vtctx->frame_ct_in == vtctx->has_b_frames) {
2471 vtctx->dts_delta = frame->pts - vtctx->first_pts;
2474 vtctx->frame_ct_in++;
2475 } else if(!vtctx->flushing) {
2476 vtctx->flushing = true;
2478 status = VTCompressionSessionCompleteFrames(vtctx->session,
2489 get_frame = vtctx->dts_delta >= 0 || !frame;
2495 status = vtenc_q_pop(vtctx, !frame, &buf, &sei);
2522 VTEncContext *vtctx = avctx->priv_data;
2535 &vtctx->session);
2539 pool = VTCompressionSessionGetPixelBufferPool(vtctx->session);
2555 status = VTCompressionSessionEncodeFrame(vtctx->session,
2573 status = VTCompressionSessionCompleteFrames(vtctx->session,
2579 status = vtenc_q_pop(vtctx, 0, &buf, NULL);
2591 if(vtctx->session)
2592 CFRelease(vtctx->session);
2594 vtctx->session = NULL;
2595 vtctx->frame_ct_out = 0;
2604 VTEncContext *vtctx = avctx->priv_data;
2606 if(!vtctx->session) {
2607 pthread_cond_destroy(&vtctx->cv_sample_sent);
2608 pthread_mutex_destroy(&vtctx->lock);
2612 VTCompressionSessionCompleteFrames(vtctx->session,
2614 clear_frame_queue(vtctx);
2615 pthread_cond_destroy(&vtctx->cv_sample_sent);
2616 pthread_mutex_destroy(&vtctx->lock);
2617 CFRelease(vtctx->session);
2618 vtctx->session = NULL;
2620 if (vtctx->color_primaries) {
2621 CFRelease(vtctx->color_primaries);
2622 vtctx->color_primaries = NULL;
2625 if (vtctx->transfer_function) {
2626 CFRelease(vtctx->transfer_function);
2627 vtctx->transfer_function = NULL;
2630 if (vtctx->ycbcr_matrix) {
2631 CFRelease(vtctx->ycbcr_matrix);
2632 vtctx->ycbcr_matrix = NULL;