FFmpeg
detection_bbox.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 "detection_bbox.h"
20 
22 {
23  size_t size;
24  struct BBoxContext {
26  AVDetectionBBox boxes;
27  };
28  const size_t bboxes_offset = offsetof(struct BBoxContext, boxes);
29  const size_t bbox_size = sizeof(AVDetectionBBox);
31 
32  size = bboxes_offset;
33  if (nb_bboxes > (SIZE_MAX - size) / bbox_size)
34  return NULL;
35  size += bbox_size * nb_bboxes;
36 
38  if (!header)
39  return NULL;
40 
41  header->nb_bboxes = nb_bboxes;
42  header->bbox_size = bbox_size;
43  header->bboxes_offset = bboxes_offset;
44 
45  if (out_size)
46  *out_size = size;
47 
48  return header;
49 }
50 
52 {
53  AVBufferRef *buf;
55  size_t size;
56 
57  header = av_detection_bbox_alloc(nb_bboxes, &size);
58  if (!header)
59  return NULL;
60  buf = av_buffer_create((uint8_t *)header, size, NULL, NULL, 0);
61  if (!buf) {
62  av_freep(&header);
63  return NULL;
64  }
65 
67  av_buffer_unref(&buf);
68  return NULL;
69  }
70 
71  return header;
72 }
out_size
int out_size
Definition: movenc.c:55
AVFrame
This structure describes decoded (raw) audio or video data.
Definition: frame.h:375
BBoxContext
Definition: vf_bbox.c:33
frame
static AVFrame * frame
Definition: demux_decode.c:54
NULL
#define NULL
Definition: coverity.c:32
av_buffer_unref
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:139
AVDetectionBBoxHeader
Definition: detection_bbox.h:56
av_frame_new_side_data_from_buf
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:777
av_buffer_create
AVBufferRef * av_buffer_create(uint8_t *data, size_t size, void(*free)(void *opaque, uint8_t *data), void *opaque, int flags)
Create an AVBuffer from an existing array.
Definition: buffer.c:55
av_detection_bbox_create_side_data
AVDetectionBBoxHeader * av_detection_bbox_create_side_data(AVFrame *frame, uint32_t nb_bboxes)
Allocates memory for AVDetectionBBoxHeader, plus an array of.
Definition: detection_bbox.c:51
size
int size
Definition: twinvq_data.h:10344
header
static const uint8_t header[24]
Definition: sdr2.c:68
av_mallocz
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
Definition: mem.c:254
AVBufferRef
A reference to a data buffer.
Definition: buffer.h:82
av_freep
#define av_freep(p)
Definition: tableprint_vlc.h:34
AVDetectionBBox
Definition: detection_bbox.h:26
detection_bbox.h
AV_FRAME_DATA_DETECTION_BBOXES
@ AV_FRAME_DATA_DETECTION_BBOXES
Bounding boxes for object detection and classification, as described by AVDetectionBBoxHeader.
Definition: frame.h:194
av_detection_bbox_alloc
AVDetectionBBoxHeader * av_detection_bbox_alloc(uint32_t nb_bboxes, size_t *out_size)
Allocates memory for AVDetectionBBoxHeader, plus an array of.
Definition: detection_bbox.c:21