#include "rtp_time.hpp"

extern "C" int attach_rtp_fixture(GstBuffer* batch_buffer, unsigned timestamp, unsigned rate) {
    NvDsBatchMeta* batch = gst_buffer_get_nvds_batch_meta(batch_buffer);
    if (!batch || !batch->frame_meta_list) return 1;
    GstBuffer* packet = gst_rtp_buffer_new_allocate(1, 0, 0);
    GstRTPBuffer rtp = GST_RTP_BUFFER_INIT;
    if (!gst_rtp_buffer_map(packet, GST_MAP_WRITE, &rtp)) return 2;
    gst_rtp_buffer_set_timestamp(&rtp, timestamp);
    gst_rtp_buffer_set_ssrc(&rtp, 1);
    gst_rtp_buffer_unmap(&rtp);
    GstCaps* caps = gst_caps_new_simple("application/x-rtp", "clock-rate", G_TYPE_INT, (int)rate, nullptr);
    bool ok = contextra_rtp::attach_packet_time(packet, caps);
    gst_caps_unref(caps);
    // Copy only metadata; this fixture does not claim a Decode/mux run.
    GstBuffer* decoded = gst_buffer_new();
    gst_buffer_copy_into(decoded, packet, GST_BUFFER_COPY_META, 0, -1);
    gst_buffer_unref(packet);
    ok = ok && contextra_rtp::attach_frame_time(decoded);
    if (ok) nvds_copy_gst_meta_to_frame_meta(decoded, batch, (NvDsFrameMeta*)batch->frame_meta_list->data);
    gst_buffer_unref(decoded);
    return ok ? 0 : 3;
}
