FFmpeg
ffmpeg_utils.h
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 #ifndef FFTOOLS_FFMPEG_UTILS_H
20 #define FFTOOLS_FFMPEG_UTILS_H
21 
22 #include <stdint.h>
23 
24 #include "libavutil/common.h"
25 #include "libavutil/frame.h"
26 #include "libavutil/rational.h"
27 
28 #include "libavcodec/packet.h"
29 
30 typedef struct Timestamp {
33 } Timestamp;
34 
35 /**
36  * Merge two return codes - return one of the error codes if at least one of
37  * them was negative, 0 otherwise.
38  */
39 static inline int err_merge(int err0, int err1)
40 {
41  // prefer "real" errors over EOF
42  if ((err0 >= 0 || err0 == AVERROR_EOF) && err1 < 0)
43  return err1;
44  return (err0 < 0) ? err0 : FFMIN(err1, 0);
45 }
46 
47 /**
48  * Wrapper calling av_frame_side_data_clone() in a loop for all source entries.
49  * It does not clear dst beforehand. */
50 static inline int clone_side_data(AVFrameSideData ***dst, int *nb_dst,
51  AVFrameSideData * const *src, int nb_src,
52  unsigned int flags)
53 {
54  for (int i = 0; i < nb_src; i++) {
55  int ret = av_frame_side_data_clone(dst, nb_dst, src[i], flags);
56  if (ret < 0)
57  return ret;
58  }
59 
60  return 0;
61 }
62 
63 #endif // FFTOOLS_FFMPEG_UTILS_H
err_merge
static int err_merge(int err0, int err1)
Merge two return codes - return one of the error codes if at least one of them was negative,...
Definition: ffmpeg_utils.h:39
clone_side_data
static int clone_side_data(AVFrameSideData ***dst, int *nb_dst, AVFrameSideData *const *src, int nb_src, unsigned int flags)
Wrapper calling av_frame_side_data_clone() in a loop for all source entries.
Definition: ffmpeg_utils.h:50
AVERROR_EOF
#define AVERROR_EOF
End of file.
Definition: error.h:57
rational.h
int64_t
long long int64_t
Definition: coverity.c:34
av_frame_side_data_clone
int av_frame_side_data_clone(AVFrameSideData ***sd, int *nb_sd, const AVFrameSideData *src, unsigned int flags)
Add a new side data entry to an array based on existing side data, taking a reference towards the con...
Definition: frame.c:888
Timestamp::ts
int64_t ts
Definition: ffmpeg_utils.h:31
AVRational
Rational number (pair of numerator and denominator).
Definition: rational.h:58
dst
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
Definition: dsp.h:83
frame.h
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:256
packet.h
common.h
FFMIN
#define FFMIN(a, b)
Definition: macros.h:49
Timestamp::tb
AVRational tb
Definition: ffmpeg_utils.h:32
ret
ret
Definition: filter_design.txt:187
AVFrameSideData
Structure to hold side data for an AVFrame.
Definition: frame.h:265
flags
#define flags(name, subs,...)
Definition: cbs_av1.c:482
Timestamp
Definition: ffmpeg_utils.h:30
src
#define src
Definition: vp8dsp.c:248