On Fri, 15 Jun 2012 09:05:34 +0100, Mark Kenna <[email protected]> 
wrote:
> On 14/06/2012 19:25, Mark Kenna wrote:
> > On 14/06/2012 18:02, Mark Kenna wrote:
> >> Hi All
> >>
> >> I am trying to implement a buffered solution using AVIOContext and 
> >> AVFifoBuffer but I am getting an AccessViolationException on the call 
> >> to "avformat_open_input".
> >>
> >> Here is the read_packet method
> >>
> >>> static int read_packet(void *opaque, uint8_t *buf, int buf_size)
> >>> {
> >>>     AVFifoBuffer *circularBuf = (AVFifoBuffer*)opaque;
> >>>     int amountInBuffer = av_fifo_size(circularBuf);
> >>>
> >>>     if (amountInBuffer >= buf_size)
> >>>         av_fifo_generic_read(circularBuf, buf, buf_size, NULL);
> >>>
> >>>     amountInBuffer = av_fifo_size(circularBuf);
> >>>
> >>>     return buf_size;
> >>> }
> >>
> >> And here is the logic that's failing (last line throws the Exception)
> >>>     //load FFMPEG
> >>>     av_register_all();
> >>>     avdevice_register_all();
> >>>
> >>>     //allocate a FormatContext and a circular buffer for handling 
> >>> user data
> >>>     AVFormatContext *context = avformat_alloc_context();
> >>>     circularBuf = av_fifo_alloc(1024 * 1024 * 10);
> >>>
> >>>     //allocate FFMPEG's data buffer and create the IOContext for 
> >>> custom data I/O
> >>>     uint8_t *buffer = (uint8_t*)av_malloc(bufferSize);
> >>>     AVIOContext *ioContext = avio_alloc_context(buffer, bufferSize, 
> >>> 0, circularBuf, read_packet, NULL, NULL);
> >>>     ioContext->seekable = 0;
> >>>
> >>>     context->pb = ioContext;
> >>>     formatContext = context;
> >>>
> >>>     AddData(data, 0);
> >>>
> >>>     //FFMPEG will start reading from the buffer from here
> >>>     int err = avformat_open_input(&context, NULL, NULL, NULL);
> >>
> >> I have tried various data input (flv, mpeg4, image,...) but they all 
> >> fail with the same thing.
> >>
> >> Is there something else I should be doing?
> >>
> >> Thanks guys,
> >> Mark.
> >>
> >>
> >
> > I don't know if it helps but  I have found that if I make the 
> > AVIOContext writable by setting the write_flag to 1, I no longer get 
> > the AccessViolationException - instead I get a failure code of 
> > "-1094995529".
> >
> > Very strange - I think my next action will be to try a slightly older 
> > version of FFMpeg (automated builds) to see if it suffers the same issue.
> >
> > Mark.
> >
> 
> I found the issue after many hours of frustration. The solution is to 
> make sure that you specify an empty string for the filename rather than 
> NULL (it's *that* simple!).
> 

Should be fixed in latest git.

-- 
Anton Khirnov
_______________________________________________
libav-api mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-api

Reply via email to