[FFmpeg-devel] Possible incomplete commit "avcodec/nvenc: support RGB input"
Sven C. Dack
sven.c.dack at sky.com
Thu Sep 8 14:39:55 EEST 2016
Just a guess, but you are using nv_surface->height, which appears to have been
rounded up to 1088 while the actual size is 1080. The 1088 is then passed on to
av_image_copy() where it probably tries to read 1920x1088 pixels from the
source, but the source might not have that much memory and so it segfaults.
If you change it like this:
--- a/libavcodec/nvenc.c
+++ b/libavcodec/nvenc.c
@@ -1311,7 +1311,7 @@ static int nvenc_copy_frame(AVCodecContext *avctx,
NvencSurface *nv_surface,
av_image_copy(dst_data, dst_linesize,
(const uint8_t**)frame->data, frame->linesize, frame->format,
- nv_surface->width, nv_surface->height);
+ avctx->width, avctx->height);
return 0;
}
... then it's again working for me.
Sven
On 08/09/16 11:00, Sven C. Dack wrote:
> Hallo,
>
> ich schicke Dir noch einen weitere Backtrace mit etwas mehr Details:
>
> (gdb) bt
> #0 0x00007f19eb8e3a3e in ?? () from /lib/x86_64-linux-gnu/libc.so.6
> #1 0x0000000000fbc63e in av_image_copy_plane (height=8, bytewidth=7680,
> src_linesize=<optimized out>, src=0x7f19ea08f000 "", dst_linesize=<optimized
> out>, dst=<optimized out>) at src/libavutil/imgutils.c:296
> #2 av_image_copy (dst_data=dst_data at entry=0x7ffe7ef4c720,
> dst_linesizes=dst_linesizes at entry=0x7ffe7ef4c710,
> src_data=src_data at entry=0x402c340,
> src_linesizes=src_linesizes at entry=0x402c380, pix_fmt=AV_PIX_FMT_BGR0, width=1920,
> height=1088) at src/libavutil/imgutils.c:334
> #3 0x0000000000e37321 in nvenc_copy_frame (avctx=0x395af00,
> nv_surface=0x3dff560, nv_surface=0x3dff560, lock_buffer_params=0x7ffe7ef4c740,
> lock_buffer_params=0x7ffe7ef4c740, frame=0x402c340) at
> src/libavcodec/nvenc.c:1312
> #4 nvenc_upload_frame (nvenc_frame=0x3dff560, frame=0x402c340,
> avctx=0x395af00) at src/libavcodec/nvenc.c:1430
> #5 ff_nvenc_encode_frame (avctx=0x395af00, pkt=0x7ffe7ef4dc90,
> frame=0x402c340, got_packet=0x7ffe7ef4db4c) at src/libavcodec/nvenc.c:1660
> #6 0x0000000000a8c9c3 in avcodec_encode_video2 (avctx=avctx at entry=0x395af00,
> avpkt=avpkt at entry=0x7ffe7ef4dc90, frame=frame at entry=0x402c340,
> got_packet_ptr=got_packet_ptr at entry=0x7ffe7ef4db4c) at
> src/libavcodec/utils.c:1961
> #7 0x0000000000496448 in do_video_out (s=0x39592c0, ost=ost at entry=0x395ad00,
> next_picture=next_picture at entry=0x402c340, sync_ipts=<optimized out>,
> sync_ipts at entry=-7.62939453125e-06) at src/ffmpeg.c:1175
> #8 0x0000000000498d7f in reap_filters (flush=flush at entry=0) at src/ffmpeg.c:1366
> #9 0x000000000049a940 in transcode_step () at src/ffmpeg.c:4117
> #10 transcode () at src/ffmpeg.c:4161
> #11 0x000000000047d11c in main (argc=<optimized out>, argv=0x7ffe7ef4e5d8) at
> src/ffmpeg.c:4356
>
> ..
>
> #3 0x0000000000e37321 in nvenc_copy_frame (avctx=0x395af00,
> nv_surface=0x3dff560, nv_surface=0x3dff560, lock_buffer_params=0x7ffe7ef4c740,
> lock_buffer_params=0x7ffe7ef4c740, frame=0x402c340) at
> src/libavcodec/nvenc.c:1312
> 1312 av_image_copy(dst_data, dst_linesize,
> (gdb) list
> 1307 return ret;
> 1308
> 1309 if (frame->format == AV_PIX_FMT_YUV420P)
> 1310 FFSWAP(uint8_t*, dst_data[1], dst_data[2]);
> 1311
> 1312 av_image_copy(dst_data, dst_linesize,
> 1313 (const uint8_t**)frame->data, frame->linesize,
> frame->format,
> 1314 nv_surface->width, nv_surface->height);
> 1315
> 1316 return 0;
> (gdb) ins dst_data
> $10 = {0x2049e0000 "\352", <incomplete sequence \352\352>, 0x0, 0x0, 0x0}
> (gdb) ins dst_linesize
> $11 = {7680, 7680, 7680, 7680}
> (gdb) ins frame
> $12 = (const AVFrame *) 0x402c340
> (gdb) ins *frame
> $13 = {data = {0x7f19e98a6000 "\352", <incomplete sequence \352\352>, 0x0,
> 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, linesize = {7680, 0, 0, 0, 0, 0, 0, 0},
> extended_data = 0x402c340, width = 1920, height = 1080, nb_samples = 0, format
> = 298,
> key_frame = 1, pict_type = AV_PICTURE_TYPE_NONE, sample_aspect_ratio = {num
> = 0, den = 1}, pts = 0, pkt_pts = 0, pkt_dts = 0, coded_picture_number = 0,
> display_picture_number = 0, quality = 0, opaque = 0x0, error = {0, 0, 0, 0, 0, 0,
> 0, 0}, repeat_pict = 0, interlaced_frame = 0, top_field_first = 0,
> palette_has_changed = 0, reordered_opaque = -9223372036854775808, sample_rate
> = 0, channel_layout = 0, buf = {0x402b9c0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
> extended_buf = 0x0, nb_extended_buf = 0, side_data = 0x0, nb_side_data = 0,
> flags = 0, color_range = AVCOL_RANGE_UNSPECIFIED, color_primaries =
> AVCOL_PRI_UNSPECIFIED, color_trc = AVCOL_TRC_UNSPECIFIED,
> colorspace = AVCOL_SPC_UNSPECIFIED, chroma_location =
> AVCHROMA_LOC_UNSPECIFIED, best_effort_timestamp = 0, pkt_pos = -1,
> pkt_duration = 0, metadata = 0x0, decode_error_flags = 0, channels = 0,
> pkt_size = 8294400, qscale_table = 0x0,
> qstride = 0, qscale_type = 0, qp_table_buf = 0x0, hw_frames_ctx = 0x0}
> (gdb) ins nv_surface
> $14 = (NvencSurface *) 0x3dff560
> (gdb) ins *nv_surface
> $15 = {input_surface = 0x3e0c090, in_ref = 0x0, in_map = {version = 0,
> subResourceIndex = 0, inputResource = 0x0, registeredResource = 0x0,
> mappedResource = 0x0, mappedBufferFmt = NV_ENC_BUFFER_FORMAT_UNDEFINED,
> reserved1 = {
> 0 <repeats 251 times>}, reserved2 = {0x0 <repeats 63 times>}}, reg_idx =
> 0, width = 1920, height = 1088, pitch = 7680, output_surface = 0x3d97f20,
> format = NV_ENC_BUFFER_FORMAT_ARGB, size = 1048576, lockCount = 1}
>
>
>
> On 08/09/16 10:30, Timo Rothenpieler wrote:
>>>> for fmt in yuv420p nv12 bgr0 rgb0; do
>>>> ./ffmpeg -f lavfi -i "testsrc=size=1920x1080:duration=10:rate=30"
>>>> -c:v h264_nvenc -global_quality 20 -pix_fmt "$fmt" -y out_"${fmt}".mkv
>>>> done
>>> You feed to nvenc only rgb? what testsrc only supports. Use testsrc2.
>> pix_fmt should make sure it's properly converted, and according to the
>> output, it does:
>>
>>
>> Stream #0:0: Video: h264 (h264_nvenc) (Main) (H264 / 0x34363248),
>> yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], q=-1--1, 2000 kb/s, 30 fps, 1k
>> tbn, 30 tbc
>>
>> Stream #0:0: Video: h264 (h264_nvenc) (Main) (H264 / 0x34363248), nv12,
>> 1920x1080 [SAR 1:1 DAR 16:9], q=-1--1, 2000 kb/s, 30 fps, 1k tbn, 30 tbc
>>
>> Stream #0:0: Video: h264 (h264_nvenc) (Main) (H264 / 0x34363248), bgr0,
>> 1920x1080 [SAR 1:1 DAR 16:9], q=-1--1, 2000 kb/s, 30 fps, 1k tbn, 30 tbc
>>
>> Stream #0:0: Video: h264 (h264_nvenc) (Main) (H264 / 0x34363248), rgb0,
>> 1920x1080 [SAR 1:1 DAR 16:9], q=-1--1, 2000 kb/s, 30 fps, 1k tbn, 30 tbc
>>
>> _______________________________________________
>> ffmpeg-devel mailing list
>> ffmpeg-devel at ffmpeg.org
>> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
More information about the ffmpeg-devel
mailing list