[FFmpeg-devel] [PATCH] avcodec: Add librav1e encoder

Derek Buitenhuis derek.buitenhuis at gmail.com
Tue May 28 22:49:23 EEST 2019


On 28/05/2019 20:32, James Almer wrote:
>> +    default:
>> +        // This should be impossible
>> +        return (RaChromaSampling) -1;
> 
> If it's not meant to happen, then it should probably be an av_assert0.

Yeah, that makes more sense. Will change.

>> +    int rret;
>> +    int ret = 0;
> 
> Why two ret variables?

Will fix.

>> +    if (avctx->flags & AV_CODEC_FLAG_GLOBAL_HEADER) {
>> +         const AVBitStreamFilter *filter = av_bsf_get_by_name("extract_extradata");
> 
> See
> https://github.com/dwbuiten/FFmpeg/commit/e146749232928a1cebe637338189938644237894#r33622810
> 
> You don't need to extract the Sequence Header from encoded frames since
> rav1e provides a function for this purpose.
> So does libaom, for that matter, but it's buggy and that's why it's not
> being used.

As discussed on IRC, that function does not return the config OBUs at the end of
the ISOBMFF-style data, so this way is still preferred until it does.

I'll switch over if/once rav1e's API does return that.


>> +    memcpy(pkt->data, rpkt->data, rpkt->len);
>> +
>> +    if (rpkt->frame_type == RA_FRAME_TYPE_KEY)
>> +        pkt->flags |= AV_PKT_FLAG_KEY;
>> +
>> +    pkt->pts = pkt->dts = rpkt->number * avctx->ticks_per_frame;
>> +
>> +    rav1e_packet_unref(rpkt);
> 
> You can avoid the data copy if you wrap the RaPacket into the
> AVBufferRef used in the AVPacket, but for this you need to use the
> send/receive API, given the encode2 one allows the caller to use their
> own allocated packet.

As discussed on IRC / noted in the top of this email, I'll see how
you fare switching to send/recieve. :)

>> +static const AVOption options[] = {
>> +    { "quantizer", "use constant quantizer mode", OFFSET(quantizer), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 255, VE },
>> +    { "max-quantizer", "max quantizer when using bitrate mode", OFFSET(max_quantizer), AV_OPT_TYPE_INT, { .i64 = 255 }, 1, 255, VE },
> 
> This should be mapped to qmax lavc option instead.

OK. Is there a matching option for plain old quantizer?
I couldn't find an obvious one.

- Derk


More information about the ffmpeg-devel mailing list