On Jun 27, 2013 10:51 PM, "Paul B Mahol" <[email protected]> wrote: > > On 6/27/13, Arvind Raman <[email protected]> wrote: > > I am developing an application using the FFmpeg libraries and am facing a > > crash issue that I am finding extremely hard to debug. My printf logs > > suggest that crash happens within the avcodec_encode_video2() function but I > > am not sure what is causing the crash. > > > > Just for debugging purpose, I created the following infinite loop on the > > "encode" thread. The loop iterates several times and crashes somewhere in > > between the 350th and the 400th iteration. The crash is not deterministic. > > Please note there are video decode (libavcodec) and demux (libavformat) > > threads running in parallel that are interrupting the > > avcodec_encode_video2() function. Could this be a problem. > > > > Do you spot anything that might be causing the crash? I am using the x.264 > > encoder. The only error log that I get on the terminal is "Segmentation > > fault (core dumped)" so I am finding it hard to proceed. Is there anyway to > > get x.264 to print where the crash might be happening. > > > > Its quite likely that this might be a silly coding mistake from my end, but > > just wanted to get a quick check done from you all and receive your > > suggestions. > > > > while(1) > > { > > av_init_packet(&encode_packet); > > frame->pts += 3750; > > > > frame->data[0] = frame_buf; > > frame->data[1] = frame->data[0] + (frame->linesize[0] * > > encoder_ctx->height); > > frame->data[2] = frame->data[1] + (frame->linesize[1] * > > (encoder_ctx->height / 2)); > > This looks wrong, use memcpy instead. > > > encode_status = avcodec_encode_video2(encoder_ctx, &encode_packet, > > frame, &got_packet); > > > > av_free_packet(&encode_packet); > > } > > > > I tried running valgrind as well but that didn't throw any illegal memory > > access and it throws the following error. Could this be causing the crash? > > What is this error about? I saw similar error messages elsewhere as well, > > but don't think I found any solution there. > > > > > > vex amd64->IR: unhandled instruction bytes: 0x66 0xF 0x38 0x41 0xC0 0x66 0xF > > 0x7E > > ==10933== valgrind: Unrecognised instruction at address 0x51393bc. > > ==10933== at 0x51393BC: ??? (in /usr/local/lib/libx264.so.133) > > ==10933== by 0x2000200020001F: ??? > > ==10933== Your program just tried to execute an instruction that Valgrind > > ==10933== did not recognise. There are two possible reasons for this. > > ==10933== 1. Your program has a bug and erroneously jumped to a non-code > > ==10933== location. If you are running Memcheck and you just saw a > > ==10933== warning about a bad jump, it's probably your program's fault. > > ==10933== 2. The instruction is legitimate but Valgrind doesn't handle it, > > ==10933== i.e. it's Valgrind's fault. If you think this is the case or > > ==10933== you are not sure, please let us know and we'll try to fix it. > > ==10933== Either way, Valgrind will now raise a SIGILL signal which will > > ==10933== probably kill your program. > > ==10933== > > ==10933== Process terminating with default action of signal 4 (SIGILL) > > ==10933== Illegal opcode at address 0x51393BC > > ==10933== at 0x51393BC: ??? (in /usr/local/lib/libx264.so.133) > > ==10933== by 0x2000200020001F: ??? > > > > Any help would be greatly appreciated!!! > > > > Best regards > > Arvind
Or even easier, there exists avpicture_fill((AVPicture *) frame, frame_buf, encoder_ctx->pix_fmt, frame->width, frame->height); BR, Alex Cohn
_______________________________________________ Libav-user mailing list [email protected] http://ffmpeg.org/mailman/listinfo/libav-user
