Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
From: Hiccup Zhu <hiccupzhu@gmail.com>
To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org>
Subject: Re: [FFmpeg-devel] [PATCH] avformat/pcmdec: add pts and dts calculation for pcmdec
Date: Wed, 15 May 2024 09:32:21 +0800
Message-ID: <CACW1+SbL3Gg3FR9VhgMD=g+fFRZwGCTRsQSZOQ0sg32PhnpdeA@mail.gmail.com> (raw)
In-Reply-To: <AS8P250MB074430B6107F156DF5E9FA028FE32@AS8P250MB0744.EURP250.PROD.OUTLOOK.COM>

The purpose of this patch is to calculate pts and dts when using pcmdemux.
Is there anything wrong with doing this, or do you have any suggestions for
improvement?

Andreas Rheinhardt <andreas.rheinhardt@outlook.com> 于2024年5月14日周二 19:41写道:

> Shiqi Zhu:
> > Signed-off-by: Shiqi Zhu <hiccupzhu@gmail.com>
> > ---
> >  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__                                             \
> >  };
>
> A quick test shows that PTS and DTS are already set generically for pcm
> formats (unless the AVFMT_FLAG_NOFILLIN flag is set). If it is not in
> your usecase, then you should provide details about this (preferably by
> opening a ticket on trac).
>
> - Andreas
>
> _______________________________________________
> 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".
>


-- 
THE HEART HAS HOW FAR YOU CAN GO FAR.
_______________________________________________
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".

  reply	other threads:[~2024-05-15  1:32 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-05-14 11:33 Shiqi Zhu
2024-05-14 11:40 ` Andreas Rheinhardt
2024-05-15  1:32   ` Hiccup Zhu [this message]
2024-05-15  1:39     ` Andreas Rheinhardt
2024-05-15 11:48       ` Hiccup Zhu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CACW1+SbL3Gg3FR9VhgMD=g+fFRZwGCTRsQSZOQ0sg32PhnpdeA@mail.gmail.com' \
    --to=hiccupzhu@gmail.com \
    --cc=ffmpeg-devel@ffmpeg.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
		ffmpegdev@gitmailbox.com
	public-inbox-index ffmpegdev

Example config snippet for mirrors.


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git