Re: [libav-devel] [PATCH 3/4] avcodec: split avpicture from imgconvert
On 11/12/2012 08:11 PM, Luca Barbato wrote: > On 11/12/2012 02:13 AM, Kieran Kunhya wrote: >> On Mon, Nov 12, 2012 at 1:09 AM, Kieran Kunhya >> wrote: >>> On Mon, Nov 12, 2012 at 12:25 AM, Luca Barbato wrote: All the non deprecated functions are in avpicture.c now. --- libavcodec/Makefile | 1 + libavcodec/avpicture.c | 123 libavcodec/imgconvert.c | 85 - >>> >>> These functions are now lavc internal? av_image_alloc and similar were >>> quite useful for custom get_buffer functions amongst >>> other things. >> >> Oh ignore me, imgconvert.h is still there. > > It doesn't exist. The functions you are referring to are part of avutil > already. > > The whole thing aims to remove > > av_picture_pad and av_picture_crop since they won't work on quite used > pixel formats and are superceeded by swscale. > > avpicture_deinterlace since it is superceeded by yadif > > > avcodec_find_best_pix_fmt* got a bit pointless since we aren't using > pixel formats to describe the color model, so it is at best provides an > hint. > > I have a patch to simplify it, but I doubt it is of any use so we might > just remove it if nobody is using it. What is libavfilter using for automatic pixel format negotiation? or does it even do any kind of smart selection at all currently? -Justin ___ libav-devel mailing list libav-devel@libav.org https://lists.libav.org/mailman/listinfo/libav-devel
Re: [libav-devel] [PATCH 3/4] avcodec: split avpicture from imgconvert
On 11/12/2012 01:25 AM, Luca Barbato wrote: > All the non deprecated functions are in avpicture.c now. > --- > libavcodec/Makefile | 1 + > libavcodec/avpicture.c | 123 > > libavcodec/imgconvert.c | 85 - > 3 files changed, 124 insertions(+), 85 deletions(-) > create mode 100644 libavcodec/avpicture.c > Ping. ___ libav-devel mailing list libav-devel@libav.org https://lists.libav.org/mailman/listinfo/libav-devel
Re: [libav-devel] [PATCH 3/4] avcodec: split avpicture from imgconvert
On 11/12/2012 02:13 AM, Kieran Kunhya wrote: > On Mon, Nov 12, 2012 at 1:09 AM, Kieran Kunhya wrote: >> On Mon, Nov 12, 2012 at 12:25 AM, Luca Barbato wrote: >>> All the non deprecated functions are in avpicture.c now. >>> --- >>> libavcodec/Makefile | 1 + >>> libavcodec/avpicture.c | 123 >>> >>> libavcodec/imgconvert.c | 85 - >> >> These functions are now lavc internal? av_image_alloc and similar were >> quite useful for custom get_buffer functions amongst >> other things. > > Oh ignore me, imgconvert.h is still there. It doesn't exist. The functions you are referring to are part of avutil already. The whole thing aims to remove av_picture_pad and av_picture_crop since they won't work on quite used pixel formats and are superceeded by swscale. avpicture_deinterlace since it is superceeded by yadif avcodec_find_best_pix_fmt* got a bit pointless since we aren't using pixel formats to describe the color model, so it is at best provides an hint. I have a patch to simplify it, but I doubt it is of any use so we might just remove it if nobody is using it. lu ___ libav-devel mailing list libav-devel@libav.org https://lists.libav.org/mailman/listinfo/libav-devel
Re: [libav-devel] [PATCH 3/4] avcodec: split avpicture from imgconvert
On Mon, Nov 12, 2012 at 1:09 AM, Kieran Kunhya wrote: > On Mon, Nov 12, 2012 at 12:25 AM, Luca Barbato wrote: >> All the non deprecated functions are in avpicture.c now. >> --- >> libavcodec/Makefile | 1 + >> libavcodec/avpicture.c | 123 >> >> libavcodec/imgconvert.c | 85 - > > These functions are now lavc internal? av_image_alloc and similar were > quite useful for custom get_buffer functions amongst > other things. Oh ignore me, imgconvert.h is still there. ___ libav-devel mailing list libav-devel@libav.org https://lists.libav.org/mailman/listinfo/libav-devel
Re: [libav-devel] [PATCH 3/4] avcodec: split avpicture from imgconvert
On Mon, Nov 12, 2012 at 12:25 AM, Luca Barbato wrote: > All the non deprecated functions are in avpicture.c now. > --- > libavcodec/Makefile | 1 + > libavcodec/avpicture.c | 123 > > libavcodec/imgconvert.c | 85 - These functions are now lavc internal? av_image_alloc and similar were quite useful for custom get_buffer functions amongst other things. ___ libav-devel mailing list libav-devel@libav.org https://lists.libav.org/mailman/listinfo/libav-devel
[libav-devel] [PATCH 3/4] avcodec: split avpicture from imgconvert
All the non deprecated functions are in avpicture.c now. --- libavcodec/Makefile | 1 + libavcodec/avpicture.c | 123 libavcodec/imgconvert.c | 85 - 3 files changed, 124 insertions(+), 85 deletions(-) create mode 100644 libavcodec/avpicture.c diff --git a/libavcodec/Makefile b/libavcodec/Makefile index 4d14aea..cab1a89 100644 --- a/libavcodec/Makefile +++ b/libavcodec/Makefile @@ -14,6 +14,7 @@ HEADERS = avcodec.h \ OBJS = allcodecs.o \ audioconvert.o \ avpacket.o \ + avpicture.o \ bitstream.o \ bitstream_filter.o \ codec_desc.o \ diff --git a/libavcodec/avpicture.c b/libavcodec/avpicture.c new file mode 100644 index 000..ec4e748 --- /dev/null +++ b/libavcodec/avpicture.c @@ -0,0 +1,123 @@ +/* + * AVPicture management routines + * Copyright (c) 2001, 2002, 2003 Fabrice Bellard + * + * 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 + */ + +/** + * @file + * AVPicture management routines + */ + +#include "avcodec.h" +#include "internal.h" +#include "libavutil/common.h" +#include "libavutil/pixdesc.h" +#include "libavutil/imgutils.h" +#include "libavutil/colorspace.h" + +int avpicture_fill(AVPicture *picture, uint8_t *ptr, + enum AVPixelFormat pix_fmt, int width, int height) +{ +int ret; + +if ((ret = av_image_check_size(width, height, 0, NULL)) < 0) +return ret; + +if ((ret = av_image_fill_linesizes(picture->linesize, pix_fmt, width)) < 0) +return ret; + +return av_image_fill_pointers(picture->data, pix_fmt, + height, ptr, picture->linesize); +} + +int avpicture_layout(const AVPicture* src, enum AVPixelFormat pix_fmt, + int width, int height, + unsigned char *dest, int dest_size) +{ +int i, j, nb_planes = 0, linesizes[4]; +const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt); +int size = avpicture_get_size(pix_fmt, width, height); + +if (size > dest_size || size < 0) +return AVERROR(EINVAL); + +for (i = 0; i < desc->nb_components; i++) +nb_planes = FFMAX(desc->comp[i].plane, nb_planes); + +nb_planes++; + +av_image_fill_linesizes(linesizes, pix_fmt, width); +for (i = 0; i < nb_planes; i++) { +int h, shift = (i == 1 || i == 2) ? desc->log2_chroma_h : 0; +const unsigned char *s = src->data[i]; +h = (height + (1 << shift) - 1) >> shift; + +for (j = 0; j < h; j++) { +memcpy(dest, s, linesizes[i]); +dest += linesizes[i]; +s += src->linesize[i]; +} +} + +if (desc->flags & PIX_FMT_PAL) +memcpy((unsigned char *)(((size_t)dest + 3) & ~3), + src->data[1], 256 * 4); + +return size; +} + +int avpicture_get_size(enum AVPixelFormat pix_fmt, int width, int height) +{ +const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt); +AVPicture dummy_pict; +int ret; + +if ((ret = av_image_check_size(width, height, 0, NULL)) < 0) +return ret; +if (desc->flags & PIX_FMT_PSEUDOPAL) +// do not include palette for these pseudo-paletted formats +return width * height; +return avpicture_fill(&dummy_pict, NULL, pix_fmt, width, height); +} + +int avpicture_alloc(AVPicture *picture, +enum AVPixelFormat pix_fmt, int width, int height) +{ +int ret = av_image_alloc(picture->data, picture->linesize, + width, height, pix_fmt, 1); +if (ret < 0) { +memset(picture, 0, sizeof(AVPicture)); +return ret; +} + +return 0; +} + +void avpicture_free(AVPicture *picture) +{ +av_free(picture->data[0]); +} + +void av_picture_copy(AVPicture *dst, const AVPicture *src, + enum