From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 164A743F89 for ; Fri, 21 Apr 2023 20:17:10 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id EFA4F68BE9A; Fri, 21 Apr 2023 23:17:07 +0300 (EEST) Received: from mail-qv1-f44.google.com (mail-qv1-f44.google.com [209.85.219.44]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 328BB68BCCE for ; Fri, 21 Apr 2023 23:17:01 +0300 (EEST) Received: by mail-qv1-f44.google.com with SMTP id 6a1803df08f44-5f16a6fe2b1so11105096d6.1 for ; Fri, 21 Apr 2023 13:17:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ltnglobal-com.20221208.gappssmtp.com; s=20221208; t=1682108219; x=1684700219; h=references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date:message-id:reply-to; bh=prnz0eSxGADERKBujCu7+MRaFi+iiunWolEi6QOKboI=; b=wkQ1wo6zIbNUHkqM3coN+tlKNoN/vAnAfOppO5aE6osjRRiDpQm6nK7w7UuwUOYmXm 1mHeNlMGEOfSt+7VPb73XIuBiMhpveE1abhkYoeZNOmfV9zRvs59/ah5GZv0poLqEzgP xEi3yjE2xwiyHY/xIdIGzNIwZjMEuPKAjW52dSruVJ468oxlt4ibE3A1MLFnUqBz9cxE Mw4Y/cK5yq2v/n1xJ5DyREP55NGl2So/VRmcL2yy33jmSGjupKoHfYUdenaToDcLPbls IfFey8+KfnC8D8JqKGL/bY7mP0UWHQNidWcWSnpD779jZRaRE+C5g/JorwLELEdNnFHl Aj1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682108219; x=1684700219; h=references:in-reply-to:message-id:date:subject:cc:to:from :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=prnz0eSxGADERKBujCu7+MRaFi+iiunWolEi6QOKboI=; b=MONOzmq/spaXf77GA/iqnHAE79l4zs0KGekpx9jbFcD+uty4fIOwsc2T55kQ3x1/LJ gh1/CLpDFMP4O5JpSjwUgtRIBDTJQLQm6xsjhN3AbdZSpKR7Juo51xha/0lrR8/XmLEn 30pT8O4MtCp9PZvGNDLV/wZEFWUvGnv4An+zuiuf/tepl1VNVIuivoAjcjdpXr5r74p0 DvK9Ut0ZpxqDEULZisZG3AtO+lEElhdknCg+8Na1RJnlq7ok5BalyEbbK7Y1/7py6Gby 7hwmDu8QmbrBEVid79ovaW7raBC8A7Z+rIDNpHf7myRPGMOcNuuRXlVArn7uW/SanjhT BC6w== X-Gm-Message-State: AAQBX9d652skkbQDERIHZMg+4YWn/Ks4tNTuE0AzMQfFzqOrJmWQj/CI pZOMMe1c/0WeX8n0n3XCwikdqlX0CNnWsEYHXtQ= X-Google-Smtp-Source: AKy350YVhCE5YhlR/E+Vmh45L0+OOyR1ACPOhX2ACmE/+XmDYjyzt7ogplWuWwdPCDCNcNx+FK30aQ== X-Received: by 2002:a05:6214:c29:b0:5af:9276:b59d with SMTP id a9-20020a0562140c2900b005af9276b59dmr6478327qvd.18.1682108219334; Fri, 21 Apr 2023 13:16:59 -0700 (PDT) Received: from ltnt-nyc-580testdevin.livetimenet.com (pool-71-105-132-214.nycmny.fios.verizon.net. [71.105.132.214]) by smtp.gmail.com with ESMTPSA id o6-20020a05622a008600b003eeff94e2f8sm1590475qtw.0.2023.04.21.13.16.58 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 21 Apr 2023 13:16:59 -0700 (PDT) From: Devin Heitmueller X-Google-Original-From: Devin Heitmueller To: ffmpeg-devel@ffmpeg.org Date: Fri, 21 Apr 2023 17:12:33 -0400 Message-Id: <1682111554-31597-2-git-send-email-dheitmueller@ltnglobal.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1682111554-31597-1-git-send-email-dheitmueller@ltnglobal.com> References: <1682111554-31597-1-git-send-email-dheitmueller@ltnglobal.com> Subject: [FFmpeg-devel] [PATCH 1/2] decklink: Move AVPacketQueue into decklink_common X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Devin Heitmueller MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: Move the AVPacketQueue functionality that is currently only used for the decklink decode module into decklink_common, so it can be shared by the decklink encoder (i.e. for VANC insertion when we receive data packets separate from video). Signed-off-by: Devin Heitmueller --- libavdevice/decklink_common.cpp | 115 ++++++++++++++++++++++++++++++++++++++++ libavdevice/decklink_common.h | 7 +++ libavdevice/decklink_dec.cpp | 114 --------------------------------------- 3 files changed, 122 insertions(+), 114 deletions(-) diff --git a/libavdevice/decklink_common.cpp b/libavdevice/decklink_common.cpp index acd1f77..31ab249 100644 --- a/libavdevice/decklink_common.cpp +++ b/libavdevice/decklink_common.cpp @@ -390,6 +390,121 @@ int ff_decklink_set_format(AVFormatContext *avctx, decklink_direction_t directio return ff_decklink_set_format(avctx, 0, 0, 0, 0, AV_FIELD_UNKNOWN, direction); } +void avpacket_queue_init(AVFormatContext *avctx, AVPacketQueue *q) +{ + struct decklink_cctx *ctx = (struct decklink_cctx *)avctx->priv_data; + memset(q, 0, sizeof(AVPacketQueue)); + pthread_mutex_init(&q->mutex, NULL); + pthread_cond_init(&q->cond, NULL); + q->avctx = avctx; + q->max_q_size = ctx->queue_size; +} + +void avpacket_queue_flush(AVPacketQueue *q) +{ + PacketListEntry *pkt, *pkt1; + + pthread_mutex_lock(&q->mutex); + for (pkt = q->pkt_list.head; pkt != NULL; pkt = pkt1) { + pkt1 = pkt->next; + av_packet_unref(&pkt->pkt); + av_freep(&pkt); + } + q->pkt_list.head = NULL; + q->pkt_list.tail = NULL; + q->nb_packets = 0; + q->size = 0; + pthread_mutex_unlock(&q->mutex); +} + +void avpacket_queue_end(AVPacketQueue *q) +{ + avpacket_queue_flush(q); + pthread_mutex_destroy(&q->mutex); + pthread_cond_destroy(&q->cond); +} + +unsigned long long avpacket_queue_size(AVPacketQueue *q) +{ + unsigned long long size; + pthread_mutex_lock(&q->mutex); + size = q->size; + pthread_mutex_unlock(&q->mutex); + return size; +} + +int avpacket_queue_put(AVPacketQueue *q, AVPacket *pkt) +{ + PacketListEntry *pkt1; + + // Drop Packet if queue size is > maximum queue size + if (avpacket_queue_size(q) > (uint64_t)q->max_q_size) { + av_packet_unref(pkt); + av_log(q->avctx, AV_LOG_WARNING, "Decklink input buffer overrun!\n"); + return -1; + } + /* ensure the packet is reference counted */ + if (av_packet_make_refcounted(pkt) < 0) { + av_packet_unref(pkt); + return -1; + } + + pkt1 = (PacketListEntry *)av_malloc(sizeof(*pkt1)); + if (!pkt1) { + av_packet_unref(pkt); + return -1; + } + av_packet_move_ref(&pkt1->pkt, pkt); + pkt1->next = NULL; + + pthread_mutex_lock(&q->mutex); + + if (!q->pkt_list.tail) { + q->pkt_list.head = pkt1; + } else { + q->pkt_list.tail->next = pkt1; + } + + q->pkt_list.tail = pkt1; + q->nb_packets++; + q->size += pkt1->pkt.size + sizeof(*pkt1); + + pthread_cond_signal(&q->cond); + + pthread_mutex_unlock(&q->mutex); + return 0; +} + +int avpacket_queue_get(AVPacketQueue *q, AVPacket *pkt, int block) +{ + int ret; + + pthread_mutex_lock(&q->mutex); + + for (;; ) { + PacketListEntry *pkt1 = q->pkt_list.head; + if (pkt1) { + q->pkt_list.head = pkt1->next; + if (!q->pkt_list.head) { + q->pkt_list.tail = NULL; + } + q->nb_packets--; + q->size -= pkt1->pkt.size + sizeof(*pkt1); + *pkt = pkt1->pkt; + av_free(pkt1); + ret = 1; + break; + } else if (!block) { + ret = 0; + break; + } else { + pthread_cond_wait(&q->cond, &q->mutex); + } + } + pthread_mutex_unlock(&q->mutex); + return ret; +} + int ff_decklink_list_devices(AVFormatContext *avctx, struct AVDeviceInfoList *device_list, int show_inputs, int show_outputs) diff --git a/libavdevice/decklink_common.h b/libavdevice/decklink_common.h index 088e165..d4330e5 100644 --- a/libavdevice/decklink_common.h +++ b/libavdevice/decklink_common.h @@ -232,4 +232,11 @@ int ff_decklink_list_formats(AVFormatContext *avctx, decklink_direction_t direct void ff_decklink_cleanup(AVFormatContext *avctx); int ff_decklink_init_device(AVFormatContext *avctx, const char* name); +void avpacket_queue_init(AVFormatContext *avctx, AVPacketQueue *q); +void avpacket_queue_flush(AVPacketQueue *q); +void avpacket_queue_end(AVPacketQueue *q); +unsigned long long avpacket_queue_size(AVPacketQueue *q); +int avpacket_queue_put(AVPacketQueue *q, AVPacket *pkt); +int avpacket_queue_get(AVPacketQueue *q, AVPacket *pkt, int block); + #endif /* AVDEVICE_DECKLINK_COMMON_H */ diff --git a/libavdevice/decklink_dec.cpp b/libavdevice/decklink_dec.cpp index 7bf5e37..b3ff2b0 100644 --- a/libavdevice/decklink_dec.cpp +++ b/libavdevice/decklink_dec.cpp @@ -471,120 +471,6 @@ skip_packet: return tgt; } -static void avpacket_queue_init(AVFormatContext *avctx, AVPacketQueue *q) -{ - struct decklink_cctx *ctx = (struct decklink_cctx *)avctx->priv_data; - memset(q, 0, sizeof(AVPacketQueue)); - pthread_mutex_init(&q->mutex, NULL); - pthread_cond_init(&q->cond, NULL); - q->avctx = avctx; - q->max_q_size = ctx->queue_size; -} - -static void avpacket_queue_flush(AVPacketQueue *q) -{ - PacketListEntry *pkt, *pkt1; - - pthread_mutex_lock(&q->mutex); - for (pkt = q->pkt_list.head; pkt != NULL; pkt = pkt1) { - pkt1 = pkt->next; - av_packet_unref(&pkt->pkt); - av_freep(&pkt); - } - q->pkt_list.head = NULL; - q->pkt_list.tail = NULL; - q->nb_packets = 0; - q->size = 0; - pthread_mutex_unlock(&q->mutex); -} - -static void avpacket_queue_end(AVPacketQueue *q) -{ - avpacket_queue_flush(q); - pthread_mutex_destroy(&q->mutex); - pthread_cond_destroy(&q->cond); -} - -static unsigned long long avpacket_queue_size(AVPacketQueue *q) -{ - unsigned long long size; - pthread_mutex_lock(&q->mutex); - size = q->size; - pthread_mutex_unlock(&q->mutex); - return size; -} - -static int avpacket_queue_put(AVPacketQueue *q, AVPacket *pkt) -{ - PacketListEntry *pkt1; - - // Drop Packet if queue size is > maximum queue size - if (avpacket_queue_size(q) > (uint64_t)q->max_q_size) { - av_packet_unref(pkt); - av_log(q->avctx, AV_LOG_WARNING, "Decklink input buffer overrun!\n"); - return -1; - } - /* ensure the packet is reference counted */ - if (av_packet_make_refcounted(pkt) < 0) { - av_packet_unref(pkt); - return -1; - } - - pkt1 = (PacketListEntry *)av_malloc(sizeof(*pkt1)); - if (!pkt1) { - av_packet_unref(pkt); - return -1; - } - av_packet_move_ref(&pkt1->pkt, pkt); - pkt1->next = NULL; - - pthread_mutex_lock(&q->mutex); - - if (!q->pkt_list.tail) { - q->pkt_list.head = pkt1; - } else { - q->pkt_list.tail->next = pkt1; - } - - q->pkt_list.tail = pkt1; - q->nb_packets++; - q->size += pkt1->pkt.size + sizeof(*pkt1); - - pthread_cond_signal(&q->cond); - - pthread_mutex_unlock(&q->mutex); - return 0; -} - -static int avpacket_queue_get(AVPacketQueue *q, AVPacket *pkt, int block) -{ - int ret; - - pthread_mutex_lock(&q->mutex); - - for (;; ) { - PacketListEntry *pkt1 = q->pkt_list.head; - if (pkt1) { - q->pkt_list.head = pkt1->next; - if (!q->pkt_list.head) { - q->pkt_list.tail = NULL; - } - q->nb_packets--; - q->size -= pkt1->pkt.size + sizeof(*pkt1); - *pkt = pkt1->pkt; - av_free(pkt1); - ret = 1; - break; - } else if (!block) { - ret = 0; - break; - } else { - pthread_cond_wait(&q->cond, &q->mutex); - } - } - pthread_mutex_unlock(&q->mutex); - return ret; -} static void handle_klv(AVFormatContext *avctx, decklink_ctx *ctx, IDeckLinkVideoInputFrame *videoFrame, int64_t pts) { -- 1.8.3.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".