Drop the mpegvideo dependency for svq3 in configure.tags/n2.3
| @@ -1820,7 +1820,7 @@ sipr_decoder_select="lsp" | |||
| sp5x_decoder_select="mjpeg_decoder" | |||
| svq1_decoder_select="hpeldsp" | |||
| svq1_encoder_select="aandcttables dsputil hpeldsp mpegvideoenc" | |||
| svq3_decoder_select="h264_decoder hpeldsp mpegvideo" | |||
| svq3_decoder_select="h264_decoder hpeldsp" | |||
| svq3_decoder_suggest="zlib" | |||
| tak_decoder_select="dsputil" | |||
| theora_decoder_select="vp3_decoder" | |||
| @@ -57,7 +57,8 @@ OBJS-$(CONFIG_MPEGAUDIODSP) += mpegaudiodsp.o \ | |||
| mpegaudiodsp_data.o \ | |||
| mpegaudiodsp_fixed.o \ | |||
| mpegaudiodsp_float.o | |||
| OBJS-$(CONFIG_MPEGVIDEO) += mpegvideo.o mpegvideo_motion.o | |||
| OBJS-$(CONFIG_MPEGVIDEO) += mpegvideo.o mpegvideo_motion.o \ | |||
| mpegutils.o | |||
| OBJS-$(CONFIG_MPEGVIDEOENC) += mpegvideo_enc.o mpeg12data.o \ | |||
| motion_est.o ratecontrol.o | |||
| OBJS-$(CONFIG_RANGECODER) += rangecoder.o | |||
| @@ -335,7 +336,7 @@ OBJS-$(CONFIG_SUNRAST_ENCODER) += sunrastenc.o | |||
| OBJS-$(CONFIG_SVQ1_DECODER) += svq1dec.o svq1.o svq13.o h263.o | |||
| OBJS-$(CONFIG_SVQ1_ENCODER) += svq1enc.o svq1.o \ | |||
| h263.o ituh263enc.o | |||
| OBJS-$(CONFIG_SVQ3_DECODER) += svq3.o svq13.o | |||
| OBJS-$(CONFIG_SVQ3_DECODER) += svq3.o svq13.o mpegutils.o | |||
| OBJS-$(CONFIG_TAK_DECODER) += takdec.o tak.o | |||
| OBJS-$(CONFIG_TARGA_DECODER) += targa.o | |||
| OBJS-$(CONFIG_TARGA_ENCODER) += targaenc.o rle.o | |||
| @@ -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 <stdint.h> | |||
| #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); | |||
| } | |||
| } | |||
| @@ -21,8 +21,14 @@ | |||
| #ifndef AVCODEC_MPEGUTILS_H | |||
| #define AVCODEC_MPEGUTILS_H | |||
| #include <stdint.h> | |||
| #include "libavutil/frame.h" | |||
| #include "avcodec.h" | |||
| #include "version.h" | |||
| /* picture type */ | |||
| #define PICT_TOP_FIELD 1 | |||
| #define PICT_BOTTOM_FIELD 2 | |||
| @@ -108,4 +114,14 @@ | |||
| #define CANDIDATE_MB_TYPE_DIRECT0 (1 << 12) | |||
| /** | |||
| * Draw a horizontal band if supported. | |||
| * | |||
| * @param h is the normal height, this will be reduced automatically if needed | |||
| */ | |||
| void ff_draw_horiz_band(AVCodecContext *avctx, AVFrame *cur, AVFrame *last, | |||
| int y, int h, int picture_structure, int first_field, | |||
| int low_delay); | |||
| #endif /* AVCODEC_PICTTYPE_H */ | |||
| @@ -2311,59 +2311,6 @@ void ff_MPV_decode_mb(MpegEncContext *s, int16_t block[12][64]){ | |||
| MPV_decode_mb_internal(s, block, 0); | |||
| } | |||
| /** | |||
| * @param h is the normal height, this will be reduced automatically if needed for the last row | |||
| */ | |||
| 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); | |||
| } | |||
| } | |||
| void ff_mpeg_draw_horiz_band(MpegEncContext *s, int y, int h) | |||
| { | |||
| ff_draw_horiz_band(s->avctx, &s->current_picture.f, | |||
| @@ -710,9 +710,6 @@ void ff_MPV_common_init_x86(MpegEncContext *s); | |||
| void ff_MPV_common_init_arm(MpegEncContext *s); | |||
| void ff_MPV_common_init_ppc(MpegEncContext *s); | |||
| void ff_clean_intra_table_entries(MpegEncContext *s); | |||
| void ff_draw_horiz_band(AVCodecContext *avctx, AVFrame *cur, AVFrame *last, | |||
| int y, int h, int picture_structure, int first_field, | |||
| int low_delay); | |||
| void ff_mpeg_draw_horiz_band(MpegEncContext *s, int y, int h); | |||
| void ff_mpeg_flush(AVCodecContext *avctx); | |||
| void ff_print_debug_info(MpegEncContext *s, Picture *p); | |||