Message ID | HE1PR0301MB2154B436631B6D18CD575B438F7E9@HE1PR0301MB2154.eurprd03.prod.outlook.com |
---|---|
State | Accepted |
Commit | ec4c04aa7b5a0c7a91e4a65775826283d23e08ac |
Headers | show |
Series | [FFmpeg-devel,1/4] avformat: Add and use helper function to add attachment streams | expand |
Context | Check | Description |
---|---|---|
andriy/x86_make | success | Make finished |
andriy/x86_make_fate | success | Make fate finished |
andriy/PPC64_make | success | Make finished |
andriy/PPC64_make_fate | success | Make fate finished |
On 3/29/2021 5:45 AM, Andreas Rheinhardt wrote: > Also removes a stack packet. > > Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@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.
James Almer: > On 3/29/2021 5:45 AM, Andreas Rheinhardt wrote: >> Also removes a stack packet. >> >> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@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
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; }
Also removes a stack packet. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com> --- libavformat/asf.c | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-)