On 02/05/2012 11:20 AM, Aneesh Dogra wrote:
>
> Signed-off-by: Aneesh Dogra <[email protected]>
> ---
> libavcodec/bytestream.h | 89
> +++++++++++++++++++++++++++++++++++++++++++++++
> 1 files changed, 89 insertions(+), 0 deletions(-)
> @@ -158,6 +200,36 @@ static av_always_inline int
> bytestream2_seek(GetByteContext *g, int offset,
> return bytestream2_tell(g);
> }
>
> +static av_always_inline int bytestream2_seek_p(PutByteContext *p, int offset,
> + int whence)
> +{
> + p->eof = 0;
> + switch (whence) {
> + case SEEK_CUR:
> + if (p->buffer_end - p->buffer < offset)
> + p->eof = 1;
> + offset = av_clip(offset, -(p->buffer - p->buffer_start),
> + p->buffer_end - p->buffer);
> + p->buffer += offset;
> + break;
> + case SEEK_END:
> + if (p->buffer_end - p->buffer_start < -offset)
> + p->eof = 1;
We don't need to set the eof flag if the seek is before the beginning,
only if it's after the end. So just check if offset > 0.
> @@ -168,6 +240,23 @@ static av_always_inline unsigned int
> bytestream2_get_buffer(GetByteContext *g,
> return size2;
> }
>
> +static av_always_inline void bytestream2_put_buffer(PutByteContext *p, const
> uint8_t *src, unsigned int size)
> +{
> + int size2;
> + if (p->eof)
> + return;
> + size2 = FFMIN(p->buffer_end - p->buffer, size);
> + if (size2 != size)
> + p->eof = 1;
> + memcpy(p->buffer, src, size2);
> + p->buffer += size2;
> +}
It might be useful for this to return the actual number of bytes written.
-Justin
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel