From patchwork Tue May 14 11:33:14 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shiqi Zhu X-Patchwork-Id: 48871 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:3a48:b0:1af:fc2d:ff5a with SMTP id zu8csp899579pzb; Tue, 14 May 2024 04:33:36 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCWOgaF6zi9MMTAmXLUl1IbFPgXHqL77++kFKo3k+gQFAz0eOniMc0aiO0VBsactD7ZjDTA1/xrt+mXu1gsVIQwLRJNa5WT4m/D60Q== X-Google-Smtp-Source: AGHT+IFI6oVYMAVD+5poBG2eyzOxWnKf/UrI37hdsx8vgQ6h8+ei8poEF9MKiiuvVLVn5gjdxGUj X-Received: by 2002:a17:906:234d:b0:a5a:f4f:8214 with SMTP id a640c23a62f3a-a5a2d6286b6mr823240766b.6.1715686415820; Tue, 14 May 2024 04:33:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1715686415; cv=none; d=google.com; s=arc-20160816; b=QQGOBKr9bTcsHNTCxeWvEARlL63Qn3NNmjXmWKR6PkPA0UcPPZRvh8i5Uj6aRSy9Sy EPkPLJ85GHGZ9uvnMGVz3aEbtSIEFdDJd+w31lRlujIUT2ZaNVMPn2JLNZo8Ip1YwY+j UTw2QBt6oFjdRIKeofMWtSx0NHY/nMgz2TmEuztIpqZITOP90LZL35pFHrZkbS5ytSG8 T1gao/w1SK5uDQbnPKBSUDE+/Z1vCkBqEMyYX5Qa92DU2kBZXmzjwe7Ga8vOc350jQ7d gYrsa71RaLNLrjmboaVWfJnx97ZyMaqhkbWPC7ZxRBqgm6q14u6NErBhvTimGZmVvX5F TIwg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:message-id:date:to:from :dkim-signature:delivered-to; bh=SwGKni8LReHYI21db+dm33BUqMYsuVI36kUQ+JqnB34=; fh=jGeylq5Cq8cixZoV2Zp7uaY6E5GFel41JHto3Y2hIBs=; b=J9f9jdkChsm0f0Mh+bIfsLzEZ0VTOJSnPjUoT8ziuS651LO9Xy5rzMht4wtziw1aRB aKA67QAHw7hkNBQl3b7aQC7VBI1toGOoNV3RveqZwLv0Nn/u/zBS5wsfmnxAtmebaH42 Ho1eL5pp4bnOG6fYqqBvhd0Qdxt5cZt+i7Ygzn3kna+seVHaPrWWJLD2ZfhtK7JLjIDj N55qqla6+6xBcbxovke9te2yTeS81w7A8eRDDjsqWkVGb0I/CEx8W2SQtbi9Mq433w3j QTO6I1c29o1ufUzZSluOyKhZpKIaiW/5daVywAIt8751RsPqTr3goao9oDGFNm9Ejmag YGow==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=K2R6DK08; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id a640c23a62f3a-a5a17b20db2si611505966b.423.2024.05.14.04.33.31; Tue, 14 May 2024 04:33:35 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=K2R6DK08; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 36C5868D6F3; Tue, 14 May 2024 14:33:28 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pf1-f170.google.com (mail-pf1-f170.google.com [209.85.210.170]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 98CAA68D6B3 for ; Tue, 14 May 2024 14:33:21 +0300 (EEST) Received: by mail-pf1-f170.google.com with SMTP id d2e1a72fcca58-6f4603237e0so3796017b3a.0 for ; Tue, 14 May 2024 04:33:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1715686399; x=1716291199; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=64LpKryOxmtsbQuT61ZfNEV4GKOZUdiyUo3C5YXK46M=; b=K2R6DK08cDIZqiwUyr2caamjyMJGnqGPF8l2hSm9HBVWidlhHwwgoxo3ejia7Fp3I/ HPS0uHMIF8d1KC/yzmBeurPISPqzT+r0gPypM4BMRzvV6TFdroGqFDyrVnx/wwAwyDDz m0JO/UEYM/WtZI92mdkMuQjSwpGMCAq1hVjXCTZ1ARExSV+yEcHbj8EuvcQzuINwKH3i M9kBtsLLI9bDN5UF6B5/0Ne7AlWsIUMp1B+n8PCBNsgYY1rfo2QVB5zJTKxEsjD+iZx0 HFmooxkgaVUOkdbE5GdrQg11cmmkCfFa3noKNDrSYagvK4tQJ6HBPPJmS6NmUSBbekZc 47sQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1715686399; x=1716291199; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=64LpKryOxmtsbQuT61ZfNEV4GKOZUdiyUo3C5YXK46M=; b=bMznx5Mem3oIDqEjW5Ym0qCq+EjJ5BaBYbnJgu/gD/WWh9rjvOHOxKgiydkHk7Ha6Y Zoy///3cmbvFURbaVrQ73Xa1oY5A5usPv1mQ1XjbA++yIjNta+9T4wQBYLnPo/T2y9rt j5MlnBjP6ay3Ob7zLGXAI7xzMqlX/X6hRiv5jEyflUrtf3pSvG/sTnsSpij2Rqbo7TKy ccLcVfVFtNGxWOjREtCKcrY02hXl/0TtCgrMi2J+PIAy4r7PetXnu/eoVIwSxKlMKw8m Q33ygUVXtY1e6tJ3VtkVv4nE3LX3rWwGwfHojTDy/MO55xe5jvQsjaLrYCeEK6oU5pxI z8xg== X-Gm-Message-State: AOJu0Yw8KzBXLHZHnbEFkhpxJoH2CMikbRVfVvhR8Le0yRoQ74BGzhgF JJD2CRBaoEiU23i135a748R9tXVhi39mUv7I0eyOLDRJHx3hAuwAXWVWVw== X-Received: by 2002:a05:6a21:192:b0:1ad:7cc5:ecee with SMTP id adf61e73a8af0-1afd1417f0dmr24729603637.5.1715686399164; Tue, 14 May 2024 04:33:19 -0700 (PDT) Received: from PC.mioffice.cn ([43.224.245.231]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-634119041b2sm8027216a12.94.2024.05.14.04.33.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 May 2024 04:33:18 -0700 (PDT) From: Shiqi Zhu To: ffmpeg-devel@ffmpeg.org Date: Tue, 14 May 2024 19:33:14 +0800 Message-Id: <20240514113314.1821249-1-hiccupzhu@gmail.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] avformat/pcmdec: add pts and dts calculation for pcmdec 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: Shiqi Zhu Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: DpI9Oo/tikpZ Signed-off-by: Shiqi Zhu --- libavformat/pcmdec.c | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/libavformat/pcmdec.c b/libavformat/pcmdec.c index 2f6508b75a..d879aefaad 100644 --- a/libavformat/pcmdec.c +++ b/libavformat/pcmdec.c @@ -36,6 +36,7 @@ typedef struct PCMAudioDemuxerContext { AVClass *class; int sample_rate; AVChannelLayout ch_layout; + int64_t nb_samples; } PCMAudioDemuxerContext; static int pcm_read_header(AVFormatContext *s) @@ -46,6 +47,7 @@ static int pcm_read_header(AVFormatContext *s) uint8_t *mime_type = NULL; int ret; + s1->nb_samples = 0; st = avformat_new_stream(s, NULL); if (!st) return AVERROR(ENOMEM); @@ -104,6 +106,37 @@ static int pcm_read_header(AVFormatContext *s) return 0; } +static int pcm_dec_read_packet(AVFormatContext *s, AVPacket *pkt) +{ + PCMAudioDemuxerContext *s1 = s->priv_data; + AVCodecParameters *par = s->streams[0]->codecpar; + int ret; + + ret = ff_pcm_read_packet(s, pkt); + if (ret < 0) + return ret; + + pkt->time_base = s->streams[0]->time_base; + pkt->dts = pkt->pts = s1->nb_samples; + s1->nb_samples += pkt->size / par->block_align; + + return ret; +} + +static int pcm_dec_read_seek(AVFormatContext *s, + int stream_index, int64_t timestamp, int flags) +{ + PCMAudioDemuxerContext *s1 = s->priv_data; + int ret; + + ret = ff_pcm_read_seek(s, stream_index, timestamp, flags); + if (ret < 0) + return ret; + + s1->nb_samples = ffstream(s->streams[0])->cur_dts; + return ret; +} + static const AVOption pcm_options[] = { { "sample_rate", "", offsetof(PCMAudioDemuxerContext, sample_rate), AV_OPT_TYPE_INT, {.i64 = 44100}, 0, INT_MAX, AV_OPT_FLAG_DECODING_PARAM }, { "ch_layout", "", offsetof(PCMAudioDemuxerContext, ch_layout), AV_OPT_TYPE_CHLAYOUT, {.str = "mono"}, 0, 0, AV_OPT_FLAG_DECODING_PARAM }, @@ -126,8 +159,8 @@ const FFInputFormat ff_pcm_ ## name_ ## _demuxer = { \ .p.priv_class = &pcm_demuxer_class, \ .priv_data_size = sizeof(PCMAudioDemuxerContext), \ .read_header = pcm_read_header, \ - .read_packet = ff_pcm_read_packet, \ - .read_seek = ff_pcm_read_seek, \ + .read_packet = pcm_dec_read_packet, \ + .read_seek = pcm_dec_read_seek, \ .raw_codec_id = codec, \ __VA_ARGS__ \ };