[FFmpeg-devel] [PATCH 4/4] avformat/asf: Use ff_add_attached_pic() to read attached pics
Andreas Rheinhardt
andreas.rheinhardt at outlook.com
Tue Mar 30 16:28:16 EEST 2021
James Almer:
> On 3/29/2021 5:45 AM, Andreas Rheinhardt wrote:
>> Also removes a stack packet.
>>
>> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at outlook.com>
>> ---
>> libavformat/asf.c | 17 +++--------------
>> 1 file changed, 3 insertions(+), 14 deletions(-)
>>
>> diff --git a/libavformat/asf.c b/libavformat/asf.c
>> index 204355abab..cef0f9f646 100644
>> --- a/libavformat/asf.c
>> +++ b/libavformat/asf.c
>> @@ -20,6 +20,7 @@
>> #include "asf.h"
>> #include "id3v2.h"
>> +#include "internal.h"
>> const ff_asf_guid ff_asf_header = {
>> 0x30, 0x26, 0xB2, 0x75, 0x8E, 0x66, 0xCF, 0x11, 0xA6, 0xD9,
>> 0x00, 0xAA, 0x00, 0x62, 0xCE, 0x6C
>> @@ -176,7 +177,6 @@ const AVMetadataConv ff_asf_metadata_conv[] = {
>> * but in reality this is only loosely similar */
>> static int asf_read_picture(AVFormatContext *s, int len)
>> {
>> - AVPacket pkt = { 0 };
>> const CodecMime *mime = ff_id3v2_mime_tags;
>> enum AVCodecID id = AV_CODEC_ID_NONE;
>> char mimetype[64];
>> @@ -230,22 +230,12 @@ static int asf_read_picture(AVFormatContext *s,
>> int len)
>> return AVERROR(ENOMEM);
>> len -= avio_get_str16le(s->pb, len - picsize, desc, desc_len);
>> - ret = av_get_packet(s->pb, &pkt, picsize);
>> + ret = ff_add_attached_pic(s, NULL, s->pb, NULL, picsize);
>> if (ret < 0)
>> goto fail;
>> + st = s->streams[s->nb_streams - 1];
>> - st = avformat_new_stream(s, NULL);
>> - if (!st) {
>> - ret = AVERROR(ENOMEM);
>> - goto fail;
>> - }
>> -
>> - st->disposition |= AV_DISPOSITION_ATTACHED_PIC;
>> - st->codecpar->codec_type = AVMEDIA_TYPE_VIDEO;
>> st->codecpar->codec_id = id;
>> - st->attached_pic = pkt;
>> - st->attached_pic.stream_index = st->index;
>> - st->attached_pic.flags |= AV_PKT_FLAG_KEY;
>> if (*desc) {
>> if (av_dict_set(&st->metadata, "title", desc,
>> AV_DICT_DONT_STRDUP_VAL) < 0)
>> @@ -260,7 +250,6 @@ static int asf_read_picture(AVFormatContext *s,
>> int len)
>> fail:
>> av_freep(&desc);
>> - av_packet_unref(&pkt);
>> return ret;
>> }
>
> This patch could be squashed into 1/4. Just apply 2/4 first.
>
> Should be ok either way.
The reason for the current ordering is the question about what happens
in case of errors: The asf code currently creates the stream only if
av_get_packet() succeeds; other code does not, which I don't like.
I could squash this into 1/4, but given that I wanted to make separate
patches for adding and using the new function and for changing the
behaviour on error, this would mean that the behaviour on error for asf
would change for one commit before being reverted to the old behaviour.
- Andreas
More information about the ffmpeg-devel
mailing list