[FFmpeg-devel] [RFC] WC3 decoder without AVPaletteControl
Michael Niedermayer
michaelni
Wed Apr 15 16:17:24 CEST 2009
On Sun, Apr 12, 2009 at 01:26:33PM +0200, Reimar D?ffinger wrote:
> On Sun, Apr 12, 2009 at 12:19:07AM +0200, Reimar D?ffinger wrote:
> > attached patch implements this.
> > It is a bit ugly because it adds a lot of seeking to the demuxer, but I
> > think for such a fringe format there is no point in extra work for avoiding it.
> > The patch also adds two helper functions, one to increase the size of a
> > packet and one that appends data read from a file to a possibly already
> > filled packet.
> > I expect that there will be more that a few bugs still, e.g. while the
> > video looks visually ok in ffplay the FATE regressions do not match at
> > all.
>
> A minor update. It only fixes the gamma correction and provides a
> fixed point integer-implementation, which might help explain some of
> its weirdness like clipping to 253.
[...]
> Index: libavcodec/avcodec.h
> ===================================================================
> --- libavcodec/avcodec.h (revision 18467)
> +++ libavcodec/avcodec.h (working copy)
> @@ -2666,6 +2666,14 @@
> void av_shrink_packet(AVPacket *pkt, int size);
>
> /**
> + * Increase packet size, correctly zeroing padding
> + *
> + * @param pkt packet
> + * @param grow_by number of bytes by which to increase the size of the packet
> + */
> +int av_grow_packet(AVPacket *pkt, int grow_by);
> +
> +/**
> * @warning This is a hack - the packet memory allocation stuff is broken. The
> * packet is allocated if it was not really allocated.
> */
> Index: libavcodec/avpacket.c
> ===================================================================
> --- libavcodec/avpacket.c (revision 18467)
> +++ libavcodec/avpacket.c (working copy)
> @@ -69,6 +69,24 @@
> memset(pkt->data + size, 0, FF_INPUT_BUFFER_PADDING_SIZE);
> }
>
> +int av_grow_packet(AVPacket *pkt, int grow_by)
> +{
> + void *new_ptr;
> + if (!grow_by)
> + return 0;
for what is that good for?
> + if (!pkt->size)
> + return av_new_packet(pkt, grow_by);
> + if (pkt->size + FF_INPUT_BUFFER_PADDING_SIZE > INT_MAX - grow_by)
> + return -1;
could you write this in a way that is free of overflows please ;)
[...]
> Index: libavformat/utils.c
> ===================================================================
> --- libavformat/utils.c (revision 18467)
> +++ libavformat/utils.c (working copy)
> @@ -277,6 +277,20 @@
> return ret;
> }
>
> +int av_append_packet(ByteIOContext *s, AVPacket *pkt, int size)
> +{
> + int ret;
> + int old_size;
> + if (!pkt->size)
> + return av_get_packet(s, pkt, size);
> + old_size = pkt->size;
> + ret = av_grow_packet(pkt, size);
isnt av_grow_packet already checking for pkt->size==0 ?
[...]
--
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
I do not agree with what you have to say, but I'll defend to the death your
right to say it. -- Voltaire
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20090415/7b411829/attachment.pgp>
More information about the ffmpeg-devel
mailing list