From patchwork Wed Nov 18 16:52:45 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 23706 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 3A3B044B913 for ; Wed, 18 Nov 2020 18:53:39 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2272B68B67A; Wed, 18 Nov 2020 18:53:39 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt1-f193.google.com (mail-qt1-f193.google.com [209.85.160.193]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id EBFC168B66D for ; Wed, 18 Nov 2020 18:53:36 +0200 (EET) Received: by mail-qt1-f193.google.com with SMTP id b16so2104851qtb.6 for ; Wed, 18 Nov 2020 08:53:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=PgAmTJdYDU9yglJqXR+4JTmF+e0fx30ZuCm3NQabw2w=; b=VfRyCksN//ClN5yyuXWn0EAExyeoqzNVqzWrGOFDlVtdfj4bwWkcZgE9xLfxx2eCN1 5hAtg9FKqJn+2lFOb3n6iKDRDm4F/vjnjurFoI0KG6l3FS/RCGBnoqS5ZfMjvvRx0N06 ROg7mogJOXPNb4dkuVBm824TF6MyebXmLeAn0Q9r9gimEF+yRD/cFdGCf6XuD6iVOh9n TJq0Kf58Ro2xEm2Is6uivqf+xDMoZZlj0jp8m7T08Mo4eovgV9lANpzIZEgqeSeBbzK2 wjOxwDkmZWnIBECJ7Osv/5GRUkJnR+XfUBx2EU0A7cx/3ocHB3vxi/OAk4Y6TZfHFnCq /SCw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=PgAmTJdYDU9yglJqXR+4JTmF+e0fx30ZuCm3NQabw2w=; b=h5gFrqggcVyI8BjlDxN2n1ALaitdIOJOnfdDSIJQ0SARr00jHsSa5oLlZ1pLfs/Mod 2kw8yyaA2Z/aXw9L/vBwPKCIyyd7ybwBgh5UXTCmWCk0Z6jt74w4Kux144Avqkr3vKk3 wvUluNnvQoMSZYlk7xMwO7r7+QDn0HD04WSS1k+tI5/HkmmbmDYs8ppWfTM0gKWUa6jA 8FNCUm7pVZagm5WuWOZHvFblyDgM5Usf2ieLYSCk7UhP8hX0XVYY1BQ8ZOeriMHx1Kiu cTQ/rGvBl6E1AK4eTe0IROiG1DrtCN7U9x2ZhzbwSKslt7ayagSczRpx2zcK0YzhEg9F vN/A== X-Gm-Message-State: AOAM5305eYhIAHYuADpF7upYhsKC5or6T7nWXMbLeBKjo48yWaQWZQES 7DvWPjs7OWOVWp2vnQ6VoTJp3m8q1FY5HQ== X-Google-Smtp-Source: ABdhPJyJbfLBc3W5D7xoe8rvVnk2ZJoEvB9WP8tQ2c4w9lVQ0SfbqhCU9dRW9cIe9rhoPgPZpIdkcA== X-Received: by 2002:aed:2726:: with SMTP id n35mr5097220qtd.254.1605718414968; Wed, 18 Nov 2020 08:53:34 -0800 (PST) Received: from localhost.localdomain ([181.23.91.217]) by smtp.gmail.com with ESMTPSA id f14sm4863788qkk.89.2020.11.18.08.53.33 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 18 Nov 2020 08:53:34 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Wed, 18 Nov 2020 13:52:45 -0300 Message-Id: <20201118165247.4130-17-jamrial@gmail.com> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20201118165247.4130-1-jamrial@gmail.com> References: <20201118165247.4130-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 16/18] avformat/matroskadec: port to the new packet list API X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Signed-off-by: James Almer --- libavformat/matroskadec.c | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index 0970e1d1ef..4be31daa93 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -366,8 +366,7 @@ typedef struct MatroskaDemuxContext { int64_t segment_start; /* the packet queue */ - PacketListEntry *queue; - PacketListEntry *queue_end; + AVPacketList *queue; int done; @@ -2872,6 +2871,10 @@ static int matroska_read_header(AVFormatContext *s) } ebml_free(ebml_syntax, &ebml); + matroska->queue = av_packet_list_alloc(); + if (!matroska->queue) + return AVERROR(ENOMEM); + /* The next thing is a segment. */ pos = avio_tell(matroska->ctx->pb); res = ebml_parse(matroska, matroska_segments, matroska); @@ -2988,11 +2991,10 @@ fail: static int matroska_deliver_packet(MatroskaDemuxContext *matroska, AVPacket *pkt) { - if (matroska->queue) { + if (!av_packet_list_get(matroska->queue, pkt, 0)) { MatroskaTrack *tracks = matroska->tracks.elem; MatroskaTrack *track; - avpriv_packet_list_get(&matroska->queue, &matroska->queue_end, pkt); track = &tracks[pkt->stream_index]; if (track->has_palette) { uint8_t *pal = av_packet_new_side_data(pkt, AV_PKT_DATA_PALETTE, AVPALETTE_SIZE); @@ -3014,7 +3016,7 @@ static int matroska_deliver_packet(MatroskaDemuxContext *matroska, */ static void matroska_clear_queue(MatroskaDemuxContext *matroska) { - avpriv_packet_list_free(&matroska->queue, &matroska->queue_end); + av_packet_list_flush(matroska->queue); } static int matroska_parse_laces(MatroskaDemuxContext *matroska, uint8_t **buf, @@ -3180,7 +3182,7 @@ static int matroska_parse_rm_audio(MatroskaDemuxContext *matroska, track->audio.buf_timecode = AV_NOPTS_VALUE; pkt->pos = pos; pkt->stream_index = st->index; - ret = avpriv_packet_list_put(&matroska->queue, &matroska->queue_end, pkt, NULL, 0); + ret = av_packet_list_put(matroska->queue, pkt, NULL, 0); if (ret < 0) { av_packet_unref(pkt); return AVERROR(ENOMEM); @@ -3402,7 +3404,7 @@ static int matroska_parse_webvtt(MatroskaDemuxContext *matroska, pkt->duration = duration; pkt->pos = pos; - err = avpriv_packet_list_put(&matroska->queue, &matroska->queue_end, pkt, NULL, 0); + err = av_packet_list_put(matroska->queue, pkt, NULL, 0); if (err < 0) { av_packet_unref(pkt); return AVERROR(ENOMEM); @@ -3513,7 +3515,7 @@ FF_DISABLE_DEPRECATION_WARNINGS FF_ENABLE_DEPRECATION_WARNINGS #endif - res = avpriv_packet_list_put(&matroska->queue, &matroska->queue_end, pkt, NULL, 0); + res = av_packet_list_put(matroska->queue, pkt, NULL, 0); if (res < 0) { av_packet_unref(pkt); return AVERROR(ENOMEM); @@ -3823,6 +3825,7 @@ static int matroska_read_close(AVFormatContext *s) int n; matroska_clear_queue(matroska); + av_packet_list_free(&matroska->queue); for (n = 0; n < matroska->tracks.nb_elem; n++) if (tracks[n].type == MATROSKA_TRACK_TYPE_AUDIO) @@ -3886,8 +3889,8 @@ static int webm_clusters_start_with_keyframe(AVFormatContext *s) before_pos = avio_tell(s->pb); while (1) { uint64_t cluster_id, cluster_length; - int read; - AVPacket *pkt; + int read, flags; + AVPacket pkt; avio_seek(s->pb, cluster_pos, SEEK_SET); // read cluster id and length read = ebml_read_num(matroska, matroska->ctx->pb, 4, &cluster_id, 1); @@ -3900,13 +3903,15 @@ static int webm_clusters_start_with_keyframe(AVFormatContext *s) matroska_reset_status(matroska, 0, cluster_pos); matroska_clear_queue(matroska); if (matroska_parse_cluster(matroska) < 0 || - !matroska->queue) { + av_packet_list_peek(matroska->queue, NULL, 0)) { break; } - pkt = &matroska->queue->pkt; + av_packet_list_peek(matroska->queue, &pkt, 0); + flags = pkt.flags; + av_packet_unref(&pkt); // 4 + read is the length of the cluster id and the cluster length field. cluster_pos += 4 + read + cluster_length; - if (!(pkt->flags & AV_PKT_FLAG_KEY)) { + if (!(flags & AV_PKT_FLAG_KEY)) { rv = 0; break; }