[FFmpeg-devel] [PATCH] avformat/aiffenc: add aiff_init()

Paul B Mahol onemda at gmail.com
Sat Jun 17 12:43:38 EEST 2017


On 5/28/17, James Almer <jamrial at gmail.com> wrote:
> Signed-off-by: James Almer <jamrial at gmail.com>
> ---
>  libavformat/aiffenc.c | 45 +++++++++++++++++++++++++++++----------------
>  1 file changed, 29 insertions(+), 16 deletions(-)
>
> diff --git a/libavformat/aiffenc.c b/libavformat/aiffenc.c
> index fcadf149a0..1e0c5b11a0 100644
> --- a/libavformat/aiffenc.c
> +++ b/libavformat/aiffenc.c
> @@ -98,13 +98,11 @@ static void put_meta(AVFormatContext *s, const char
> *key, uint32_t id)
>      }
>  }
>
> -static int aiff_write_header(AVFormatContext *s)
> +static int aiff_init(AVFormatContext *s)
>  {
>      AIFFOutputContext *aiff = s->priv_data;
> -    AVIOContext *pb = s->pb;
>      AVCodecParameters *par;
> -    uint64_t sample_rate;
> -    int i, aifc = 0;
> +    int i;
>
>      aiff->audio_stream_idx = -1;
>      for (i = 0; i < s->nb_streams; i++) {
> @@ -126,6 +124,32 @@ static int aiff_write_header(AVFormatContext *s)
>      /* First verify if format is ok */
>      if (!par->codec_tag)
>          return -1;
> +
> +    if (!par->bits_per_coded_sample)
> +        par->bits_per_coded_sample = av_get_bits_per_sample(par->codec_id);
> +    if (!par->bits_per_coded_sample) {
> +        av_log(s, AV_LOG_ERROR, "could not compute bits per sample\n");
> +        return -1;
> +    }
> +    if (!par->block_align)
> +        par->block_align = (par->bits_per_coded_sample * par->channels) >>
> 3;
> +
> +    avpriv_set_pts_info(s->streams[aiff->audio_stream_idx], 64, 1,
> +
> s->streams[aiff->audio_stream_idx]->codecpar->sample_rate);
> +
> +    return 0;
> +}
> +
> +static int aiff_write_header(AVFormatContext *s)
> +{
> +    AIFFOutputContext *aiff = s->priv_data;
> +    AVIOContext *pb = s->pb;
> +    AVCodecParameters *par;
> +    uint64_t sample_rate;
> +    int aifc = 0;
> +
> +    par = s->streams[aiff->audio_stream_idx]->codecpar;
> +
>      if (par->codec_tag != MKTAG('N','O','N','E'))
>          aifc = 1;
>
> @@ -165,15 +189,6 @@ static int aiff_write_header(AVFormatContext *s)
>      aiff->frames = avio_tell(pb);
>      avio_wb32(pb, 0);              /* Number of frames */
>
> -    if (!par->bits_per_coded_sample)
> -        par->bits_per_coded_sample = av_get_bits_per_sample(par->codec_id);
> -    if (!par->bits_per_coded_sample) {
> -        av_log(s, AV_LOG_ERROR, "could not compute bits per sample\n");
> -        return -1;
> -    }
> -    if (!par->block_align)
> -        par->block_align = (par->bits_per_coded_sample * par->channels) >>
> 3;
> -
>      avio_wb16(pb, par->bits_per_coded_sample); /* Sample size */
>
>      sample_rate = av_double2int(par->sample_rate);
> @@ -199,9 +214,6 @@ static int aiff_write_header(AVFormatContext *s)
>      avio_wb32(pb, 0);                    /* Data offset */
>      avio_wb32(pb, 0);                    /* Block-size (block align) */
>
> -    avpriv_set_pts_info(s->streams[aiff->audio_stream_idx], 64, 1,
> -
> s->streams[aiff->audio_stream_idx]->codecpar->sample_rate);
> -
>      /* Data is starting here */
>      avio_flush(pb);
>
> @@ -327,6 +339,7 @@ AVOutputFormat ff_aiff_muxer = {
>      .priv_data_size    = sizeof(AIFFOutputContext),
>      .audio_codec       = AV_CODEC_ID_PCM_S16BE,
>      .video_codec       = AV_CODEC_ID_PNG,
> +    .init              = aiff_init,
>      .write_header      = aiff_write_header,
>      .write_packet      = aiff_write_packet,
>      .write_trailer     = aiff_write_trailer,
> --
> 2.12.1
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>

Could you explain in detail what this patch does?


More information about the ffmpeg-devel mailing list