2017-07-07 7:37 GMT+08:00 Mark Thompson <s...@jkqxz.net>: > > > On 07/07/17 00:20, Steven Liu wrote: >> 2017-07-07 7:12 GMT+08:00 Mark Thompson <s...@jkqxz.net>: >>> On 06/07/17 23:32, Steven Liu wrote: >>>> 2017-07-06 19:51 GMT+08:00 Mark Thompson <s...@jkqxz.net>: >>>>> On 06/07/17 11:48, Steven Liu wrote: >>>>>> From: Steven Liu <lingjiujia...@gmail.com> >>>>>> >>>>>> user need to control the idr_interval for qsv hevc >>>>>> >>>>>> Signed-off-by: Steven Liu <l...@onvideo.cn> >>>>>> --- >>>>>> libavcodec/qsvenc_hevc.c | 1 + >>>>>> 1 file changed, 1 insertion(+) >>>>>> >>>>>> diff --git a/libavcodec/qsvenc_hevc.c b/libavcodec/qsvenc_hevc.c >>>>>> index 7d4d55bb61..c063e27eea 100644 >>>>>> --- a/libavcodec/qsvenc_hevc.c >>>>>> +++ b/libavcodec/qsvenc_hevc.c >>>>>> @@ -214,6 +214,7 @@ static av_cold int qsv_enc_close(AVCodecContext >>>>>> *avctx) >>>>>> static const AVOption options[] = { >>>>>> QSV_COMMON_OPTS >>>>>> >>>>>> + { "idr_interval", "Distance (in I-frames) between IDR frames", >>>>>> OFFSET(qsv.idr_interval), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, VE >>>>>> }, >>>>>> { "load_plugin", "A user plugin to load in an internal session", >>>>>> OFFSET(load_plugin), AV_OPT_TYPE_INT, { .i64 = LOAD_PLUGIN_HEVC_SW }, >>>>>> LOAD_PLUGIN_NONE, LOAD_PLUGIN_HEVC_HW, VE, "load_plugin" }, >>>>>> { "none", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = LOAD_PLUGIN_NONE >>>>>> }, 0, 0, VE, "load_plugin" }, >>>>>> { "hevc_sw", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = >>>>>> LOAD_PLUGIN_HEVC_SW }, 0, 0, VE, "load_plugin" }, >>>>>> >>>>> >>>>> Sure, I guess? >>>>> >>>>> Though, what use-case do you intend this option for in H.265? It already >>>>> generates IRAP frames at the GOP interval, and unlike H.264 there isn't >>>>> any confusion about whether they are usable as seek points. >>>> hmm, some user report to me they can not split mpegts segment by >>>> keyframe when they use qsv h.265, i sent this patch to them, it can be >>>> split. >>> >>> Then adding this option to set sounds like an appalling hack. What are the >>> actual symptoms of this problem? Can you provide an example? >> Just use command line to split hls format. after the patch sent to >> the user, they just response an that's ok and no more response :(> >>>>> >>>>> (I can't actually remember exactly what types of NAL units it generates >>>>> with and without this option; I'll have a look later.) >>>>> >>> >>> Using the hardware encoder on Linux for Skylake, the very first frame is >>> IDR_W_RADL, then subsequent frames are all TRAIL_N/TRAIL_R, or CRA to start >>> a new GOP. (It need not be the same on all versions of the encoder, >>> though.) >> Yes, maybe the problem is different versions' result. > > > Hmm. The frame type information from libmfx is really oriented towards > H.264, so the H.265 types don't obviously map for key frames. > > Does this fix it? (Also an appalling hack (will fail if libmfx generates an > intra frame inline), but detecting the IRAP cases properly shouldn't be too > bad if this is the problem.) > > > diff --git a/libavcodec/qsvenc.c b/libavcodec/qsvenc.c > index 5eb506f..ea5f32f 100644 > --- a/libavcodec/qsvenc.c > +++ b/libavcodec/qsvenc.c > @@ -1088,8 +1088,8 @@ int ff_qsv_encode(AVCodecContext *avctx, QSVEncContext > *q, > new_pkt.pts = av_rescale_q(bs->TimeStamp, (AVRational){1, > 90000}, avctx->time_base); > new_pkt.size = bs->DataLength; > > - if (bs->FrameType & MFX_FRAMETYPE_IDR || > - bs->FrameType & MFX_FRAMETYPE_xIDR) > + if (bs->FrameType & MFX_FRAMETYPE_I || > + bs->FrameType & MFX_FRAMETYPE_xI) > new_pkt.flags |= AV_PKT_FLAG_KEY; > > #if FF_API_CODED_FRAME > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
should be ok. _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel