FFmpeg
imgutils.c
Go to the documentation of this file.
1 /*
2  * This file is part of FFmpeg.
3  *
4  * FFmpeg is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * FFmpeg is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with FFmpeg; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17  */
18 
19 #include "libavutil/imgutils.c"
20 
21 #undef printf
22 
23 int main(void)
24 {
25  const AVPixFmtDescriptor *desc = NULL;
26  int64_t x, y;
27 
28  for (y = -1; y<UINT_MAX; y+= y/2 + 1) {
29  for (x = -1; x<UINT_MAX; x+= x/2 + 1) {
30  int ret = av_image_check_size(x, y, 0, NULL);
31  printf("%d", ret >= 0);
32  }
33  printf("\n");
34  }
35  printf("\n");
36 
37  while (desc = av_pix_fmt_desc_next(desc)) {
38  uint8_t *data[4];
39  size_t sizes[4];
40  ptrdiff_t linesizes1[4], offsets[3] = { 0 };
41  int i, total_size, w = 64, h = 48, linesizes[4];
43 
44  if (av_image_fill_linesizes(linesizes, pix_fmt, w) < 0)
45  continue;
46  for (i = 0; i < 4; i++)
47  linesizes1[i] = linesizes[i];
48  if (av_image_fill_plane_sizes(sizes, pix_fmt, h, linesizes1) < 0)
49  continue;
50  total_size = av_image_fill_pointers(data, pix_fmt, h, (void *)1, linesizes);
51  if (total_size < 0)
52  continue;
53  printf("%-16s", desc->name);
54  for (i = 0; i < 4 && data[i]; i++);
55  printf("planes: %d", i);
56  // Test the output of av_image_fill_linesizes()
57  printf(", linesizes:");
58  for (i = 0; i < 4; i++)
59  printf(" %3d", linesizes[i]);
60  // Test the output of av_image_fill_plane_sizes()
61  printf(", plane_sizes:");
62  for (i = 0; i < 4; i++)
63  printf(" %5"SIZE_SPECIFIER, sizes[i]);
64  // Test the output of av_image_fill_pointers()
65  for (i = 0; i < 3 && data[i + 1]; i++)
66  offsets[i] = data[i + 1] - data[i];
67  printf(", plane_offsets:");
68  for (i = 0; i < 3; i++)
69  printf(" %5"PTRDIFF_SPECIFIER, offsets[i]);
70  printf(", total_size: %d\n", total_size);
71  }
72 
73  return 0;
74 }
#define NULL
Definition: coverity.c:32
static enum AVPixelFormat pix_fmt
int main(void)
Definition: imgutils.c:23
ptrdiff_t const GLvoid * data
Definition: opengl_enc.c:100
const char * desc
Definition: libsvtav1.c:79
misc image utilities
uint8_t
const char * name
Definition: pixdesc.h:82
#define PTRDIFF_SPECIFIER
Definition: internal.h:190
static const int sizes[][2]
Definition: img2dec.c:53
enum AVPixelFormat av_pix_fmt_desc_get_id(const AVPixFmtDescriptor *desc)
Definition: pixdesc.c:2592
int av_image_check_size(unsigned int w, unsigned int h, int log_offset, void *log_ctx)
Check if the given dimension of an image is valid, meaning that all bytes of the image can be address...
Definition: imgutils.c:317
uint8_t w
Definition: llviddspenc.c:39
int av_image_fill_pointers(uint8_t *data[4], enum AVPixelFormat pix_fmt, int height, uint8_t *ptr, const int linesizes[4])
Fill plane data pointers for an image with pixel format pix_fmt and height height.
Definition: imgutils.c:146
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
Definition: pixdesc.h:81
int av_image_fill_linesizes(int linesizes[4], enum AVPixelFormat pix_fmt, int width)
Fill plane linesizes for an image with pixel format pix_fmt and width width.
Definition: imgutils.c:89
int av_image_fill_plane_sizes(size_t sizes[4], enum AVPixelFormat pix_fmt, int height, const ptrdiff_t linesizes[4])
Fill plane sizes for an image with pixel format pix_fmt and height height.
Definition: imgutils.c:111
#define SIZE_SPECIFIER
Definition: internal.h:191
printf("static const uint8_t my_array[100] = {\n")
AVPixelFormat
Pixel format.
Definition: pixfmt.h:64
int i
Definition: input.c:407
const AVPixFmtDescriptor * av_pix_fmt_desc_next(const AVPixFmtDescriptor *prev)
Iterate over all pixel format descriptors known to libavutil.
Definition: pixdesc.c:2580