-----Original Message-----
From: ffmpeg-devel [mailto:ffmpeg-devel-boun...@ffmpeg.org] On Behalf Of James 
Almer
Sent: Thursday, May 30, 2019 11:35 PM
To: ffmpeg-devel@ffmpeg.org
Subject: Re: [FFmpeg-devel] [PATCH v13 1/2] lavc/svt_hevc: add libsvt hevc 
encoder wrapper

>Why the switch to encode2? All previous versions were using the send/receive 
>API, and seeing SVT also uses a decoupled input/output API, it was certainly 
>the most adequate option.
>Were you running into some issue? A quick look at v12 shows you were using 
>ff_alloc_packet2(), which afaik you shouldn't have. It's meant for the 
>encode2() API only, where user provided buffers are allowed, and it alone does 
>not ensure the packet will be reference counted, which is required for the 
>send/receive API.

Hi James,

Yes I indeed was running into an issue. Although SVT uses a decoupled 
input/output API, it calls the two by the below method:
    while(not stopped) {
    send_frame(one frame);
    if (receive_packet(one frame’s pkt) != empty)
        save_bitstream;
    }
In one round, none or only one packet is receive.

However, if using v12's send_frame/receive_packet implementation, it is 
possible that multiple of receive_packet are executed in one round.
    while(not stopped) {
        send_frame(one frame);
        while(1) {
            if (receive_packet(one frame’s pkt) == empty)
                break;
            else
                save_bitstream;
        }
    }

The first calling method's sequence is like:
    Send 579
    Receive 487
    Send 580
    Receive 496
    Send 581
    Receive 492
    Send 582
    Receive 490
    Send 583
    Receive 489
    Send 584
    Receive 491
    Send 585
    Receive 494
    Send 586
    Receive 493
    Send 587
    Receive 495
And the second one's is:
    Send 579
    Receive empty
    Send 580
    Receive 489
    Receive 491
    Receive 494
    Receive 493
    Receive 495
    Receive empty
    Send 581
    Receive 504
    Receive empty
    Send 582
    Receive empty
    Send 583
    Receive empty
    Send 584
    Receive 500
    Receive empty
    Send 585
    Receive empty
    Send 586
    Receive empty
    Send 587

When we input the source frame at the constant frequency 60, the first one's 
each second's output frames are ~60, [59, 61], while the second one's tends to 
be like 64(63) ->57(58) ->64(63) ->57(58)… 
Besides the average FPS, the stableness of each second's FPS is also important 
to us. So I changed the API to encode2, because in encode2, I can control the 
SVT's send_frame/receive_packet calling sequence, and let it not do 
receive_packet more than once in one round.

And thanks for the information on ff_alloc_packet2. I changed to use 
av_new_packet in v13 and hope it's OK.

Regards,
Sun, Jing

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to