summaryrefslogtreecommitdiff
path: root/libavcodec/nvenc.c
diff options
context:
space:
mode:
authoragathah <ahu@nvidia.com>2015-01-07 17:19:32 +0800
committerMichael Niedermayer <michaelni@gmx.at>2015-01-15 16:29:25 +0100
commit72c61c272c527ff4744d2b69253bf3f70d6a20f2 (patch)
treea82eade5e509fd068b2666ca73ebfa879bfeaab6 /libavcodec/nvenc.c
parent6e69bf4a7eb5e9c74f0049cdaf8ab787faa1a3a6 (diff)
avcodec/nvenc: fix b frame settings
Reviewed-by: Timo Rothenpieler <timo@rothenpieler.org> Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/nvenc.c')
-rw-r--r--libavcodec/nvenc.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/libavcodec/nvenc.c b/libavcodec/nvenc.c
index 345fb78087..5cd7727d10 100644
--- a/libavcodec/nvenc.c
+++ b/libavcodec/nvenc.c
@@ -657,7 +657,12 @@ static av_cold int nvenc_encode_init(AVCodecContext *avctx)
}
if (ctx->gobpattern >= 0) {
- ctx->encode_config.frameIntervalP = 1;
+ ctx->encode_config.frameIntervalP = ctx->gobpattern;
+ }
+
+ // when there're b frames, set dts offset
+ if (ctx->encode_config.frameIntervalP >= 2) {
+ ctx->last_dts = -2;
}
ctx->encode_config.encodeCodecConfig.h264Config.h264VUIParameters.colourDescriptionPresentFlag = 1;
@@ -905,6 +910,10 @@ static int process_output_surface(AVCodecContext *avctx, AVPacket *pkt, AVFrame
pkt->pts = lock_params.outputTimeStamp;
pkt->dts = timestamp_queue_dequeue(&ctx->timestamp_list);
+ // when there're b frame(s), set dts offset
+ if (ctx->encode_config.frameIntervalP >= 2)
+ pkt->dts -= 1;
+
if (pkt->dts > pkt->pts)
pkt->dts = pkt->pts;