[Libav-user] av_parser_parse2 crash
Brendan Jones
brendan55555 at hotmail.com
Fri Mar 27 04:26:58 CET 2015
Hi,
I am trying to decode my network dvr h264 socket stream directly using av_parser_parse2 but I get a crash when I try to parse the last portion of the buffer I'm passing to the parser.
For example, if I read 80000 bytes from socket I can parse and then decode most of the data but the last piece passed to av_parser_parse2 causes a crash.
I have tried different ways to make sure I not trying to pass more than there is in the buffer to the parser.
I'm not very knowledgeable regarding h264 but I suspect it might be because the parser can't parse the last portion of data due to it wanting more from the socket.
Is there something I can do to avoid this crash ?
Here is my loop just in case it is something I am doing wrong..
int retval;
uint8_t *inbuf = new uint8_t [20000000];
int inbuf_start = 0;
int inbuf_len = 0;
inbuf_start = 0;
inbuf_len = 0;
while (socket->waitForReadyRead())
{
if(socket->bytesAvailable() > BUFFER_SIZE*2 )
{
QByteArray ba = socket->readAll();
memcpy(inbuf + inbuf_len, ba.data(), ba.size() );
inbuf_len += ba.size();
qDebug() << "read bytes in buffer "<<ba.size();
if (ba.size() == 0)
{
cerr << "read 0 bytes data." << endl;
continue;
}
while (inbuf_len)
{
qDebug() << "before parse total to parse = "<<ba.size();
qDebug() << "parsed already "<< inbuf_start;
qDebug() << "left to parse "<<inbuf_len;
av_init_packet(&packet2);
packet2.data = 0;
packet2.size = 0;
uint8_t *pout;
int pout_len;
len = av_parser_parse2(parser, c, &pout, &pout_len,
inbuf + inbuf_start, inbuf_len,
AV_NOPTS_VALUE, AV_NOPTS_VALUE, 0);
inbuf_start += len;
inbuf_len -= len;
packet2.data = pout;
packet2.size = pout_len;
if (len)
{
retval = avcodec_decode_video2(c, picture, &got_picture, &packet2);
if (got_picture && retval > 0)
{
display_frame(c->pix_fmt, picture, screen_pixz, screen_contextz, wind, stride);
}
}
av_free_packet(&packet2);
}
}
}
Thank you.
Brendan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://ffmpeg.org/pipermail/libav-user/attachments/20150327/75c2220d/attachment.html>
More information about the Libav-user
mailing list