[FFmpeg-devel] [PATCH v2 2/2] avformat/westwoodaudenc: Adds muxer for Westwood AUD format.

Zane van Iperen zane at zanevaniperen.com
Sat Apr 24 13:25:26 EEST 2021



On 24/4/21 8:35 am, Aidan Richmond wrote:

> +
> +    if (st->codecpar->codec_id != AV_CODEC_ID_ADPCM_IMA_WS) {
> +        av_log(st, AV_LOG_ERROR, "%s codec not supported for Westwood AUD.\n",
> +               avcodec_get_name(st->codecpar->codec_id));
> +        return -1;

AVERROR(EINVAL)

> +    }
> +
> +    if (ctx->nb_streams != 1) {
> +        av_log(st, AV_LOG_ERROR, "AUD files have exactly one stream\n");
> +        return AVERROR(EINVAL);
> +    }
> +

Move both these checks into an init function.

> +static int wsaud_write_trailer(AVFormatContext *ctx)
> +{
> +    AVIOContext  *pb = ctx->pb;
> +    AUDMuxContext *a = ctx->priv_data;
> +
> +    if(!pb->seekable) {
> +        av_log(ctx->streams[0], AV_LOG_ERROR, "Cannot seek to write file size to header.");
> +        return -1;
> +    }
> +

Same with this one. No point writing the file at all if it's not seekable.

> +    avio_seek(pb, 2, SEEK_SET);
> +    avio_wl32(pb, a->size);
> +    avio_wl32(pb, a->uncomp_size);
> +
> +    return 0;
> +}
> +
> +AVOutputFormat ff_wsaud_muxer = {
> +    .name              = "wsaud",
> +    .long_name         = NULL_IF_CONFIG_SMALL("Westwood Studios audio"),
> +    .extensions        = "aud",
> +    .priv_data_size    = sizeof(AUDMuxContext),
> +    .audio_codec       = AV_CODEC_ID_ADPCM_IMA_WS,
> +    .video_codec       = AV_CODEC_ID_NONE,
> +    .write_header      = wsaud_write_header,
> +    .write_packet      = wsaud_write_packet,
> +    .write_trailer     = wsaud_write_trailer,
> +};
> 


More information about the ffmpeg-devel mailing list