diff options
author | Ivan Kalvachev <ikalvachev@gmail.com> | 2003-07-29 14:15:28 +0000 |
---|---|---|
committer | Ivan Kalvachev <ikalvachev@gmail.com> | 2003-07-29 14:15:28 +0000 |
commit | 302898fcbe604a088f9a3db4c4747b0d735b611a (patch) | |
tree | 4a3ad298dbdc802eff64a60aa1dd31ecc67dcffd | |
parent | 782b80d9dd6d59317d4be8f748e79ea69eb83445 (diff) | |
download | ffmpeg-302898fcbe604a088f9a3db4c4747b0d735b611a.tar.gz |
Add GNU header, remove X includes, add more check for xvmc render packet
Originally committed as revision 2097 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r-- | libavcodec/xvmcvideo.c | 43 |
1 files changed, 33 insertions, 10 deletions
diff --git a/libavcodec/xvmcvideo.c b/libavcodec/xvmcvideo.c index d6aaee4541..6346b50d46 100644 --- a/libavcodec/xvmcvideo.c +++ b/libavcodec/xvmcvideo.c @@ -1,18 +1,27 @@ +/* + * XVideo Motion Compensation + * Copyright (c) 2003 Ivan Kalvachev + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + #include <stdlib.h> #include <stdio.h> #include <ctype.h> #include <limits.h> -//X11 include -#include <X11/Xlib.h> -#include <X11/Xutil.h> -#include <X11/Xatom.h> -#include <X11/extensions/Xv.h> -#include <X11/extensions/Xvlib.h> -#include <X11/extensions/XvMClib.h> - -#include "xvmc_render.h" - //avcodec include #include "avcodec.h" #include "dsputil.h" @@ -26,6 +35,13 @@ #endif #ifdef HAVE_XVMC + +//X11 includes are in the xvmc_render.h +//by replacing it with none-X one +//XvMC emulation could be performed + +#include "xvmc_render.h" + //#include "xvmc_debug.h" static int calc_cbp(MpegEncContext *s, int blocknum){ @@ -47,8 +63,11 @@ int XVMC_field_start(MpegEncContext*s, AVCodecContext *avctx){ xvmc_render_state_t * render,* last, * next; assert(avctx != NULL); + render = (xvmc_render_state_t*)s->current_picture.data[2]; assert(render != NULL); + if( (render == NULL) || (render->magic != MP_XVMC_RENDER_MAGIC) ) + return -1;//make sure that this is render packet render->picture_structure = s->picture_structure; render->flags = (s->first_field)? 0: XVMC_SECOND_FIELD; @@ -66,12 +85,15 @@ xvmc_render_state_t * render,* last, * next; next = (xvmc_render_state_t*)s->next_picture.data[2]; assert(next!=NULL); assert(next->state & MP_XVMC_STATE_PREDICTION); + if(next == NULL) return -1; + if(next->magic != MP_XVMC_RENDER_MAGIC) return -1; render->p_future_surface = next->p_surface; //no return here, going to set forward prediction case P_TYPE: last = (xvmc_render_state_t*)s->last_picture.data[2]; if(last == NULL)// && !s->first_field) last = render;//predict second field from the first + if(last->magic != MP_XVMC_RENDER_MAGIC) return -1; assert(last->state & MP_XVMC_STATE_PREDICTION); render->p_past_surface = last->p_surface; return 0; @@ -126,6 +148,7 @@ const int mb_xy = s->mb_y * s->mb_stride + s->mb_x; assert(render!=NULL); assert(render->magic==MP_XVMC_RENDER_MAGIC); assert(render->mv_blocks); + //take the next free macroblock mv_block = &render->mv_blocks[render->start_mv_blocks_num + render->filled_mv_blocks_num ]; |