mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2025-02-18 12:56:56 +00:00
Implement av_image_alloc() and use it in
avfilter_default_get_video_buffer(). Originally committed as revision 25878 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
bf799f686f
commit
4da12e3b13
@ -12,6 +12,9 @@ libavutil: 2009-03-08
|
|||||||
|
|
||||||
|
|
||||||
API changes, most recent first:
|
API changes, most recent first:
|
||||||
|
2010-12-04 - r25878 - lavcore 1.15.0 - av_image_alloc()
|
||||||
|
Add av_image_alloc() to libavcore/imgutils.h.
|
||||||
|
|
||||||
2010-12-02 - r25862 - lavfi 1.67.0 - avfilter_graph_create_filter()
|
2010-12-02 - r25862 - lavfi 1.67.0 - avfilter_graph_create_filter()
|
||||||
Add function avfilter_graph_create_filter() in avfiltergraph.h.
|
Add function avfilter_graph_create_filter() in avfiltergraph.h.
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@
|
|||||||
#include "libavutil/avutil.h"
|
#include "libavutil/avutil.h"
|
||||||
|
|
||||||
#define LIBAVCORE_VERSION_MAJOR 0
|
#define LIBAVCORE_VERSION_MAJOR 0
|
||||||
#define LIBAVCORE_VERSION_MINOR 14
|
#define LIBAVCORE_VERSION_MINOR 15
|
||||||
#define LIBAVCORE_VERSION_MICRO 0
|
#define LIBAVCORE_VERSION_MICRO 0
|
||||||
|
|
||||||
#define LIBAVCORE_VERSION_INT AV_VERSION_INT(LIBAVCORE_VERSION_MAJOR, \
|
#define LIBAVCORE_VERSION_INT AV_VERSION_INT(LIBAVCORE_VERSION_MAJOR, \
|
||||||
|
@ -172,6 +172,35 @@ int ff_set_systematic_pal2(uint32_t pal[256], enum PixelFormat pix_fmt)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int av_image_alloc(uint8_t *pointers[4], int linesizes[4],
|
||||||
|
int w, int h, enum PixelFormat pix_fmt, int align)
|
||||||
|
{
|
||||||
|
int i, ret;
|
||||||
|
uint8_t *buf;
|
||||||
|
|
||||||
|
if ((ret = av_image_check_size(w, h, 0, NULL)) < 0)
|
||||||
|
return ret;
|
||||||
|
if ((ret = av_image_fill_linesizes(linesizes, pix_fmt, w)) < 0)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
for (i = 0; i < 4; i++)
|
||||||
|
linesizes[i] = FFALIGN(linesizes[i], align);
|
||||||
|
|
||||||
|
if ((ret = av_image_fill_pointers(pointers, pix_fmt, h, NULL, linesizes)) < 0)
|
||||||
|
return ret;
|
||||||
|
buf = av_malloc(ret + align);
|
||||||
|
if (!buf)
|
||||||
|
return AVERROR(ENOMEM);
|
||||||
|
if ((ret = av_image_fill_pointers(pointers, pix_fmt, h, buf, linesizes)) < 0) {
|
||||||
|
av_free(buf);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
if (av_pix_fmt_descriptors[pix_fmt].flags & PIX_FMT_PAL)
|
||||||
|
ff_set_systematic_pal2((uint32_t*)pointers[1], pix_fmt);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
typedef struct ImgUtils {
|
typedef struct ImgUtils {
|
||||||
const AVClass *class;
|
const AVClass *class;
|
||||||
int log_offset;
|
int log_offset;
|
||||||
|
@ -77,6 +77,19 @@ int av_image_fill_linesizes(int linesizes[4], enum PixelFormat pix_fmt, int widt
|
|||||||
int av_image_fill_pointers(uint8_t *data[4], enum PixelFormat pix_fmt, int height,
|
int av_image_fill_pointers(uint8_t *data[4], enum PixelFormat pix_fmt, int height,
|
||||||
uint8_t *ptr, const int linesizes[4]);
|
uint8_t *ptr, const int linesizes[4]);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Allocate an image with size w and h and pixel format pix_fmt, and
|
||||||
|
* fill pointers and linesizes accordingly.
|
||||||
|
* The allocated image buffer has to be freed by using
|
||||||
|
* av_freep(&pointers[0]).
|
||||||
|
*
|
||||||
|
* @param align the value to use for buffer size alignment
|
||||||
|
* @return the size in bytes required for the image buffer, a negative
|
||||||
|
* error code in case of failure
|
||||||
|
*/
|
||||||
|
int av_image_alloc(uint8_t *pointers[4], int linesizes[4],
|
||||||
|
int w, int h, enum PixelFormat pix_fmt, int align);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Copy image plane from src to dst.
|
* Copy image plane from src to dst.
|
||||||
* That is, copy "height" number of lines of "bytewidth" bytes each.
|
* That is, copy "height" number of lines of "bytewidth" bytes each.
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
|
|
||||||
#define LIBAVFILTER_VERSION_MAJOR 1
|
#define LIBAVFILTER_VERSION_MAJOR 1
|
||||||
#define LIBAVFILTER_VERSION_MINOR 67
|
#define LIBAVFILTER_VERSION_MINOR 67
|
||||||
#define LIBAVFILTER_VERSION_MICRO 0
|
#define LIBAVFILTER_VERSION_MICRO 1
|
||||||
|
|
||||||
#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
|
#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
|
||||||
LIBAVFILTER_VERSION_MINOR, \
|
LIBAVFILTER_VERSION_MINOR, \
|
||||||
|
@ -37,26 +37,18 @@ void ff_avfilter_default_free_buffer(AVFilterBuffer *ptr)
|
|||||||
* alloc & free cycle currently implemented. */
|
* alloc & free cycle currently implemented. */
|
||||||
AVFilterBufferRef *avfilter_default_get_video_buffer(AVFilterLink *link, int perms, int w, int h)
|
AVFilterBufferRef *avfilter_default_get_video_buffer(AVFilterLink *link, int perms, int w, int h)
|
||||||
{
|
{
|
||||||
char *buf = NULL;
|
int linesize[4];
|
||||||
int linesize[4], i, tempsize;
|
|
||||||
uint8_t *data[4];
|
uint8_t *data[4];
|
||||||
AVFilterBufferRef *picref = NULL;
|
AVFilterBufferRef *picref = NULL;
|
||||||
|
|
||||||
av_image_fill_linesizes(linesize, link->format, w);
|
// +2 is needed for swscaler, +16 to be SIMD-friendly
|
||||||
for (i = 0; i < 4; i++)
|
if (av_image_alloc(data, linesize, w, h, link->format, 16) < 0)
|
||||||
linesize[i] = FFALIGN(linesize[i], 16);
|
|
||||||
tempsize = av_image_fill_pointers(data, link->format, h, NULL, linesize);
|
|
||||||
buf = av_malloc(tempsize + 16); // +2 is needed for swscaler, +16 to be
|
|
||||||
// SIMD-friendly
|
|
||||||
if (!buf)
|
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
av_image_fill_pointers(data, link->format, h, buf, linesize);
|
|
||||||
|
|
||||||
picref = avfilter_get_video_buffer_ref_from_arrays(data, linesize,
|
picref = avfilter_get_video_buffer_ref_from_arrays(data, linesize,
|
||||||
perms, w, h, link->format);
|
perms, w, h, link->format);
|
||||||
if (!picref) {
|
if (!picref) {
|
||||||
av_free(buf);
|
av_free(data[0]);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user