FFmpeg  4.4.5
video_enc_params.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 <limits.h>
20 #include <stddef.h>
21 #include <stdint.h>
22 
23 #include "buffer.h"
24 #include "common.h"
25 #include "frame.h"
26 #include "mem.h"
27 #include "video_enc_params.h"
28 
30  unsigned int nb_blocks, size_t *out_size)
31 {
32  AVVideoEncParams *par;
33  size_t size;
34 
35  size = sizeof(*par);
36  if (nb_blocks > (SIZE_MAX - size) / sizeof(AVVideoBlockParams))
37  return NULL;
38  size += sizeof(AVVideoBlockParams) * nb_blocks;
39 
40  par = av_mallocz(size);
41  if (!par)
42  return NULL;
43 
44  par->type = type;
45  par->nb_blocks = nb_blocks;
46  par->block_size = sizeof(AVVideoBlockParams);
47  par->blocks_offset = sizeof(*par);
48 
49  if (out_size)
50  *out_size = size;
51 
52  return par;
53 }
54 
57  unsigned int nb_blocks)
58 {
59  AVBufferRef *buf;
60  AVVideoEncParams *par;
61  size_t size;
62 
63  par = av_video_enc_params_alloc(type, nb_blocks, &size);
64  if (!par)
65  return NULL;
66  if (size > INT_MAX) {
67  av_free(par);
68  return NULL;
69  }
70  buf = av_buffer_create((uint8_t *)par, size, NULL, NULL, 0);
71  if (!buf) {
72  av_freep(&par);
73  return NULL;
74  }
75 
77  av_buffer_unref(&buf);
78  return NULL;
79  }
80 
81  return par;
82 }
uint8_t
refcounted data buffer API
common internal and external API header
#define NULL
Definition: coverity.c:32
static AVFrame * frame
reference-counted frame API
void av_buffer_unref(AVBufferRef **buf)
Free a given reference and automatically free the buffer if there are no more references to it.
Definition: buffer.c:125
AVBufferRef * av_buffer_create(uint8_t *data, buffer_size_t size, void(*free)(void *opaque, uint8_t *data), void *opaque, int flags)
Create an AVBuffer from an existing array.
Definition: buffer.c:29
AVFrameSideData * av_frame_new_side_data_from_buf(AVFrame *frame, enum AVFrameSideDataType type, AVBufferRef *buf)
Add a new side data to a frame from an existing AVBufferRef.
Definition: frame.c:694
@ AV_FRAME_DATA_VIDEO_ENC_PARAMS
Encoding parameters for a video frame, as described by AVVideoEncParams.
Definition: frame.h:186
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
Definition: mem.c:237
cl_device_type type
Memory handling functions.
A reference to a data buffer.
Definition: buffer.h:84
This structure describes decoded (raw) audio or video data.
Definition: frame.h:318
Data structure for storing block-level encoding information.
Video encoding parameters for a given frame.
enum AVVideoEncParamsType type
Type of the parameters (the codec they are used with).
unsigned int nb_blocks
Number of blocks in the array.
size_t blocks_offset
Offset in bytes from the beginning of this structure at which the array of blocks starts.
#define av_free(p)
#define av_freep(p)
int out_size
Definition: movenc.c:55
int size
AVVideoEncParams * av_video_enc_params_create_side_data(AVFrame *frame, enum AVVideoEncParamsType type, unsigned int nb_blocks)
Allocates memory for AVEncodeInfoFrame plus an array of.
AVVideoEncParams * av_video_enc_params_alloc(enum AVVideoEncParamsType type, unsigned int nb_blocks, size_t *out_size)
Allocates memory for AVVideoEncParams of the given type, plus an array of.
AVVideoEncParamsType