[FFmpeg-devel] [PATCH 2/3] avformat/mpc: Simplify cleanup
Andreas Rheinhardt
andreas.rheinhardt at gmail.com
Sun Apr 19 03:47:19 EEST 2020
Andreas Rheinhardt:
> Andreas Rheinhardt:
>> Currently Musepack allocates an array that needs to be freed later in
>> the demuxer's read_close-function; it is the sole reason for said
>> function's existence. But it is unnecessary, because one can store this
>> array in the stream's priv_data pointer, so that it will be freed
>> generically.
>>
>> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at gmail.com>
>> ---
>> libavformat/mpc.c | 40 ++++++++++++++++------------------------
>> 1 file changed, 16 insertions(+), 24 deletions(-)
>>
>> diff --git a/libavformat/mpc.c b/libavformat/mpc.c
>> index 85036cd118..6a94b5d1d0 100644
>> --- a/libavformat/mpc.c
>> +++ b/libavformat/mpc.c
>> @@ -57,6 +57,7 @@ static int mpc_read_header(AVFormatContext *s)
>> {
>> MPCContext *c = s->priv_data;
>> AVStream *st;
>> + int ret;
>>
>> if(avio_rl24(s->pb) != MKTAG('M', 'P', '+', 0)){
>> av_log(s, AV_LOG_ERROR, "Not a Musepack file\n");
>> @@ -72,15 +73,6 @@ static int mpc_read_header(AVFormatContext *s)
>> av_log(s, AV_LOG_ERROR, "Too many frames, seeking is not possible\n");
>> return AVERROR_INVALIDDATA;
>> }
>> - if(c->fcount){
>> - c->frames = av_malloc(c->fcount * sizeof(MPCFrame));
>> - if(!c->frames){
>> - av_log(s, AV_LOG_ERROR, "Cannot allocate seektable\n");
>> - return AVERROR(ENOMEM);
>> - }
>> - }else{
>> - av_log(s, AV_LOG_WARNING, "Container reports no frames\n");
>> - }
>> c->curframe = 0;
>> c->lastframe = -1;
>> c->curbits = 8;
>> @@ -88,15 +80,27 @@ static int mpc_read_header(AVFormatContext *s)
>>
>> st = avformat_new_stream(s, NULL);
>> if (!st)
>> - goto mem_error;
>> + return AVERROR(ENOMEM);
>> +
>> + if (c->fcount) {
>> + c->frames = av_malloc(c->fcount * sizeof(MPCFrame));
>> + if (!c->frames) {
>> + av_log(s, AV_LOG_ERROR, "Cannot allocate seektable\n");
>> + return AVERROR(ENOMEM);
>> + }
>> + st->priv_data = c->frames;
>> + } else {
>> + av_log(s, AV_LOG_WARNING, "Container reports no frames\n");
>> + }
>> +
>> st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO;
>> st->codecpar->codec_id = AV_CODEC_ID_MUSEPACK7;
>> st->codecpar->channels = 2;
>> st->codecpar->channel_layout = AV_CH_LAYOUT_STEREO;
>> st->codecpar->bits_per_coded_sample = 16;
>>
>> - if (ff_get_extradata(s, st->codecpar, s->pb, 16) < 0)
>> - goto mem_error;
>> + if ((ret = ff_get_extradata(s, st->codecpar, s->pb, 16)) < 0)
>> + return ret;
>> st->codecpar->sample_rate = mpc_rate[st->codecpar->extradata[2] & 3];
>> avpriv_set_pts_info(st, 32, MPC_FRAMESIZE, st->codecpar->sample_rate);
>> /* scan for seekpoints */
>> @@ -113,9 +117,6 @@ static int mpc_read_header(AVFormatContext *s)
>> }
>>
>> return 0;
>> -mem_error:
>> - av_freep(&c->frames);
>> - return AVERROR(ENOMEM);
>> }
>>
>> static int mpc_read_packet(AVFormatContext *s, AVPacket *pkt)
>> @@ -176,14 +177,6 @@ static int mpc_read_packet(AVFormatContext *s, AVPacket *pkt)
>> return 0;
>> }
>>
>> -static int mpc_read_close(AVFormatContext *s)
>> -{
>> - MPCContext *c = s->priv_data;
>> -
>> - av_freep(&c->frames);
>> - return 0;
>> -}
>> -
>> /**
>> * Seek to the given position
>> * If position is unknown but is within the limits of file
>> @@ -232,7 +225,6 @@ AVInputFormat ff_mpc_demuxer = {
>> .read_probe = mpc_probe,
>> .read_header = mpc_read_header,
>> .read_packet = mpc_read_packet,
>> - .read_close = mpc_read_close,
>> .read_seek = mpc_read_seek,
>> .extensions = "mpc",
>> };
>>
> Will push tomorrow if there are no objections.
>
> - Andreas
>
Applied.
- Andreas
More information about the ffmpeg-devel
mailing list