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 ESMTPS id 700B44BEB8 for ; Tue, 4 Feb 2025 12:32:24 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0EBEA68B7AE; Tue, 4 Feb 2025 14:32:18 +0200 (EET) Received: from mail-qk1-f180.google.com (mail-qk1-f180.google.com [209.85.222.180]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 60C5D68B77F for ; Tue, 4 Feb 2025 14:32:11 +0200 (EET) Received: by mail-qk1-f180.google.com with SMTP id af79cd13be357-7b6e9db19c8so494428885a.3 for ; Tue, 04 Feb 2025 04:32:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738672329; x=1739277129; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=H/mAcCuUxrqcGaJl9S9FC3DGUa9qY9oL3fF+nkNatgs=; b=GCQIZU6pNG/eVCNdhL5QxPaIKOO0stfxUKcodScT3/oH8bXarQyyWtCf5oQ9ATtfcD HSa1rFzLybTCHle96syASyYbQ6l3XQOflSluCyZDyTogf5gFLsXl5WJ4e0QGA0Eo2j5r uTDwBgu5Am40Y+ULuMbq1AugXb0oFkXKc8X5XqY8EySu+FM6B5CHJ8k6UxA8lqGXRK2r Fg0KqZ9w0/QPNOaihMyuXHoo5rUh2G1oJ04fhxB9isMJbxspzir4mtZylKexmJ/jaG35 DogTZfTrIbXEWAkYLr/ukcM0bYbbXSMCvAkcImAvMT5utrFZv1fi9Ta6SZc6XPcrpbrw dmHw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738672329; x=1739277129; h=content-transfer-encoding:mime-version: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=H/mAcCuUxrqcGaJl9S9FC3DGUa9qY9oL3fF+nkNatgs=; b=Or6ToMq/lX9VpRPE1KhDnNmpKb/mQUKYnK9mYce5aRCknbIgaXyR+KRk8HkDtHWWpa MpDlQKlCoBC+o6VF9c9rm69iR3DvTDTtNMPDwO8hrrzC95MUGw3XwtylE4qNnugVZoAd +UXKSOCP1lhl8tz9n5WVIdYnUhet13hyl2Bw/edI+SS3ujhNO+oPsDZovoF827YHCMhU 9DKpg5QFnj//XzaNsgTkxrfULgjBhI1vIsDKQGaSQuXNiLqeFi1Xtp75982ArlVsix2U lTc0pmPdchUQcQDVsCQNvw2sJK+rL57vHYyC4HLT85CTglp7yV9ijcyLaFQknseFDV4H uIuw== X-Gm-Message-State: AOJu0YyHkyEGew5s5yFrRuIWb27pR7GdDDZ8ENutLMG4V27WNKIGDtw2 izUi3NRd3iyezj+vldXzgLhuGDLsF5TaJZ59V7TJq2hKTIm8OMz8tHC1dj1/YkmfkQ== X-Gm-Gg: ASbGncsU2BOicAzCAmpPh1w25aSrskd9n7svryiIjxA4GKY1k7JpG0yH+Pg6QorLR78 vpl55VJgXCYpmrpPxMHazpO/g6mhc/cGWqwtmmB7twku73viTyGQhJmvpKzcKXthEEiRBvp3Wjs qK+AGTJ70BdZQFZU4JLPK/w+s512Ao4CR/BvtckEzQe5xBCcSF6AdoFRoiBZ9g/OcEQpVPJ9SVf scbfgkaAYy05JhIC4yn+Rbjs7S49tMiUgUy3zbMLnoiituAadPqq+ws0gS91bran3EZqSgjEFlG Vdain4w3/GGzSZMyHC0lpSfeXycOn8NRqMlNWN5vPqQtv/WgQ7oRNbJYXX/J5TBnpZ41m+0= X-Google-Smtp-Source: AGHT+IGHwWVzgJ44OvWOusiGjLJ3vLvNL3aer9D1L+excjSOpeC/Ka4EenpFYT4nHTKrzMwf3+FeZA== X-Received: by 2002:a05:6214:246c:b0:6d8:b115:76a6 with SMTP id 6a1803df08f44-6e243a7f94dmr379777386d6.0.1738672329188; Tue, 04 Feb 2025 04:32:09 -0800 (PST) Received: from localhost.localdomain ([148.59.171.204]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-6e2547f2c78sm61366766d6.6.2025.02.04.04.32.04 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Tue, 04 Feb 2025 04:32:08 -0800 (PST) From: Romain Beauxis To: ffmpeg-devel@ffmpeg.org Date: Tue, 4 Feb 2025 07:31:44 -0500 Message-Id: <20250204123145.53059-2-romain.beauxis@gmail.com> X-Mailer: git-send-email 2.39.5 (Apple Git-154) In-Reply-To: <20250204123145.53059-1-romain.beauxis@gmail.com> References: <20250204123145.53059-1-romain.beauxis@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3 1/2] Parse and process ogg/flac comments in chained bitstreams. 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: epirat07@gmail.com, Romain Beauxis 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: libavformat/oggparseflac: Parse ogg/flac comments in new ogg packets, add them to ogg stream new_metadata. libavcodec/flacdec: Process AV_PKT_DATA_METADATA_UPDATE on new packets, add them as new metadata on the new decoded audio frame. --- libavcodec/flacdec.c | 20 +++++++++++++++++++- libavformat/oggparseflac.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/libavcodec/flacdec.c b/libavcodec/flacdec.c index ad921a1bd1..337f3e1702 100644 --- a/libavcodec/flacdec.c +++ b/libavcodec/flacdec.c @@ -68,6 +68,8 @@ typedef struct FLACContext { unsigned int decoded_buffer_size_33bps; int buggy_lpc; ///< use workaround for old lavc encoded files + AVDictionary *pending_metadata; + FLACDSPContext dsp; } FLACContext; @@ -718,6 +720,8 @@ static int flac_decode_frame(AVCodecContext *avctx, AVFrame *frame, int buf_size = avpkt->size; FLACContext *s = avctx->priv_data; int bytes_read = 0; + const uint8_t *side_metadata; + size_t size; int ret; *got_frame_ptr = 0; @@ -728,7 +732,14 @@ static int flac_decode_frame(AVCodecContext *avctx, AVFrame *frame, } if (buf_size > 0 && (*buf & 0x7F) == FLAC_METADATA_TYPE_VORBIS_COMMENT) { - av_log(s->avctx, AV_LOG_DEBUG, "skipping vorbis comment\n"); + /* New metadata */ + side_metadata = av_packet_get_side_data(avpkt, AV_PKT_DATA_METADATA_UPDATE, &size); + if (side_metadata) { + av_dict_free(&s->pending_metadata); + ret = av_packet_unpack_dictionary(side_metadata, size, &s->pending_metadata); + if (ret < 0) + return ret; + } return buf_size; } @@ -788,6 +799,12 @@ static int flac_decode_frame(AVCodecContext *avctx, AVFrame *frame, buf_size - bytes_read, buf_size); } + + if (s->pending_metadata) { + av_dict_copy(&frame->metadata, s->pending_metadata, AV_DICT_APPEND); + av_dict_free(&s->pending_metadata); + } + *got_frame_ptr = 1; return bytes_read; @@ -799,6 +816,7 @@ static av_cold int flac_decode_close(AVCodecContext *avctx) av_freep(&s->decoded_buffer); av_freep(&s->decoded_buffer_33bps); + av_dict_free(&s->pending_metadata); return 0; } diff --git a/libavformat/oggparseflac.c b/libavformat/oggparseflac.c index f25ed9cc15..3810806112 100644 --- a/libavformat/oggparseflac.c +++ b/libavformat/oggparseflac.c @@ -78,6 +78,32 @@ flac_header (AVFormatContext * s, int idx) return 1; } +static int +flac_packet (AVFormatContext * s, int idx) +{ + struct ogg *ogg = s->priv_data; + struct ogg_stream *os = ogg->streams + idx; + AVDictionary *new_metadata = NULL; + int ret; + + if (os->psize > 0 && os->buf[os->pstart] && + (os->buf[os->pstart] & 0x7F) == FLAC_METADATA_TYPE_VORBIS_COMMENT) { + ret = ff_vorbis_comment(s, &new_metadata, os->buf + os->pstart + 4, + os->psize - 4, 1); + + if (ret < 0) + return ret; + + os->new_metadata = av_packet_pack_dictionary(new_metadata, &os->new_metadata_size); + av_dict_free(&new_metadata); + + if (!os->new_metadata) + return AVERROR(ENOMEM); + } + + return 0; +} + static int old_flac_header (AVFormatContext * s, int idx) { @@ -130,6 +156,7 @@ const struct ogg_codec ff_flac_codec = { .magic = "\177FLAC", .magicsize = 5, .header = flac_header, + .packet = flac_packet, .nb_header = 2, }; @@ -137,5 +164,6 @@ const struct ogg_codec ff_old_flac_codec = { .magic = "fLaC", .magicsize = 4, .header = old_flac_header, + .packet = flac_packet, .nb_header = 0, }; -- 2.39.5 (Apple Git-154) _______________________________________________ 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".