[FFmpeg-devel] [PATCH] Proper Interplay Video 16-bit support
Diego Biurrun
diego
Wed Dec 23 11:40:26 CET 2009
On Fri, Dec 18, 2009 at 10:56:48PM +0200, Kostya wrote:
> Here's proper Interplay Video 16-bit support with separate decoder made
> by svn cp from existing one. Demuxer now distinguishes them without any
> problems too.
>
> P.S. I'm pretty sure Diego will love this codec ID.
I still wonder why...
> P.D.F. I know it can be merged into single decoder but if you want that,
> make it small or GSoC qualification task.
Oh, that will likely never happen, but you could accomplish it
in hours. Get that motivation up :)
> --- libavcodec/ipvideo16.c (revision 20496)
> +++ libavcodec/ipvideo16.c (working copy)
> @@ -69,13 +69,22 @@
>
> +#define CHECK_MV_PTR(n) \
> + if (s->mv_end - s->mv_ptr < n) { \
> + av_log(s->avctx, AV_LOG_ERROR, "Interplay video warning: mv_ptr out of bounds (%p >= %p)\n", \
> + s->mv_ptr + n, s->mv_end); \
> + return -1; \
> + }
Indentation is partly off and only two sapces.
> @@ -95,7 +104,7 @@
> }
> - s->dsp.put_pixels_tab[1][0](s->pixel_ptr, src->data[0] + motion_offset, s->stride, 8);
> + s->dsp.put_pixels_tab[0][0](s->pixel_ptr, src->data[0] + motion_offset, src->linesize[0], 8);
You could break that long line while you're at it.
> @@ -575,29 +571,28 @@
>
> - s->stride = s->current_frame.linesize[0];
> - s->stream_ptr = s->buf + 14; /* data starts 14 bytes in */
> - s->stream_end = s->buf + s->size;
> + s->stride = s->current_frame.linesize[0] >> 1;
> + s->stream_ptr = s->buf + 16; /* data starts 16 bytes in */
> + s->stream_end =
> + s->mv_ptr = s->buf + 14 + AV_RL16(s->buf+14);
> + s->mv_end = s->buf + s->size;
> s->line_inc = s->stride - 8;
> - s->upper_motion_limit_offset = (s->avctx->height - 8) * s->stride
> - + s->avctx->width - 8;
> + s->upper_motion_limit_offset = (s->avctx->height - 8) * s->current_frame.linesize[0]
> + + (s->avctx->width - 8) * 2;
Indentation is off.
> debug_interplay(" block @ (%3d, %3d): encoding 0x%X, data ptr @ %p\n",
> - x - y, y / s->stride, opcode, s->stream_ptr);
> + x, y, opcode, s->stream_ptr);
ditto
> - s->pixel_ptr = s->current_frame.data[0] + x;
> + s->pixel_ptr = s->current_frame.data[0] + x * 2 + y * s->current_frame.linesize[0];
another long line
> ret = ipvideo_decode_block[opcode](s);
> if (ret != 0) {
> av_log(s->avctx, AV_LOG_ERROR, " Interplay video: decode problem on frame %d, @ block (%d, %d)\n",
> - frame, x - y, y / s->stride);
> + frame, x, y);
ditto
Diego
More information about the ffmpeg-devel
mailing list