[FFmpeg-devel] [PATCH 3/6] avformat/argo_asf: use ArgoASFContext in muxer
Andreas Rheinhardt
andreas.rheinhardt at gmail.com
Sat Aug 8 12:46:55 EEST 2020
Zane van Iperen:
> Preparation for options.
>
> Signed-off-by: Zane van Iperen <zane at zanevaniperen.com>
> ---
> libavformat/argo_asf.c | 42 +++++++++++++++++++++---------------------
> 1 file changed, 21 insertions(+), 21 deletions(-)
>
> diff --git a/libavformat/argo_asf.c b/libavformat/argo_asf.c
> index 52e37f9c10..1770192aad 100644
> --- a/libavformat/argo_asf.c
> +++ b/libavformat/argo_asf.c
> @@ -292,29 +292,28 @@ static void argo_asf_write_chunk_header(const ArgoASFChunkHeader *ckhdr, AVIOCon
>
> static int argo_asf_write_header(AVFormatContext *s)
> {
> - const AVCodecParameters *par = s->streams[0]->codecpar;
> - ArgoASFFileHeader fhdr;
> - ArgoASFChunkHeader chdr;
> -
> - fhdr.magic = ASF_TAG;
> - fhdr.version_major = 2;
> - fhdr.version_minor = 1;
> - fhdr.num_chunks = 1;
> - fhdr.chunk_offset = ASF_FILE_HEADER_SIZE;
> - strncpy(fhdr.name, av_basename(s->url), FF_ARRAY_ELEMS(fhdr.name));
> -
> - chdr.num_blocks = 0;
> - chdr.num_samples = ASF_SAMPLE_COUNT;
> - chdr.unk1 = 0;
> - chdr.sample_rate = par->sample_rate;
> - chdr.unk2 = ~0;
> - chdr.flags = ASF_CF_BITS_PER_SAMPLE | ASF_CF_ALWAYS1;
> + const AVCodecParameters *par = s->streams[0]->codecpar;
> + ArgoASFContext *ctx = s->priv_data;
> +
> + ctx->fhdr.magic = ASF_TAG;
> + ctx->fhdr.version_major = 2;
> + ctx->fhdr.version_minor = 1;
> + ctx->fhdr.num_chunks = 1;
> + ctx->fhdr.chunk_offset = ASF_FILE_HEADER_SIZE;
> + strncpy(ctx->fhdr.name, av_basename(s->url), FF_ARRAY_ELEMS(ctx->fhdr.name));
> +
> + ctx->ckhdr.num_blocks = 0;
> + ctx->ckhdr.num_samples = ASF_SAMPLE_COUNT;
> + ctx->ckhdr.unk1 = 0;
> + ctx->ckhdr.sample_rate = par->sample_rate;
> + ctx->ckhdr.unk2 = ~0;
> + ctx->ckhdr.flags = ASF_CF_BITS_PER_SAMPLE | ASF_CF_ALWAYS1;
>
> if (par->channels == 2)
> - chdr.flags |= ASF_CF_STEREO;
> + ctx->ckhdr.flags |= ASF_CF_STEREO;
>
> - argo_asf_write_file_header(&fhdr, s->pb);
> - argo_asf_write_chunk_header(&chdr, s->pb);
> + argo_asf_write_file_header(&ctx->fhdr, s->pb);
> + argo_asf_write_chunk_header(&ctx->ckhdr, s->pb);
> return 0;
> }
>
> @@ -353,6 +352,7 @@ AVOutputFormat ff_argo_asf_muxer = {
> .init = argo_asf_write_init,
> .write_header = argo_asf_write_header,
> .write_packet = argo_asf_write_packet,
> - .write_trailer = argo_asf_write_trailer
> + .write_trailer = argo_asf_write_trailer,
> + .priv_data_size = sizeof(ArgoASFContext)
> };
> #endif
>
There is no point keeping data only used once in your context which is
not what these contexts are there for. Coupled with patch 4/6 you are
adding a const AVClass * to the context of the demuxer although the
demuxer doesn't use it. 5/6 adds another field unused by the demuxer.
All of this could be better handled by simply using a small, dedicated
structure as context for the muxer.
- Andreas
More information about the ffmpeg-devel
mailing list