Mercurial > libavcodec.hg
changeset 3179:870bbd067df8 libavcodec
Fix cropping, depending on enc pix fmt
author | bcoudurier |
---|---|
date | Fri, 10 Mar 2006 13:55:48 +0000 |
parents | bd995b8c64fd |
children | 00b7ecfd59a6 |
files | avcodec.h imgconvert.c |
diffstat | 2 files changed, 28 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/avcodec.h Thu Mar 09 08:05:45 2006 +0000 +++ b/avcodec.h Fri Mar 10 13:55:48 2006 +0000 @@ -2555,6 +2555,9 @@ void img_copy(AVPicture *dst, const AVPicture *src, int pix_fmt, int width, int height); +int img_crop(AVPicture *dst, const AVPicture *src, + int pix_fmt, int top_band, int left_band); + /* av_log API */ #include <stdarg.h>
--- a/imgconvert.c Thu Mar 09 08:05:45 2006 +0000 +++ b/imgconvert.c Fri Mar 10 13:55:48 2006 +0000 @@ -1951,6 +1951,31 @@ ps->pixel_type == FF_PIXEL_PLANAR; } +/** + * Crop image top and left side + */ +int img_crop(AVPicture *dst, const AVPicture *src, + int pix_fmt, int top_band, int left_band) +{ + int y_shift; + int x_shift; + + if (pix_fmt < 0 || pix_fmt >= PIX_FMT_NB || !is_yuv_planar(&pix_fmt_info[pix_fmt])) + return -1; + + y_shift = pix_fmt_info[pix_fmt].y_chroma_shift; + x_shift = pix_fmt_info[pix_fmt].x_chroma_shift; + + dst->data[0] = src->data[0] + (top_band * src->linesize[0]) + left_band; + dst->data[1] = src->data[1] + ((top_band >> y_shift) * src->linesize[1]) + (left_band >> x_shift); + dst->data[2] = src->data[2] + ((top_band >> y_shift) * src->linesize[2]) + (left_band >> x_shift); + + dst->linesize[0] = src->linesize[0]; + dst->linesize[1] = src->linesize[1]; + dst->linesize[2] = src->linesize[2]; + return 0; +} + /* XXX: always use linesize. Return -1 if not supported */ int img_convert(AVPicture *dst, int dst_pix_fmt, const AVPicture *src, int src_pix_fmt,