Work around AJA SDK not recogizing CEA708 packets when capturing TALL frames in SD modes

Stop using CountAncillaryDataWithType(AJAAncillaryDataType_Cea708) etc
because for SD it doesn't recognize the packets. It assumes they would
only be received on AJAAncillaryDataChannel_Y but for SD it is actually
AJAAncillaryDataChannel_Both.
This commit is contained in:
Sebastian Dröge 2021-03-05 14:35:34 +02:00
parent e70dcfa588
commit 6deeb2389e

View file

@ -1105,15 +1105,23 @@ static GstFlowReturn gst_aja_src_create(GstPushSrc *psrc, GstBuffer **buffer) {
gst_clear_buffer(&item.anc_buffer); gst_clear_buffer(&item.anc_buffer);
gst_clear_buffer(&item.anc_buffer2); gst_clear_buffer(&item.anc_buffer2);
if (anc_packets.CountAncillaryDataWithType(AJAAncillaryDataType_Cea708)) { // Not using CountAncillaryDataWithType(AJAAncillaryDataType_Cea708) etc
AJAAncillaryData packet = // here because for SD it doesn't recognize the packets. It assumes they
anc_packets.GetAncillaryDataWithType(AJAAncillaryDataType_Cea708); // would only be received on AJAAncillaryDataChannel_Y but for SD it is
// actually AJAAncillaryDataChannel_Both.
//
// See AJA SDK support ticket #4844.
guint32 n_vanc_packets = anc_packets.CountAncillaryData();
for (guint32 i = 0; i < n_vanc_packets; i++) {
AJAAncillaryData *packet = anc_packets.GetAncillaryDataAtIndex(i);
if (packet.GetPayloadData() && packet.GetPayloadByteCount() && if (packet->GetDID() == AJAAncillaryData_CEA708_DID &&
AJA_SUCCESS(packet.ParsePayloadData())) { packet->GetSID() == AJAAncillaryData_CEA708_SID &&
packet->GetPayloadData() && packet->GetPayloadByteCount() &&
AJA_SUCCESS(packet->ParsePayloadData())) {
gst_buffer_add_video_caption_meta( gst_buffer_add_video_caption_meta(
*buffer, GST_VIDEO_CAPTION_TYPE_CEA708_CDP, packet.GetPayloadData(), *buffer, GST_VIDEO_CAPTION_TYPE_CEA708_CDP, packet->GetPayloadData(),
packet.GetPayloadByteCount()); packet->GetPayloadByteCount());
} }
} }