[FFmpeg-devel] [PATCH] avformat/flacenc: support writing attached pictures

James Almer jamrial at gmail.com
Wed Apr 4 08:30:34 EEST 2018


On 4/4/2018 2:11 AM, Timo Teras wrote:
> On Wed,  4 Apr 2018 01:30:54 -0300
> James Almer <jamrial at gmail.com> wrote:
> 
>> From: Rodger Combs <rodger.combs at gmail.com>
>>
>> Signed-off-by: James Almer <jamrial at gmail.com>
>> ---
>> Now using the packet list API instead of duplicating the code locally.
>>
>>  libavformat/flacenc.c | 274
>> +++++++++++++++++++++++++++++++++++++++++++------- 1 file changed,
>> 238 insertions(+), 36 deletions(-)
>>
>> diff --git a/libavformat/flacenc.c b/libavformat/flacenc.c
>> index b894f9ef61..99f4ce7bad 100644
>> [snip]
>> -        c->streaminfo = av_malloc(FLAC_STREAMINFO_SIZE);
>> -        if (!c->streaminfo)
>> -            return AVERROR(ENOMEM);
>> -        memcpy(c->streaminfo, streaminfo, FLAC_STREAMINFO_SIZE);
>> +        /* warn only once for each stream */
>> +        if (s->streams[pkt->stream_index]->nb_frames == 1) {
>> +            av_log(s, AV_LOG_WARNING, "Got more than one picture in
>> stream %d,"
>> +                   " ignoring.\n", pkt->stream_index);
>> +        }
>> +        if (!c->waiting_pics ||
>> s->streams[pkt->stream_index]->nb_frames >= 1)
>> +            return 0;
>> +
>> +        if (index > c->audio_stream_idx)
>> +            index--;
>> +
>> +        if ((ret = av_packet_ref(&c->pics[index], pkt)) < 0)
>> +            return ret;
>> +        c->waiting_pics--;
>> +
>> +        /* flush the buffered audio packets */
>> +        if (!c->waiting_pics &&
>> +            (ret = flac_queue_flush(s)) < 0)
>> +            return ret;
>>      }
>>  
>> -    if (pkt->size)
>> -        avio_write(s->pb, pkt->data, pkt->size);
>>      return 0;
>>  }
>>  
> 
> I've submitted attached picture support to movenc just now. Instead of
> defining separate pictures queue, I'm reusing the AVStream.attached_pic
> to hold it. Would it make sense to share this small piece of code in
> some utility function (and use also AVStream.attached_pic here)?
> 
> See: https://ffmpeg.org/pipermail/ffmpeg-devel/2018-April/227708.html

What's being done in this patch is not a picture queue, but an audio
packet queue until the first video frame (the picture to be attached)
shows up, and then all the audio is flushed to the output.

(Re-sending to the mailing list now, since my email client is kinda
stupid with its reply button in some situations)


More information about the ffmpeg-devel mailing list