Mercurial > libavcodec.hg
changeset 1928:0c23a5564489 libavcodec
padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
author | michael |
---|---|
date | Thu, 08 Apr 2004 18:54:40 +0000 |
parents | d7505fbe66cb |
children | d4525c3065d0 |
files | avcodec.h imgresample.c |
diffstat | 2 files changed, 44 insertions(+), 16 deletions(-) [+] |
line wrap: on
line diff
--- a/avcodec.h Wed Apr 07 13:26:47 2004 +0000 +++ b/avcodec.h Thu Apr 08 18:54:40 2004 +0000 @@ -17,7 +17,7 @@ #define FFMPEG_VERSION_INT 0x000408 #define FFMPEG_VERSION "0.4.8" -#define LIBAVCODEC_BUILD 4707 +#define LIBAVCODEC_BUILD 4708 #define LIBAVCODEC_VERSION_INT FFMPEG_VERSION_INT #define LIBAVCODEC_VERSION FFMPEG_VERSION @@ -1821,7 +1821,10 @@ ImgReSampleContext *img_resample_full_init(int owidth, int oheight, int iwidth, int iheight, int topBand, int bottomBand, - int leftBand, int rightBand); + int leftBand, int rightBand, + int padtop, int padbottom, + int padleft, int padright); + void img_resample(ImgReSampleContext *s, AVPicture *output, const AVPicture *input);
--- a/imgresample.c Wed Apr 07 13:26:47 2004 +0000 +++ b/imgresample.c Thu Apr 08 18:54:40 2004 +0000 @@ -45,7 +45,10 @@ #define LINE_BUF_HEIGHT (NB_TAPS * 4) struct ImgReSampleContext { - int iwidth, iheight, owidth, oheight, topBand, bottomBand, leftBand, rightBand; + int iwidth, iheight, owidth, oheight; + int topBand, bottomBand, leftBand, rightBand; + int padtop, padbottom, padleft, padright; + int pad_owidth, pad_oheight; int h_incr, v_incr; int16_t h_filters[NB_PHASES][NB_TAPS] __align8; /* horizontal filters */ int16_t v_filters[NB_PHASES][NB_TAPS] __align8; /* vertical filters */ @@ -532,6 +535,7 @@ &s->v_filters[phase_y][0]); src_y += s->v_incr; + output += owrap; } } @@ -572,13 +576,16 @@ ImgReSampleContext *img_resample_init(int owidth, int oheight, int iwidth, int iheight) { - return img_resample_full_init(owidth, oheight, iwidth, iheight, 0, 0, 0, 0); + return img_resample_full_init(owidth, oheight, iwidth, iheight, + 0, 0, 0, 0, 0, 0, 0, 0); } ImgReSampleContext *img_resample_full_init(int owidth, int oheight, int iwidth, int iheight, int topBand, int bottomBand, - int leftBand, int rightBand) + int leftBand, int rightBand, + int padtop, int padbottom, + int padleft, int padright) { ImgReSampleContext *s; @@ -593,19 +600,30 @@ s->oheight = oheight; s->iwidth = iwidth; s->iheight = iheight; + s->topBand = topBand; s->bottomBand = bottomBand; s->leftBand = leftBand; s->rightBand = rightBand; - s->h_incr = ((iwidth - leftBand - rightBand) * POS_FRAC) / owidth; - s->v_incr = ((iheight - topBand - bottomBand) * POS_FRAC) / oheight; - - build_filter(&s->h_filters[0][0], (float) owidth / (float) (iwidth - leftBand - rightBand)); - build_filter(&s->v_filters[0][0], (float) oheight / (float) (iheight - topBand - bottomBand)); + s->padtop = padtop; + s->padbottom = padbottom; + s->padleft = padleft; + s->padright = padright; + + s->pad_owidth = owidth - (padleft + padright); + s->pad_oheight = oheight - (padtop + padbottom); + + s->h_incr = ((iwidth - leftBand - rightBand) * POS_FRAC) / s->pad_owidth; + s->v_incr = ((iheight - topBand - bottomBand) * POS_FRAC) / s->pad_oheight; + + build_filter(&s->h_filters[0][0], (float) s->pad_owidth / + (float) (iwidth - leftBand - rightBand)); + build_filter(&s->v_filters[0][0], (float) s->pad_oheight / + (float) (iheight - topBand - bottomBand)); return s; - fail: +fail: av_free(s); return NULL; } @@ -614,13 +632,20 @@ AVPicture *output, const AVPicture *input) { int i, shift; + uint8_t* optr; - for(i=0;i<3;i++) { + for (i=0;i<3;i++) { shift = (i == 0) ? 0 : 1; - component_resample(s, output->data[i], output->linesize[i], - s->owidth >> shift, s->oheight >> shift, - input->data[i] + (input->linesize[i] * (s->topBand >> shift)) + (s->leftBand >> shift), - input->linesize[i], ((s->iwidth - s->leftBand - s->rightBand) >> shift), + + optr = output->data[i] + (((output->linesize[i] * + s->padtop) + s->padleft) >> shift); + + component_resample(s, optr, output->linesize[i], + s->pad_owidth >> shift, s->pad_oheight >> shift, + input->data[i] + (input->linesize[i] * + (s->topBand >> shift)) + (s->leftBand >> shift), + input->linesize[i], ((s->iwidth - s->leftBand - + s->rightBand) >> shift), (s->iheight - s->topBand - s->bottomBand) >> shift); } }