From be039278b5ebd8075d90a3508db2aed5adf59e02 Mon Sep 17 00:00:00 2001 From: Vittorio Giovara Date: Wed, 12 Mar 2014 10:18:54 +0100 Subject: mpegvideo: move ff_draw_horiz_band() to mpegutils.c Drop the mpegvideo dependency for svq3 in configure. --- libavcodec/mpegutils.c | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 libavcodec/mpegutils.c (limited to 'libavcodec/mpegutils.c') diff --git a/libavcodec/mpegutils.c b/libavcodec/mpegutils.c new file mode 100644 index 0000000000..bc430f0531 --- /dev/null +++ b/libavcodec/mpegutils.c @@ -0,0 +1,80 @@ +/* + * Mpeg video formats-related defines and utility functions + * + * This file is part of Libav. + * + * Libav 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.1 of the License, or (at your option) any later version. + * + * Libav 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 Libav; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include + +#include "libavutil/common.h" +#include "libavutil/frame.h" +#include "libavutil/pixdesc.h" + +#include "avcodec.h" +#include "mpegutils.h" + +void ff_draw_horiz_band(AVCodecContext *avctx, + AVFrame *cur, AVFrame *last, + int y, int h, int picture_structure, + int first_field, int low_delay) +{ + const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(avctx->pix_fmt); + int vshift = desc->log2_chroma_h; + const int field_pic = picture_structure != PICT_FRAME; + if (field_pic) { + h <<= 1; + y <<= 1; + } + + h = FFMIN(h, avctx->height - y); + + if (field_pic && first_field && + !(avctx->slice_flags & SLICE_FLAG_ALLOW_FIELD)) + return; + + if (avctx->draw_horiz_band) { + AVFrame *src; + int offset[AV_NUM_DATA_POINTERS]; + int i; + + if (cur->pict_type == AV_PICTURE_TYPE_B || low_delay || + (avctx->slice_flags & SLICE_FLAG_CODED_ORDER)) + src = cur; + else if (last) + src = last; + else + return; + + if (cur->pict_type == AV_PICTURE_TYPE_B && + picture_structure == PICT_FRAME && + avctx->codec_id != AV_CODEC_ID_SVQ3) { + for (i = 0; i < AV_NUM_DATA_POINTERS; i++) + offset[i] = 0; + } else { + offset[0]= y * src->linesize[0]; + offset[1]= + offset[2]= (y >> vshift) * src->linesize[1]; + for (i = 3; i < AV_NUM_DATA_POINTERS; i++) + offset[i] = 0; + } + + emms_c(); + + avctx->draw_horiz_band(avctx, src, offset, + y, picture_structure, h); + } +} -- cgit v1.2.3