1/* 2 * AVPicture management routines 3 * Copyright (c) 2001, 2002, 2003 Fabrice Bellard 4 * 5 * This file is part of FFmpeg. 6 * 7 * FFmpeg is free software; you can redistribute it and/or 8 * modify it under the terms of the GNU Lesser General Public 9 * License as published by the Free Software Foundation; either 10 * version 2.1 of the License, or (at your option) any later version. 11 * 12 * FFmpeg is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 * Lesser General Public License for more details. 16 * 17 * You should have received a copy of the GNU Lesser General Public 18 * License along with FFmpeg; if not, write to the Free Software 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 20 */ 21 22/** 23 * @file 24 * AVPicture management routines 25 */ 26 27#include "avcodec.h" 28#include "internal.h" 29#include "libavutil/common.h" 30#include "libavutil/pixdesc.h" 31#include "libavutil/imgutils.h" 32#include "libavutil/colorspace.h" 33 34int avpicture_fill(AVPicture *picture, const uint8_t *ptr, 35 enum AVPixelFormat pix_fmt, int width, int height) 36{ 37 return av_image_fill_arrays(picture->data, picture->linesize, 38 ptr, pix_fmt, width, height, 1); 39} 40 41int avpicture_layout(const AVPicture* src, enum AVPixelFormat pix_fmt, int width, int height, 42 unsigned char *dest, int dest_size) 43{ 44 return av_image_copy_to_buffer(dest, dest_size, 45 (const uint8_t * const*)src->data, src->linesize, 46 pix_fmt, width, height, 1); 47} 48 49int avpicture_get_size(enum AVPixelFormat pix_fmt, int width, int height) 50{ 51 return av_image_get_buffer_size(pix_fmt, width, height, 1); 52} 53 54int avpicture_alloc(AVPicture *picture, 55 enum AVPixelFormat pix_fmt, int width, int height) 56{ 57 int ret = av_image_alloc(picture->data, picture->linesize, 58 width, height, pix_fmt, 1); 59 if (ret < 0) { 60 memset(picture, 0, sizeof(AVPicture)); 61 return ret; 62 } 63 64 return 0; 65} 66 67void avpicture_free(AVPicture *picture) 68{ 69 av_free(picture->data[0]); 70} 71 72void av_picture_copy(AVPicture *dst, const AVPicture *src, 73 enum AVPixelFormat pix_fmt, int width, int height) 74{ 75 av_image_copy(dst->data, dst->linesize, (const uint8_t **)src->data, 76 src->linesize, pix_fmt, width, height); 77} 78 79