MCPcopy Create free account
hub / github.com/FFmpeg/FFmpeg / construct_cc

Function construct_cc

libavdevice/decklink_enc.cpp:432–491  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

430
431#if CONFIG_LIBKLVANC
432static void construct_cc(AVFormatContext *avctx, struct decklink_ctx *ctx,
433 AVPacket *pkt, struct klvanc_line_set_s *vanc_lines)
434{
435 struct klvanc_packet_eia_708b_s *cdp;
436 uint16_t *cdp_words;
437 uint16_t len;
438 uint8_t cc_count;
439 size_t size;
440 int ret, i;
441
442 const uint8_t *data = av_packet_get_side_data(pkt, AV_PKT_DATA_A53_CC, &size);
443 if (!data)
444 return;
445
446 cc_count = size / 3;
447
448 ret = klvanc_create_eia708_cdp(&cdp);
449 if (ret)
450 return;
451
452 ret = klvanc_set_framerate_EIA_708B(cdp, ctx->bmd_tb_num, ctx->bmd_tb_den);
453 if (ret) {
454 av_log(avctx, AV_LOG_ERROR, "Invalid framerate specified: %" PRId64 "/%" PRId64 "\n",
455 ctx->bmd_tb_num, ctx->bmd_tb_den);
456 klvanc_destroy_eia708_cdp(cdp);
457 return;
458 }
459
460 if (cc_count > KLVANC_MAX_CC_COUNT) {
461 av_log(avctx, AV_LOG_ERROR, "Illegal cc_count received: %d\n", cc_count);
462 cc_count = KLVANC_MAX_CC_COUNT;
463 }
464
465 /* CC data */
466 cdp->header.ccdata_present = 1;
467 cdp->header.caption_service_active = 1;
468 cdp->ccdata.cc_count = cc_count;
469 for (i = 0; i < cc_count; i++) {
470 if (data [3*i] & 0x04)
471 cdp->ccdata.cc[i].cc_valid = 1;
472 cdp->ccdata.cc[i].cc_type = data[3*i] & 0x03;
473 cdp->ccdata.cc[i].cc_data[0] = data[3*i+1];
474 cdp->ccdata.cc[i].cc_data[1] = data[3*i+2];
475 }
476
477 klvanc_finalize_EIA_708B(cdp, ctx->cdp_sequence_num++);
478 ret = klvanc_convert_EIA_708B_to_words(cdp, &cdp_words, &len);
479 klvanc_destroy_eia708_cdp(cdp);
480 if (ret != 0) {
481 av_log(avctx, AV_LOG_ERROR, "Failed converting 708 packet to words\n");
482 return;
483 }
484
485 ret = klvanc_line_insert(ctx->vanc_ctx, vanc_lines, cdp_words, len, 11, 0);
486 free(cdp_words);
487 if (ret != 0) {
488 av_log(avctx, AV_LOG_ERROR, "VANC line insertion failed\n");
489 return;

Callers 1

decklink_construct_vancFunction · 0.85

Calls 2

av_packet_get_side_dataFunction · 0.85
av_logFunction · 0.85

Tested by

no test coverage detected