At 2018-09-05 19:52:23, "Mark Thompson" <s...@jkqxz.net> wrote:
>On 05/09/18 08:19, Huiwen Ren wrote:
>> At 2018-09-05 08:46:18, "Mark Thompson" <s...@jkqxz.net> wrote:
>>> On 03/09/18 03:42, hwren wrote:
>>>> Signed-off-by: hwren <hwr...@126.com>
>>>> ---
>> [...]
>>>> +
>>>> +    int i_lcurow_threads;
>>>> +    int i_initial_qp;
>>>> +    int preset_level;
>>>> +    int intra_period;
>>>
>>> There is a common option AVCodecContext.gop_size (-g) which should probably 
>>> be used rather than inventing a new private option with the same meaning.
>> 
>> intra_period in xavs2 seems not equals to gop_size in ffmpeg, intra period 
>> here is calculated by (actul_intra_period/gop_size).
>
>I'm not entirely sure what you mean here.  Let me try to explain what I think 
>this doing, please correct me if I'm getting anything wrong.
>
>The intra frames sent in a stream are arranged something like (xxx 
>representing any sequence of non-intra frames):
>
>IDR xxx  I  xxx  I  xxx  I  ...  I  xxx IDR
>
> | <-A-> | <-A-> | <-A-> |  ...  | <-A-> |
>     ^       ^ B instances of A ...  ^
> | <---------------- C ----------------> |
>
>Both I and IDR frames are recovery points.
>
>Then, with your naming:
>
>A = GOP size
>B = Intra period
>C = what you've called "actul intra period" above and in the docs
>
>and A * B = C
>
>Only being able to set B, though, seems insufficient to control this?  Any one 
>variable is determined by the other two, but you need at least two of them.
>

You are right. Sorry, I may mistakenly assume the meaning of  gop_size. It 
should be the "A" above and I've replaced intra_period with AVContext->gop_size.

>
>Aside: the libmfx code calls the B variable "IDR interval", which I think is 
>slightly clearer (see 
><http://git.videolan.org/?p=ffmpeg.git;a=blob;f=libavcodec/qsvenc_h264.c;h=06fa0ebf065b2426b9f77aeaef3a20f41466ee1c;hb=HEAD#l109>).
>
>>>> +    if (avctx->bit_rate > 0) {
>>>> +        cae->api->opt_set2(cae->param, "RateControl",  "1");
>>>> +        av_strlcatf(str_TBR, sizeof(str_TBR), "%d", avctx->bit_rate);
>>>> +        cae->api->opt_set2(cae->param, "TargetBitRate", str_TBR);
>>>> +    }
>>>
>>> What happens if there is no bitrate target?  Some sort of constant-quality 
>>> mode?  Are there any parameters for that?
>> 
>> Rate control in xavs2 will only work if given bit_rate and the speed(preset) 
>> level is used to control quality.
>
>Please do correct me if this is wrong, but I thought the speed/preset value 
>was the encoding-time against quality tradeoff?  When bitrate is not set I 
>would expect there to be a parameter for the size against quality tradeoff as 
>well (e.g. a fixed QP value that will be used for every frame - in 
>AVCodecContext this generally maps to global_quality, though not all encoders 
>use it).

Sorry again. It should be the i_initial_qp which could control the initial qp 
for first frame,  instead of speed_level.

Thanks for correction,
Huiwen Ren
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Reply via email to