On 06/02/2011 04:42 PM, Ronald S. Bultje wrote:
Hi John,

On Thu, Jun 2, 2011 at 4:39 PM, John Stebbins<[email protected]>  wrote:
On 06/02/2011 03:31 PM, Ronald S. Bultje wrote:
On Thu, Jun 2, 2011 at 3:29 PM, John Stebbins<[email protected]>
  wrote:
Fair enough.  There appear to be some cases remaining where av_malloc is
called with a size of 0.  I'll set a break point and find out where the
request is coming from.
Thanks, if you can just show me a backtrace (I just run commands and
set a if (size == 0) abort() in av_malloc), I'll gladly accept the
fix.


The first occurrence of the problem that I find is in vc1_decode_init.
  avctx->mb_stride gets set (from avctx->width) when ff_msmpeg4_decode_init
is called.  But at the point ff_msmpeg4_decode_init is called avctx->width
hasn't been set yet (i.e. it is 0).  width gets set in
vc1_decode_sequence_header which is called after ff_msmpeg4_decode_init.
  Since width is 0, mb_stride is 0 and av_malloc gets called with 0.

I don't know exactly how to untangle this because I don't know the
dependencies between these initialization functions.  Can anyone make any
suggestions?
Feel free to send me a file that triggers the problem and I'll happily
fix it for you.


I think this would take more than just a sample file to reproduce. I am reproducing this with HandBrake which has it's own TS demux. So we are not using libavformat in this case and are allocating and initializing AVCodecContext, initializing extradata, and calling avcodec_open ourselves.

We've always noticed a little weirdness with vc1 in this bit of code. We have to call avcodec_open twice to get it to initialize properly due to this order of operations problem in vc1_decode_init.

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

Reply via email to