| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | /* | ||
| 2 | * utils for libavcodec | ||
| 3 | * Copyright (c) 2001 Fabrice Bellard | ||
| 4 | * Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at> | ||
| 5 | * | ||
| 6 | * This file is part of FFmpeg. | ||
| 7 | * | ||
| 8 | * FFmpeg is free software; you can redistribute it and/or | ||
| 9 | * modify it under the terms of the GNU Lesser General Public | ||
| 10 | * License as published by the Free Software Foundation; either | ||
| 11 | * version 2.1 of the License, or (at your option) any later version. | ||
| 12 | * | ||
| 13 | * FFmpeg is distributed in the hope that it will be useful, | ||
| 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
| 16 | * Lesser General Public License for more details. | ||
| 17 | * | ||
| 18 | * You should have received a copy of the GNU Lesser General Public | ||
| 19 | * License along with FFmpeg; if not, write to the Free Software | ||
| 20 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | ||
| 21 | */ | ||
| 22 | |||
| 23 | /** | ||
| 24 | * @file | ||
| 25 | * utils. | ||
| 26 | */ | ||
| 27 | |||
| 28 | #include "config.h" | ||
| 29 | #include "libavutil/avassert.h" | ||
| 30 | #include "libavutil/channel_layout.h" | ||
| 31 | #include "libavutil/intreadwrite.h" | ||
| 32 | #include "libavutil/mem.h" | ||
| 33 | #include "libavutil/pixdesc.h" | ||
| 34 | #include "libavutil/imgutils.h" | ||
| 35 | #include "libavutil/pixfmt.h" | ||
| 36 | #include "libavutil/timecode_internal.h" | ||
| 37 | #include "avcodec.h" | ||
| 38 | #include "codec.h" | ||
| 39 | #include "codec_desc.h" | ||
| 40 | #include "codec_internal.h" | ||
| 41 | #include "codec_par.h" | ||
| 42 | #include "decode.h" | ||
| 43 | #include "hwconfig.h" | ||
| 44 | #include "libavutil/refstruct.h" | ||
| 45 | #include "thread.h" | ||
| 46 | #include "threadframe.h" | ||
| 47 | #include "internal.h" | ||
| 48 | #include "put_bits.h" | ||
| 49 | #include "startcode.h" | ||
| 50 | #include <stdlib.h> | ||
| 51 | #include <limits.h> | ||
| 52 | |||
| 53 | 193371 | void av_fast_padded_malloc(void *ptr, unsigned int *size, size_t min_size) | |
| 54 | { | ||
| 55 | 193371 | uint8_t **p = ptr; | |
| 56 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 193371 times.
|
193371 | if (min_size > SIZE_MAX - AV_INPUT_BUFFER_PADDING_SIZE) { |
| 57 | ✗ | av_freep(p); | |
| 58 | ✗ | *size = 0; | |
| 59 | ✗ | return; | |
| 60 | } | ||
| 61 | 193371 | av_fast_mallocz(p, size, min_size + AV_INPUT_BUFFER_PADDING_SIZE); | |
| 62 |
1/2✓ Branch 0 taken 193371 times.
✗ Branch 1 not taken.
|
193371 | if (*p) |
| 63 | 193371 | memset(*p + min_size, 0, AV_INPUT_BUFFER_PADDING_SIZE); | |
| 64 | } | ||
| 65 | |||
| 66 | 708 | void av_fast_padded_mallocz(void *ptr, unsigned int *size, size_t min_size) | |
| 67 | { | ||
| 68 | 708 | uint8_t **p = ptr; | |
| 69 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 708 times.
|
708 | if (min_size > SIZE_MAX - AV_INPUT_BUFFER_PADDING_SIZE) { |
| 70 | ✗ | av_freep(p); | |
| 71 | ✗ | *size = 0; | |
| 72 | ✗ | return; | |
| 73 | } | ||
| 74 | 708 | av_fast_malloc(p, size, min_size + AV_INPUT_BUFFER_PADDING_SIZE); | |
| 75 |
1/2✓ Branch 0 taken 708 times.
✗ Branch 1 not taken.
|
708 | if (*p) |
| 76 | 708 | memset(*p, 0, min_size + AV_INPUT_BUFFER_PADDING_SIZE); | |
| 77 | } | ||
| 78 | |||
| 79 | 2396270 | int av_codec_is_encoder(const AVCodec *avcodec) | |
| 80 | { | ||
| 81 | 2396270 | const FFCodec *const codec = ffcodec(avcodec); | |
| 82 |
4/4✓ Branch 0 taken 2386157 times.
✓ Branch 1 taken 10113 times.
✓ Branch 2 taken 1422920 times.
✓ Branch 3 taken 963237 times.
|
2396270 | return codec && !codec->is_decoder; |
| 83 | } | ||
| 84 | |||
| 85 | 468653 | int av_codec_is_decoder(const AVCodec *avcodec) | |
| 86 | { | ||
| 87 | 468653 | const FFCodec *const codec = ffcodec(avcodec); | |
| 88 |
4/4✓ Branch 0 taken 458540 times.
✓ Branch 1 taken 10113 times.
✓ Branch 2 taken 436721 times.
✓ Branch 3 taken 21819 times.
|
468653 | return codec && codec->is_decoder; |
| 89 | } | ||
| 90 | |||
| 91 | 63386 | int ff_set_dimensions(AVCodecContext *s, int width, int height) | |
| 92 | { | ||
| 93 | 63386 | int ret = av_image_check_size2(width, height, s->max_pixels, AV_PIX_FMT_NONE, 0, s); | |
| 94 | |||
| 95 |
2/2✓ Branch 0 taken 1 times.
✓ Branch 1 taken 63385 times.
|
63386 | if (ret < 0) |
| 96 | 1 | width = height = 0; | |
| 97 | |||
| 98 | 63386 | s->coded_width = width; | |
| 99 | 63386 | s->coded_height = height; | |
| 100 | 63386 | s->width = AV_CEIL_RSHIFT(width, s->lowres); | |
| 101 | 63386 | s->height = AV_CEIL_RSHIFT(height, s->lowres); | |
| 102 | |||
| 103 | 63386 | return ret; | |
| 104 | } | ||
| 105 | |||
| 106 | 2973 | int ff_set_sar(AVCodecContext *avctx, AVRational sar) | |
| 107 | { | ||
| 108 | 2973 | int ret = av_image_check_sar(avctx->width, avctx->height, sar); | |
| 109 | |||
| 110 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 2968 times.
|
2973 | if (ret < 0) { |
| 111 | 5 | av_log(avctx, AV_LOG_WARNING, "ignoring invalid SAR: %d/%d\n", | |
| 112 | sar.num, sar.den); | ||
| 113 | 5 | avctx->sample_aspect_ratio = (AVRational){ 0, 1 }; | |
| 114 | 5 | return ret; | |
| 115 | } else { | ||
| 116 | 2968 | avctx->sample_aspect_ratio = sar; | |
| 117 | } | ||
| 118 | 2968 | return 0; | |
| 119 | } | ||
| 120 | |||
| 121 | 2978 | int ff_side_data_update_matrix_encoding(AVFrame *frame, | |
| 122 | enum AVMatrixEncoding matrix_encoding) | ||
| 123 | { | ||
| 124 | AVFrameSideData *side_data; | ||
| 125 | enum AVMatrixEncoding *data; | ||
| 126 | |||
| 127 | 2978 | side_data = av_frame_get_side_data(frame, AV_FRAME_DATA_MATRIXENCODING); | |
| 128 |
1/2✓ Branch 0 taken 2978 times.
✗ Branch 1 not taken.
|
2978 | if (!side_data) |
| 129 | 2978 | side_data = av_frame_new_side_data(frame, AV_FRAME_DATA_MATRIXENCODING, | |
| 130 | sizeof(enum AVMatrixEncoding)); | ||
| 131 | |||
| 132 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 2978 times.
|
2978 | if (!side_data) |
| 133 | ✗ | return AVERROR(ENOMEM); | |
| 134 | |||
| 135 | 2978 | data = (enum AVMatrixEncoding*)side_data->data; | |
| 136 | 2978 | *data = matrix_encoding; | |
| 137 | |||
| 138 | 2978 | return 0; | |
| 139 | } | ||
| 140 | |||
| 141 | 10889 | void avcodec_align_dimensions2(AVCodecContext *s, int *width, int *height, | |
| 142 | int linesize_align[AV_NUM_DATA_POINTERS]) | ||
| 143 | { | ||
| 144 | int i; | ||
| 145 | 10889 | int w_align = 1; | |
| 146 | 10889 | int h_align = 1; | |
| 147 | 10889 | AVPixFmtDescriptor const *desc = av_pix_fmt_desc_get(s->pix_fmt); | |
| 148 | |||
| 149 |
1/2✓ Branch 0 taken 10889 times.
✗ Branch 1 not taken.
|
10889 | if (desc) { |
| 150 | 10889 | w_align = 1 << desc->log2_chroma_w; | |
| 151 | 10889 | h_align = 1 << desc->log2_chroma_h; | |
| 152 | } | ||
| 153 | |||
| 154 |
9/9✓ Branch 0 taken 9961 times.
✓ Branch 1 taken 26 times.
✓ Branch 2 taken 21 times.
✓ Branch 3 taken 38 times.
✓ Branch 4 taken 133 times.
✓ Branch 5 taken 81 times.
✓ Branch 6 taken 219 times.
✓ Branch 7 taken 23 times.
✓ Branch 8 taken 387 times.
|
10889 | switch (s->pix_fmt) { |
| 155 | 9961 | case AV_PIX_FMT_YUV420P: | |
| 156 | case AV_PIX_FMT_YUYV422: | ||
| 157 | case AV_PIX_FMT_YVYU422: | ||
| 158 | case AV_PIX_FMT_UYVY422: | ||
| 159 | case AV_PIX_FMT_YUV422P: | ||
| 160 | case AV_PIX_FMT_YUV440P: | ||
| 161 | case AV_PIX_FMT_YUV444P: | ||
| 162 | case AV_PIX_FMT_GBRP: | ||
| 163 | case AV_PIX_FMT_GBRAP: | ||
| 164 | case AV_PIX_FMT_GRAY8: | ||
| 165 | case AV_PIX_FMT_GRAY16BE: | ||
| 166 | case AV_PIX_FMT_GRAY16LE: | ||
| 167 | case AV_PIX_FMT_YUVJ420P: | ||
| 168 | case AV_PIX_FMT_YUVJ422P: | ||
| 169 | case AV_PIX_FMT_YUVJ440P: | ||
| 170 | case AV_PIX_FMT_YUVJ444P: | ||
| 171 | case AV_PIX_FMT_YUVA420P: | ||
| 172 | case AV_PIX_FMT_YUVA422P: | ||
| 173 | case AV_PIX_FMT_YUVA444P: | ||
| 174 | case AV_PIX_FMT_YUV420P9LE: | ||
| 175 | case AV_PIX_FMT_YUV420P9BE: | ||
| 176 | case AV_PIX_FMT_YUV420P10LE: | ||
| 177 | case AV_PIX_FMT_YUV420P10BE: | ||
| 178 | case AV_PIX_FMT_YUV420P12LE: | ||
| 179 | case AV_PIX_FMT_YUV420P12BE: | ||
| 180 | case AV_PIX_FMT_YUV420P14LE: | ||
| 181 | case AV_PIX_FMT_YUV420P14BE: | ||
| 182 | case AV_PIX_FMT_YUV420P16LE: | ||
| 183 | case AV_PIX_FMT_YUV420P16BE: | ||
| 184 | case AV_PIX_FMT_YUVA420P9LE: | ||
| 185 | case AV_PIX_FMT_YUVA420P9BE: | ||
| 186 | case AV_PIX_FMT_YUVA420P10LE: | ||
| 187 | case AV_PIX_FMT_YUVA420P10BE: | ||
| 188 | case AV_PIX_FMT_YUVA420P16LE: | ||
| 189 | case AV_PIX_FMT_YUVA420P16BE: | ||
| 190 | case AV_PIX_FMT_YUV422P9LE: | ||
| 191 | case AV_PIX_FMT_YUV422P9BE: | ||
| 192 | case AV_PIX_FMT_YUV422P10LE: | ||
| 193 | case AV_PIX_FMT_YUV422P10BE: | ||
| 194 | case AV_PIX_FMT_YUV422P12LE: | ||
| 195 | case AV_PIX_FMT_YUV422P12BE: | ||
| 196 | case AV_PIX_FMT_YUV422P14LE: | ||
| 197 | case AV_PIX_FMT_YUV422P14BE: | ||
| 198 | case AV_PIX_FMT_YUV422P16LE: | ||
| 199 | case AV_PIX_FMT_YUV422P16BE: | ||
| 200 | case AV_PIX_FMT_YUVA422P9LE: | ||
| 201 | case AV_PIX_FMT_YUVA422P9BE: | ||
| 202 | case AV_PIX_FMT_YUVA422P10LE: | ||
| 203 | case AV_PIX_FMT_YUVA422P10BE: | ||
| 204 | case AV_PIX_FMT_YUVA422P12LE: | ||
| 205 | case AV_PIX_FMT_YUVA422P12BE: | ||
| 206 | case AV_PIX_FMT_YUVA422P16LE: | ||
| 207 | case AV_PIX_FMT_YUVA422P16BE: | ||
| 208 | case AV_PIX_FMT_YUV440P10LE: | ||
| 209 | case AV_PIX_FMT_YUV440P10BE: | ||
| 210 | case AV_PIX_FMT_YUV440P12LE: | ||
| 211 | case AV_PIX_FMT_YUV440P12BE: | ||
| 212 | case AV_PIX_FMT_YUV444P9LE: | ||
| 213 | case AV_PIX_FMT_YUV444P9BE: | ||
| 214 | case AV_PIX_FMT_YUV444P10LE: | ||
| 215 | case AV_PIX_FMT_YUV444P10BE: | ||
| 216 | case AV_PIX_FMT_YUV444P12LE: | ||
| 217 | case AV_PIX_FMT_YUV444P12BE: | ||
| 218 | case AV_PIX_FMT_YUV444P14LE: | ||
| 219 | case AV_PIX_FMT_YUV444P14BE: | ||
| 220 | case AV_PIX_FMT_YUV444P16LE: | ||
| 221 | case AV_PIX_FMT_YUV444P16BE: | ||
| 222 | case AV_PIX_FMT_YUVA444P9LE: | ||
| 223 | case AV_PIX_FMT_YUVA444P9BE: | ||
| 224 | case AV_PIX_FMT_YUVA444P10LE: | ||
| 225 | case AV_PIX_FMT_YUVA444P10BE: | ||
| 226 | case AV_PIX_FMT_YUVA444P12LE: | ||
| 227 | case AV_PIX_FMT_YUVA444P12BE: | ||
| 228 | case AV_PIX_FMT_YUVA444P16LE: | ||
| 229 | case AV_PIX_FMT_YUVA444P16BE: | ||
| 230 | case AV_PIX_FMT_GBRP9LE: | ||
| 231 | case AV_PIX_FMT_GBRP9BE: | ||
| 232 | case AV_PIX_FMT_GBRP10LE: | ||
| 233 | case AV_PIX_FMT_GBRP10BE: | ||
| 234 | case AV_PIX_FMT_GBRP12LE: | ||
| 235 | case AV_PIX_FMT_GBRP12BE: | ||
| 236 | case AV_PIX_FMT_GBRP14LE: | ||
| 237 | case AV_PIX_FMT_GBRP14BE: | ||
| 238 | case AV_PIX_FMT_GBRP16LE: | ||
| 239 | case AV_PIX_FMT_GBRP16BE: | ||
| 240 | case AV_PIX_FMT_GBRAP12LE: | ||
| 241 | case AV_PIX_FMT_GBRAP12BE: | ||
| 242 | case AV_PIX_FMT_GBRAP16LE: | ||
| 243 | case AV_PIX_FMT_GBRAP16BE: | ||
| 244 | 9961 | w_align = 16; //FIXME assume 16 pixel per macroblock | |
| 245 | 9961 | h_align = 16 * 2; // interlaced needs 2 macroblocks height | |
| 246 |
2/2✓ Branch 0 taken 3 times.
✓ Branch 1 taken 9958 times.
|
9961 | if (s->codec_id == AV_CODEC_ID_BINKVIDEO) |
| 247 | 3 | w_align = 16*2; | |
| 248 | 9961 | break; | |
| 249 | 26 | case AV_PIX_FMT_YUV411P: | |
| 250 | case AV_PIX_FMT_YUVJ411P: | ||
| 251 | case AV_PIX_FMT_UYYVYY411: | ||
| 252 | 26 | w_align = 32; | |
| 253 | 26 | h_align = 16 * 2; | |
| 254 | 26 | break; | |
| 255 | 21 | case AV_PIX_FMT_YUV410P: | |
| 256 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 11 times.
|
21 | if (s->codec_id == AV_CODEC_ID_SVQ1) { |
| 257 | 10 | w_align = 64; | |
| 258 | 10 | h_align = 64; | |
| 259 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 11 times.
|
11 | } else if (s->codec_id == AV_CODEC_ID_SNOW) { |
| 260 | ✗ | w_align = 16; | |
| 261 | ✗ | h_align = 16; | |
| 262 | } | ||
| 263 | 21 | break; | |
| 264 | 38 | case AV_PIX_FMT_RGB555: | |
| 265 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 33 times.
|
38 | if (s->codec_id == AV_CODEC_ID_RPZA) { |
| 266 | 5 | w_align = 4; | |
| 267 | 5 | h_align = 4; | |
| 268 | } | ||
| 269 |
2/2✓ Branch 0 taken 1 times.
✓ Branch 1 taken 37 times.
|
38 | if (s->codec_id == AV_CODEC_ID_INTERPLAY_VIDEO) { |
| 270 | 1 | w_align = 8; | |
| 271 | 1 | h_align = 8; | |
| 272 | } | ||
| 273 | 38 | break; | |
| 274 | 133 | case AV_PIX_FMT_PAL8: | |
| 275 | case AV_PIX_FMT_BGR8: | ||
| 276 | case AV_PIX_FMT_RGB8: | ||
| 277 |
2/2✓ Branch 0 taken 128 times.
✓ Branch 1 taken 5 times.
|
133 | if (s->codec_id == AV_CODEC_ID_SMC || |
| 278 |
2/2✓ Branch 0 taken 1 times.
✓ Branch 1 taken 127 times.
|
128 | s->codec_id == AV_CODEC_ID_CINEPAK) { |
| 279 | 6 | w_align = 4; | |
| 280 | 6 | h_align = 4; | |
| 281 | } | ||
| 282 |
2/2✓ Branch 0 taken 132 times.
✓ Branch 1 taken 1 times.
|
133 | if (s->codec_id == AV_CODEC_ID_JV || |
| 283 |
1/2✓ Branch 0 taken 132 times.
✗ Branch 1 not taken.
|
132 | s->codec_id == AV_CODEC_ID_ARGO || |
| 284 |
2/2✓ Branch 0 taken 1 times.
✓ Branch 1 taken 131 times.
|
132 | s->codec_id == AV_CODEC_ID_INTERPLAY_VIDEO) { |
| 285 | 2 | w_align = 8; | |
| 286 | 2 | h_align = 8; | |
| 287 | } | ||
| 288 |
1/2✓ Branch 0 taken 133 times.
✗ Branch 1 not taken.
|
133 | if (s->codec_id == AV_CODEC_ID_MJPEG || |
| 289 |
1/2✓ Branch 0 taken 133 times.
✗ Branch 1 not taken.
|
133 | s->codec_id == AV_CODEC_ID_MJPEGB || |
| 290 |
1/2✓ Branch 0 taken 133 times.
✗ Branch 1 not taken.
|
133 | s->codec_id == AV_CODEC_ID_LJPEG || |
| 291 |
1/2✓ Branch 0 taken 133 times.
✗ Branch 1 not taken.
|
133 | s->codec_id == AV_CODEC_ID_SMVJPEG || |
| 292 |
1/2✓ Branch 0 taken 133 times.
✗ Branch 1 not taken.
|
133 | s->codec_id == AV_CODEC_ID_AMV || |
| 293 |
1/2✓ Branch 0 taken 133 times.
✗ Branch 1 not taken.
|
133 | s->codec_id == AV_CODEC_ID_SP5X || |
| 294 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 125 times.
|
133 | s->codec_id == AV_CODEC_ID_JPEGLS) { |
| 295 | 8 | w_align = 8; | |
| 296 | 8 | h_align = 2*8; | |
| 297 | } | ||
| 298 | 133 | break; | |
| 299 | 81 | case AV_PIX_FMT_BGR24: | |
| 300 |
2/2✓ Branch 0 taken 80 times.
✓ Branch 1 taken 1 times.
|
81 | if ((s->codec_id == AV_CODEC_ID_MSZH) || |
| 301 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 75 times.
|
80 | (s->codec_id == AV_CODEC_ID_ZLIB)) { |
| 302 | 6 | w_align = 4; | |
| 303 | 6 | h_align = 4; | |
| 304 | } | ||
| 305 | 81 | break; | |
| 306 | 219 | case AV_PIX_FMT_RGB24: | |
| 307 |
2/2✓ Branch 0 taken 7 times.
✓ Branch 1 taken 212 times.
|
219 | if (s->codec_id == AV_CODEC_ID_CINEPAK) { |
| 308 | 7 | w_align = 4; | |
| 309 | 7 | h_align = 4; | |
| 310 | } | ||
| 311 | 219 | break; | |
| 312 | 23 | case AV_PIX_FMT_BGR0: | |
| 313 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 23 times.
|
23 | if (s->codec_id == AV_CODEC_ID_ARGO) { |
| 314 | ✗ | w_align = 8; | |
| 315 | ✗ | h_align = 8; | |
| 316 | } | ||
| 317 | 23 | break; | |
| 318 | 387 | default: | |
| 319 | 387 | break; | |
| 320 | } | ||
| 321 | |||
| 322 |
2/2✓ Branch 0 taken 2 times.
✓ Branch 1 taken 10887 times.
|
10889 | if (s->codec_id == AV_CODEC_ID_IFF_ILBM) { |
| 323 | 2 | w_align = FFMAX(w_align, 16); | |
| 324 | } | ||
| 325 | |||
| 326 | 10889 | *width = FFALIGN(*width, w_align); | |
| 327 | 10889 | *height = FFALIGN(*height, h_align); | |
| 328 |
4/4✓ Branch 0 taken 10294 times.
✓ Branch 1 taken 595 times.
✓ Branch 2 taken 10293 times.
✓ Branch 3 taken 1 times.
|
10889 | if (s->codec_id == AV_CODEC_ID_H264 || s->lowres || |
| 329 |
4/4✓ Branch 0 taken 10278 times.
✓ Branch 1 taken 15 times.
✓ Branch 2 taken 10271 times.
✓ Branch 3 taken 7 times.
|
10293 | s->codec_id == AV_CODEC_ID_VC1 || s->codec_id == AV_CODEC_ID_WMV3 || |
| 330 |
4/4✓ Branch 0 taken 10270 times.
✓ Branch 1 taken 1 times.
✓ Branch 2 taken 10261 times.
✓ Branch 3 taken 9 times.
|
10271 | s->codec_id == AV_CODEC_ID_VP5 || s->codec_id == AV_CODEC_ID_VP6 || |
| 331 |
4/4✓ Branch 0 taken 10259 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 10257 times.
|
10261 | s->codec_id == AV_CODEC_ID_VP6F || s->codec_id == AV_CODEC_ID_VP6A |
| 332 | ) { | ||
| 333 | // some of the optimized chroma MC reads one line too much | ||
| 334 | // which is also done in mpeg decoders with lowres > 0 | ||
| 335 | 632 | *height += 2; | |
| 336 | |||
| 337 | // H.264 uses edge emulation for out of frame motion vectors, for this | ||
| 338 | // it requires a temporary area large enough to hold a 21x21 block, | ||
| 339 | // increasing width ensure that the temporary area is large enough, | ||
| 340 | // the next rounded up width is 32 | ||
| 341 | 632 | *width = FFMAX(*width, 32); | |
| 342 | } | ||
| 343 |
2/2✓ Branch 0 taken 2618 times.
✓ Branch 1 taken 8271 times.
|
10889 | if (s->codec_id == AV_CODEC_ID_SVQ3) { |
| 344 | 2618 | *width = FFMAX(*width, 32); | |
| 345 | } | ||
| 346 | |||
| 347 |
2/2✓ Branch 0 taken 43556 times.
✓ Branch 1 taken 10889 times.
|
54445 | for (i = 0; i < 4; i++) |
| 348 | 43556 | linesize_align[i] = STRIDE_ALIGN; | |
| 349 | 10889 | } | |
| 350 | |||
| 351 | ✗ | void avcodec_align_dimensions(AVCodecContext *s, int *width, int *height) | |
| 352 | { | ||
| 353 | ✗ | const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(s->pix_fmt); | |
| 354 | ✗ | int chroma_shift = desc->log2_chroma_w; | |
| 355 | int linesize_align[AV_NUM_DATA_POINTERS]; | ||
| 356 | int align; | ||
| 357 | |||
| 358 | ✗ | avcodec_align_dimensions2(s, width, height, linesize_align); | |
| 359 | ✗ | align = FFMAX(linesize_align[0], linesize_align[3]); | |
| 360 | ✗ | linesize_align[1] <<= chroma_shift; | |
| 361 | ✗ | linesize_align[2] <<= chroma_shift; | |
| 362 | ✗ | align = FFMAX3(align, linesize_align[1], linesize_align[2]); | |
| 363 | ✗ | *width = FFALIGN(*width, align); | |
| 364 | ✗ | } | |
| 365 | |||
| 366 | ✗ | int avcodec_fill_audio_frame(AVFrame *frame, int nb_channels, | |
| 367 | enum AVSampleFormat sample_fmt, const uint8_t *buf, | ||
| 368 | int buf_size, int align) | ||
| 369 | { | ||
| 370 | ✗ | int ch, planar, needed_size, ret = 0; | |
| 371 | |||
| 372 | ✗ | needed_size = av_samples_get_buffer_size(NULL, nb_channels, | |
| 373 | frame->nb_samples, sample_fmt, | ||
| 374 | align); | ||
| 375 | ✗ | if (buf_size < needed_size) | |
| 376 | ✗ | return AVERROR(EINVAL); | |
| 377 | |||
| 378 | ✗ | planar = av_sample_fmt_is_planar(sample_fmt); | |
| 379 | ✗ | if (planar && nb_channels > AV_NUM_DATA_POINTERS) { | |
| 380 | ✗ | if (!FF_ALLOCZ_TYPED_ARRAY(frame->extended_data, nb_channels)) | |
| 381 | ✗ | return AVERROR(ENOMEM); | |
| 382 | } else { | ||
| 383 | ✗ | frame->extended_data = frame->data; | |
| 384 | } | ||
| 385 | |||
| 386 | ✗ | if ((ret = av_samples_fill_arrays(frame->extended_data, &frame->linesize[0], | |
| 387 | (uint8_t *)(intptr_t)buf, nb_channels, frame->nb_samples, | ||
| 388 | sample_fmt, align)) < 0) { | ||
| 389 | ✗ | if (frame->extended_data != frame->data) | |
| 390 | ✗ | av_freep(&frame->extended_data); | |
| 391 | ✗ | return ret; | |
| 392 | } | ||
| 393 | ✗ | if (frame->extended_data != frame->data) { | |
| 394 | ✗ | for (ch = 0; ch < AV_NUM_DATA_POINTERS; ch++) | |
| 395 | ✗ | frame->data[ch] = frame->extended_data[ch]; | |
| 396 | } | ||
| 397 | |||
| 398 | ✗ | return ret; | |
| 399 | } | ||
| 400 | |||
| 401 | |||
| 402 | 204924 | int avpriv_codec_get_cap_skip_frame_fill_param(const AVCodec *codec){ | |
| 403 | 204924 | return !!(ffcodec(codec)->caps_internal & FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM); | |
| 404 | } | ||
| 405 | |||
| 406 | 30055 | const char *avcodec_get_name(enum AVCodecID id) | |
| 407 | { | ||
| 408 | const AVCodecDescriptor *cd; | ||
| 409 | const AVCodec *codec; | ||
| 410 | |||
| 411 |
2/2✓ Branch 0 taken 241 times.
✓ Branch 1 taken 29814 times.
|
30055 | if (id == AV_CODEC_ID_NONE) |
| 412 | 241 | return "none"; | |
| 413 | 29814 | cd = avcodec_descriptor_get(id); | |
| 414 |
2/2✓ Branch 0 taken 29810 times.
✓ Branch 1 taken 4 times.
|
29814 | if (cd) |
| 415 | 29810 | return cd->name; | |
| 416 | 4 | av_log(NULL, AV_LOG_WARNING, "Codec 0x%x is not in the full list.\n", id); | |
| 417 | 4 | codec = avcodec_find_decoder(id); | |
| 418 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 4 times.
|
4 | if (codec) |
| 419 | ✗ | return codec->name; | |
| 420 | 4 | codec = avcodec_find_encoder(id); | |
| 421 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 4 times.
|
4 | if (codec) |
| 422 | ✗ | return codec->name; | |
| 423 | 4 | return "unknown_codec"; | |
| 424 | } | ||
| 425 | |||
| 426 | ✗ | const char *av_get_profile_name(const AVCodec *codec, int profile) | |
| 427 | { | ||
| 428 | const AVProfile *p; | ||
| 429 | ✗ | if (profile == AV_PROFILE_UNKNOWN || !codec->profiles) | |
| 430 | ✗ | return NULL; | |
| 431 | |||
| 432 | ✗ | for (p = codec->profiles; p->profile != AV_PROFILE_UNKNOWN; p++) | |
| 433 | ✗ | if (p->profile == profile) | |
| 434 | ✗ | return p->name; | |
| 435 | |||
| 436 | ✗ | return NULL; | |
| 437 | } | ||
| 438 | |||
| 439 | 17713 | const char *avcodec_profile_name(enum AVCodecID codec_id, int profile) | |
| 440 | { | ||
| 441 | 17713 | const AVCodecDescriptor *desc = avcodec_descriptor_get(codec_id); | |
| 442 | const AVProfile *p; | ||
| 443 | |||
| 444 |
5/6✓ Branch 0 taken 2235 times.
✓ Branch 1 taken 15478 times.
✓ Branch 2 taken 2235 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 146 times.
✓ Branch 5 taken 2089 times.
|
17713 | if (profile == AV_PROFILE_UNKNOWN || !desc || !desc->profiles) |
| 445 | 15624 | return NULL; | |
| 446 | |||
| 447 |
2/2✓ Branch 0 taken 5280 times.
✓ Branch 1 taken 34 times.
|
5314 | for (p = desc->profiles; p->profile != AV_PROFILE_UNKNOWN; p++) |
| 448 |
2/2✓ Branch 0 taken 2055 times.
✓ Branch 1 taken 3225 times.
|
5280 | if (p->profile == profile) |
| 449 | 2055 | return p->name; | |
| 450 | |||
| 451 | 34 | return NULL; | |
| 452 | } | ||
| 453 | |||
| 454 | 787277 | int av_get_exact_bits_per_sample(enum AVCodecID codec_id) | |
| 455 | { | ||
| 456 |
8/8✓ Branch 0 taken 24 times.
✓ Branch 1 taken 11406 times.
✓ Branch 2 taken 5704 times.
✓ Branch 3 taken 495693 times.
✓ Branch 4 taken 15503 times.
✓ Branch 5 taken 23077 times.
✓ Branch 6 taken 9512 times.
✓ Branch 7 taken 226358 times.
|
787277 | switch (codec_id) { |
| 457 | 24 | case AV_CODEC_ID_DFPWM: | |
| 458 | 24 | return 1; | |
| 459 | 11406 | case AV_CODEC_ID_8SVX_EXP: | |
| 460 | case AV_CODEC_ID_8SVX_FIB: | ||
| 461 | case AV_CODEC_ID_ADPCM_ARGO: | ||
| 462 | case AV_CODEC_ID_ADPCM_CT: | ||
| 463 | case AV_CODEC_ID_ADPCM_IMA_ALP: | ||
| 464 | case AV_CODEC_ID_ADPCM_IMA_AMV: | ||
| 465 | case AV_CODEC_ID_ADPCM_IMA_APC: | ||
| 466 | case AV_CODEC_ID_ADPCM_IMA_APM: | ||
| 467 | case AV_CODEC_ID_ADPCM_IMA_EA_SEAD: | ||
| 468 | case AV_CODEC_ID_ADPCM_IMA_MAGIX: | ||
| 469 | case AV_CODEC_ID_ADPCM_IMA_OKI: | ||
| 470 | case AV_CODEC_ID_ADPCM_IMA_WS: | ||
| 471 | case AV_CODEC_ID_ADPCM_IMA_SSI: | ||
| 472 | case AV_CODEC_ID_ADPCM_G722: | ||
| 473 | case AV_CODEC_ID_ADPCM_YAMAHA: | ||
| 474 | case AV_CODEC_ID_ADPCM_AICA: | ||
| 475 | 11406 | return 4; | |
| 476 | 5704 | case AV_CODEC_ID_DSD_LSBF: | |
| 477 | case AV_CODEC_ID_DSD_MSBF: | ||
| 478 | case AV_CODEC_ID_DSD_LSBF_PLANAR: | ||
| 479 | case AV_CODEC_ID_DSD_MSBF_PLANAR: | ||
| 480 | case AV_CODEC_ID_PCM_ALAW: | ||
| 481 | case AV_CODEC_ID_PCM_MULAW: | ||
| 482 | case AV_CODEC_ID_PCM_VIDC: | ||
| 483 | case AV_CODEC_ID_PCM_S8: | ||
| 484 | case AV_CODEC_ID_PCM_S8_PLANAR: | ||
| 485 | case AV_CODEC_ID_PCM_SGA: | ||
| 486 | case AV_CODEC_ID_PCM_U8: | ||
| 487 | case AV_CODEC_ID_SDX2_DPCM: | ||
| 488 | case AV_CODEC_ID_CBD2_DPCM: | ||
| 489 | case AV_CODEC_ID_DERF_DPCM: | ||
| 490 | case AV_CODEC_ID_WADY_DPCM: | ||
| 491 | case AV_CODEC_ID_ADPCM_CIRCUS: | ||
| 492 | 5704 | return 8; | |
| 493 | 495693 | case AV_CODEC_ID_PCM_S16BE: | |
| 494 | case AV_CODEC_ID_PCM_S16BE_PLANAR: | ||
| 495 | case AV_CODEC_ID_PCM_S16LE: | ||
| 496 | case AV_CODEC_ID_PCM_S16LE_PLANAR: | ||
| 497 | case AV_CODEC_ID_PCM_U16BE: | ||
| 498 | case AV_CODEC_ID_PCM_U16LE: | ||
| 499 | 495693 | return 16; | |
| 500 | 15503 | case AV_CODEC_ID_PCM_S24DAUD: | |
| 501 | case AV_CODEC_ID_PCM_S24BE: | ||
| 502 | case AV_CODEC_ID_PCM_S24LE: | ||
| 503 | case AV_CODEC_ID_PCM_S24LE_PLANAR: | ||
| 504 | case AV_CODEC_ID_PCM_U24BE: | ||
| 505 | case AV_CODEC_ID_PCM_U24LE: | ||
| 506 | 15503 | return 24; | |
| 507 | 23077 | case AV_CODEC_ID_PCM_S32BE: | |
| 508 | case AV_CODEC_ID_PCM_S32LE: | ||
| 509 | case AV_CODEC_ID_PCM_S32LE_PLANAR: | ||
| 510 | case AV_CODEC_ID_PCM_U32BE: | ||
| 511 | case AV_CODEC_ID_PCM_U32LE: | ||
| 512 | case AV_CODEC_ID_PCM_F32BE: | ||
| 513 | case AV_CODEC_ID_PCM_F32LE: | ||
| 514 | case AV_CODEC_ID_PCM_F24LE: | ||
| 515 | case AV_CODEC_ID_PCM_F16LE: | ||
| 516 | 23077 | return 32; | |
| 517 | 9512 | case AV_CODEC_ID_PCM_F64BE: | |
| 518 | case AV_CODEC_ID_PCM_F64LE: | ||
| 519 | case AV_CODEC_ID_PCM_S64BE: | ||
| 520 | case AV_CODEC_ID_PCM_S64LE: | ||
| 521 | 9512 | return 64; | |
| 522 | 226358 | default: | |
| 523 | 226358 | return 0; | |
| 524 | } | ||
| 525 | } | ||
| 526 | |||
| 527 | 26 | enum AVCodecID av_get_pcm_codec(enum AVSampleFormat fmt, int be) | |
| 528 | { | ||
| 529 | static const enum AVCodecID map[][2] = { | ||
| 530 | [AV_SAMPLE_FMT_U8 ] = { AV_CODEC_ID_PCM_U8, AV_CODEC_ID_PCM_U8 }, | ||
| 531 | [AV_SAMPLE_FMT_S16 ] = { AV_CODEC_ID_PCM_S16LE, AV_CODEC_ID_PCM_S16BE }, | ||
| 532 | [AV_SAMPLE_FMT_S32 ] = { AV_CODEC_ID_PCM_S32LE, AV_CODEC_ID_PCM_S32BE }, | ||
| 533 | [AV_SAMPLE_FMT_FLT ] = { AV_CODEC_ID_PCM_F32LE, AV_CODEC_ID_PCM_F32BE }, | ||
| 534 | [AV_SAMPLE_FMT_DBL ] = { AV_CODEC_ID_PCM_F64LE, AV_CODEC_ID_PCM_F64BE }, | ||
| 535 | [AV_SAMPLE_FMT_U8P ] = { AV_CODEC_ID_PCM_U8, AV_CODEC_ID_PCM_U8 }, | ||
| 536 | [AV_SAMPLE_FMT_S16P] = { AV_CODEC_ID_PCM_S16LE, AV_CODEC_ID_PCM_S16BE }, | ||
| 537 | [AV_SAMPLE_FMT_S32P] = { AV_CODEC_ID_PCM_S32LE, AV_CODEC_ID_PCM_S32BE }, | ||
| 538 | [AV_SAMPLE_FMT_S64P] = { AV_CODEC_ID_PCM_S64LE, AV_CODEC_ID_PCM_S64BE }, | ||
| 539 | [AV_SAMPLE_FMT_FLTP] = { AV_CODEC_ID_PCM_F32LE, AV_CODEC_ID_PCM_F32BE }, | ||
| 540 | [AV_SAMPLE_FMT_DBLP] = { AV_CODEC_ID_PCM_F64LE, AV_CODEC_ID_PCM_F64BE }, | ||
| 541 | }; | ||
| 542 |
2/4✓ Branch 0 taken 26 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 26 times.
|
26 | if (fmt < 0 || fmt >= FF_ARRAY_ELEMS(map)) |
| 543 | ✗ | return AV_CODEC_ID_NONE; | |
| 544 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 26 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
26 | if (be < 0 || be > 1) |
| 545 | 26 | be = AV_NE(1, 0); | |
| 546 | 26 | return map[fmt][be]; | |
| 547 | } | ||
| 548 | |||
| 549 | 255748 | int av_get_bits_per_sample(enum AVCodecID codec_id) | |
| 550 | { | ||
| 551 |
5/5✓ Branch 0 taken 17 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 3 times.
✓ Branch 3 taken 74 times.
✓ Branch 4 taken 255649 times.
|
255748 | switch (codec_id) { |
| 552 | 17 | case AV_CODEC_ID_DFPWM: | |
| 553 | 17 | return 1; | |
| 554 | 5 | case AV_CODEC_ID_ADPCM_SBPRO_2: | |
| 555 | case AV_CODEC_ID_G728: | ||
| 556 | 5 | return 2; | |
| 557 | 3 | case AV_CODEC_ID_ADPCM_SBPRO_3: | |
| 558 | 3 | return 3; | |
| 559 | 74 | case AV_CODEC_ID_ADPCM_SBPRO_4: | |
| 560 | case AV_CODEC_ID_ADPCM_IMA_WAV: | ||
| 561 | case AV_CODEC_ID_ADPCM_IMA_XBOX: | ||
| 562 | case AV_CODEC_ID_ADPCM_IMA_QT: | ||
| 563 | case AV_CODEC_ID_ADPCM_SWF: | ||
| 564 | case AV_CODEC_ID_ADPCM_MS: | ||
| 565 | 74 | return 4; | |
| 566 | 255649 | default: | |
| 567 | 255649 | return av_get_exact_bits_per_sample(codec_id); | |
| 568 | } | ||
| 569 | } | ||
| 570 | |||
| 571 | 521967 | static int get_audio_frame_duration(enum AVCodecID id, int sr, int ch, int ba, | |
| 572 | uint32_t tag, int bits_per_coded_sample, int64_t bitrate, | ||
| 573 | uint8_t * extradata, int frame_size, int frame_bytes) | ||
| 574 | { | ||
| 575 | 521967 | int bps = av_get_exact_bits_per_sample(id); | |
| 576 |
4/4✓ Branch 0 taken 364179 times.
✓ Branch 1 taken 157788 times.
✓ Branch 2 taken 363874 times.
✓ Branch 3 taken 305 times.
|
521967 | int framecount = (ba > 0 && frame_bytes / ba > 0) ? frame_bytes / ba : 1; |
| 577 | |||
| 578 | /* codecs with an exact constant bits per sample */ | ||
| 579 |
7/10✓ Branch 0 taken 306890 times.
✓ Branch 1 taken 215077 times.
✓ Branch 2 taken 306890 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 306854 times.
✓ Branch 5 taken 36 times.
✓ Branch 6 taken 306854 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 306854 times.
✗ Branch 9 not taken.
|
521967 | if (bps > 0 && ch > 0 && frame_bytes > 0 && ch < 32768 && bps < 32768) |
| 580 | 306854 | return (frame_bytes * 8LL) / (bps * ch); | |
| 581 | 215113 | bps = bits_per_coded_sample; | |
| 582 | |||
| 583 | /* codecs with a fixed packet duration */ | ||
| 584 |
11/13✓ Branch 0 taken 12407 times.
✓ Branch 1 taken 8274 times.
✓ Branch 2 taken 600 times.
✓ Branch 3 taken 5704 times.
✓ Branch 4 taken 1124 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 8588 times.
✓ Branch 7 taken 4332 times.
✓ Branch 8 taken 2192 times.
✓ Branch 9 taken 18574 times.
✓ Branch 10 taken 2523 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 150795 times.
|
215113 | switch (id) { |
| 585 | 12407 | case AV_CODEC_ID_ADPCM_ADX: return 32; | |
| 586 | 8274 | case AV_CODEC_ID_ADPCM_IMA_QT: return 64; | |
| 587 | 600 | case AV_CODEC_ID_ADPCM_EA_XAS: return 128; | |
| 588 | 5704 | case AV_CODEC_ID_AMR_NB: | |
| 589 | case AV_CODEC_ID_EVRC: | ||
| 590 | case AV_CODEC_ID_GSM: | ||
| 591 | case AV_CODEC_ID_QCELP: | ||
| 592 | 5704 | case AV_CODEC_ID_RA_288: return 160; | |
| 593 | 1124 | case AV_CODEC_ID_AMR_WB: | |
| 594 | 1124 | case AV_CODEC_ID_GSM_MS: return 320; | |
| 595 | ✗ | case AV_CODEC_ID_MP1: return 384; | |
| 596 | 8588 | case AV_CODEC_ID_ATRAC1: return 512; | |
| 597 | 4332 | case AV_CODEC_ID_ATRAC9: | |
| 598 | case AV_CODEC_ID_ATRAC3: | ||
| 599 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 4332 times.
|
4332 | if (framecount > INT_MAX/1024) |
| 600 | ✗ | return 0; | |
| 601 | 4332 | return 1024 * framecount; | |
| 602 | 2192 | case AV_CODEC_ID_ATRAC3P: return 2048; | |
| 603 | 18574 | case AV_CODEC_ID_MP2: | |
| 604 | 18574 | case AV_CODEC_ID_MUSEPACK7: return 1152; | |
| 605 | 2523 | case AV_CODEC_ID_AC3: return 1536; | |
| 606 | ✗ | case AV_CODEC_ID_FTR: return 1024; | |
| 607 | } | ||
| 608 | |||
| 609 |
2/2✓ Branch 0 taken 147141 times.
✓ Branch 1 taken 3654 times.
|
150795 | if (sr > 0) { |
| 610 | /* calc from sample rate */ | ||
| 611 |
2/2✓ Branch 0 taken 17 times.
✓ Branch 1 taken 147124 times.
|
147141 | if (id == AV_CODEC_ID_TTA) |
| 612 | 17 | return 256ll * sr / 245; | |
| 613 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 147124 times.
|
147124 | else if (id == AV_CODEC_ID_DST) |
| 614 | ✗ | return 588ll * sr / 44100; | |
| 615 |
2/2✓ Branch 0 taken 66 times.
✓ Branch 1 taken 147058 times.
|
147124 | else if (id == AV_CODEC_ID_BINKAUDIO_DCT) { |
| 616 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 66 times.
|
66 | if (sr / 22050 > 22) |
| 617 | ✗ | return 0; | |
| 618 | 66 | return (480 << (sr / 22050)); | |
| 619 | } | ||
| 620 | |||
| 621 |
2/2✓ Branch 0 taken 6703 times.
✓ Branch 1 taken 140355 times.
|
147058 | if (id == AV_CODEC_ID_MP3) |
| 622 |
2/2✓ Branch 0 taken 224 times.
✓ Branch 1 taken 6479 times.
|
6703 | return sr <= 24000 ? 576 : 1152; |
| 623 | } | ||
| 624 | |||
| 625 |
2/2✓ Branch 0 taken 41812 times.
✓ Branch 1 taken 102197 times.
|
144009 | if (ba > 0) { |
| 626 | /* calc from block_align */ | ||
| 627 |
2/2✓ Branch 0 taken 7260 times.
✓ Branch 1 taken 34552 times.
|
41812 | if (id == AV_CODEC_ID_SIPR) { |
| 628 |
4/5✓ Branch 0 taken 3261 times.
✓ Branch 1 taken 1983 times.
✓ Branch 2 taken 1680 times.
✓ Branch 3 taken 336 times.
✗ Branch 4 not taken.
|
7260 | switch (ba) { |
| 629 | 3261 | case 20: return 160; | |
| 630 | 1983 | case 19: return 144; | |
| 631 | 1680 | case 29: return 288; | |
| 632 | 336 | case 37: return 480; | |
| 633 | } | ||
| 634 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 34552 times.
|
34552 | } else if (id == AV_CODEC_ID_ILBC) { |
| 635 | ✗ | switch (ba) { | |
| 636 | ✗ | case 38: return 160; | |
| 637 | ✗ | case 50: return 240; | |
| 638 | } | ||
| 639 | } | ||
| 640 | } | ||
| 641 | |||
| 642 |
2/2✓ Branch 0 taken 133023 times.
✓ Branch 1 taken 3726 times.
|
136749 | if (frame_bytes > 0) { |
| 643 | /* calc from frame_bytes only */ | ||
| 644 |
2/2✓ Branch 0 taken 721 times.
✓ Branch 1 taken 132302 times.
|
133023 | if (id == AV_CODEC_ID_TRUESPEECH) |
| 645 | 721 | return 240 * (frame_bytes / 32); | |
| 646 |
2/2✓ Branch 0 taken 2074 times.
✓ Branch 1 taken 130228 times.
|
132302 | if (id == AV_CODEC_ID_NELLYMOSER) |
| 647 | 2074 | return 256 * (frame_bytes / 64); | |
| 648 |
2/2✓ Branch 0 taken 1057 times.
✓ Branch 1 taken 129171 times.
|
130228 | if (id == AV_CODEC_ID_RA_144) |
| 649 | 1057 | return 160 * (frame_bytes / 20); | |
| 650 |
2/2✓ Branch 0 taken 460 times.
✓ Branch 1 taken 128711 times.
|
129171 | if (id == AV_CODEC_ID_APTX) |
| 651 | 460 | return 4 * (frame_bytes / 4); | |
| 652 |
2/2✓ Branch 0 taken 460 times.
✓ Branch 1 taken 128251 times.
|
128711 | if (id == AV_CODEC_ID_APTX_HD) |
| 653 | 460 | return 4 * (frame_bytes / 6); | |
| 654 | |||
| 655 |
2/2✓ Branch 0 taken 46321 times.
✓ Branch 1 taken 81930 times.
|
128251 | if (bps > 0) { |
| 656 | /* calc from frame_bytes and bits_per_coded_sample */ | ||
| 657 |
3/4✓ Branch 0 taken 45861 times.
✓ Branch 1 taken 460 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 45861 times.
|
46321 | if (id == AV_CODEC_ID_ADPCM_G726 || id == AV_CODEC_ID_ADPCM_G726LE) |
| 658 | 460 | return frame_bytes * 8 / bps; | |
| 659 | } | ||
| 660 | |||
| 661 |
3/4✓ Branch 0 taken 127665 times.
✓ Branch 1 taken 126 times.
✓ Branch 2 taken 127665 times.
✗ Branch 3 not taken.
|
127791 | if (ch > 0 && ch < INT_MAX/16) { |
| 662 | /* calc from frame_bytes and channels */ | ||
| 663 |
12/19✗ Branch 0 not taken.
✗ Branch 1 not taken.
✓ Branch 2 taken 48 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 33 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 452 times.
✓ Branch 7 taken 1951 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 3580 times.
✓ Branch 10 taken 222 times.
✓ Branch 11 taken 327 times.
✓ Branch 12 taken 680 times.
✓ Branch 13 taken 112 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 319 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 1311 times.
✓ Branch 18 taken 118630 times.
|
127665 | switch (id) { |
| 664 | ✗ | case AV_CODEC_ID_FASTAUDIO: | |
| 665 | ✗ | return frame_bytes / (40 * ch) * 256; | |
| 666 | ✗ | case AV_CODEC_ID_ADPCM_IMA_MOFLEX: | |
| 667 | ✗ | return (frame_bytes - 4 * ch) / (128 * ch) * 256; | |
| 668 | 48 | case AV_CODEC_ID_ADPCM_AFC: | |
| 669 | 48 | return frame_bytes / (9 * ch) * 16; | |
| 670 | ✗ | case AV_CODEC_ID_ADPCM_N64: | |
| 671 | ✗ | frame_bytes /= 9 * ch; | |
| 672 | ✗ | if (frame_bytes > INT_MAX / 16) | |
| 673 | ✗ | return 0; | |
| 674 | ✗ | return frame_bytes * 16; | |
| 675 | 33 | case AV_CODEC_ID_ADPCM_PSX: | |
| 676 | case AV_CODEC_ID_ADPCM_DTK: | ||
| 677 | 33 | frame_bytes /= 16 * ch; | |
| 678 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 33 times.
|
33 | if (frame_bytes > INT_MAX / 28) |
| 679 | ✗ | return 0; | |
| 680 | 33 | return frame_bytes * 28; | |
| 681 | ✗ | case AV_CODEC_ID_ADPCM_PSXC: | |
| 682 | ✗ | frame_bytes = (frame_bytes - 1) / ch; | |
| 683 | ✗ | if (frame_bytes > INT_MAX / 2) | |
| 684 | ✗ | return 0; | |
| 685 | ✗ | return frame_bytes * 2; | |
| 686 | 452 | case AV_CODEC_ID_ADPCM_4XM: | |
| 687 | case AV_CODEC_ID_ADPCM_IMA_ACORN: | ||
| 688 | case AV_CODEC_ID_ADPCM_IMA_DAT4: | ||
| 689 | case AV_CODEC_ID_ADPCM_IMA_ISS: | ||
| 690 | case AV_CODEC_ID_ADPCM_IMA_PDA: | ||
| 691 | 452 | return (frame_bytes - 4 * ch) * 2 / ch; | |
| 692 | 1951 | case AV_CODEC_ID_ADPCM_IMA_SMJPEG: | |
| 693 | 1951 | return (frame_bytes - 4) * 2 / ch; | |
| 694 | ✗ | case AV_CODEC_ID_ADPCM_IMA_AMV: | |
| 695 | ✗ | return (frame_bytes - 8) * 2; | |
| 696 | 3580 | case AV_CODEC_ID_ADPCM_THP: | |
| 697 | case AV_CODEC_ID_ADPCM_THP_LE: | ||
| 698 |
2/2✓ Branch 0 taken 3530 times.
✓ Branch 1 taken 50 times.
|
3580 | if (extradata) |
| 699 | 3530 | return frame_bytes * 14LL / (8 * ch); | |
| 700 | 50 | break; | |
| 701 | 222 | case AV_CODEC_ID_ADPCM_XA: | |
| 702 | 222 | return (frame_bytes / 128) * 224 / ch; | |
| 703 | 327 | case AV_CODEC_ID_INTERPLAY_DPCM: | |
| 704 | 327 | return (frame_bytes - 6 - ch) / ch; | |
| 705 | 680 | case AV_CODEC_ID_ROQ_DPCM: | |
| 706 | 680 | return (frame_bytes - 8) / ch; | |
| 707 | 112 | case AV_CODEC_ID_XAN_DPCM: | |
| 708 | 112 | return (frame_bytes - 2 * ch) / ch; | |
| 709 | ✗ | case AV_CODEC_ID_MACE3: | |
| 710 | ✗ | return 3 * frame_bytes / ch; | |
| 711 | 319 | case AV_CODEC_ID_MACE6: | |
| 712 | 319 | return 6 * frame_bytes / ch; | |
| 713 | ✗ | case AV_CODEC_ID_PCM_LXF: | |
| 714 | ✗ | return 2 * (frame_bytes / (5 * ch)); | |
| 715 | 1311 | case AV_CODEC_ID_IAC: | |
| 716 | case AV_CODEC_ID_IMC: | ||
| 717 | 1311 | return 4 * frame_bytes / ch; | |
| 718 | } | ||
| 719 | |||
| 720 |
2/2✓ Branch 0 taken 29117 times.
✓ Branch 1 taken 89563 times.
|
118680 | if (tag) { |
| 721 | /* calc from frame_bytes, channels, and codec_tag */ | ||
| 722 |
2/2✓ Branch 0 taken 74 times.
✓ Branch 1 taken 29043 times.
|
29117 | if (id == AV_CODEC_ID_SOL_DPCM) { |
| 723 |
1/2✓ Branch 0 taken 74 times.
✗ Branch 1 not taken.
|
74 | if (tag == 3) |
| 724 | 74 | return frame_bytes / ch; | |
| 725 | else | ||
| 726 | ✗ | return frame_bytes * 2 / ch; | |
| 727 | } | ||
| 728 | } | ||
| 729 | |||
| 730 |
2/2✓ Branch 0 taken 30069 times.
✓ Branch 1 taken 88537 times.
|
118606 | if (ba > 0) { |
| 731 | /* calc from frame_bytes, channels, and block_align */ | ||
| 732 | 30069 | int blocks = frame_bytes / ba; | |
| 733 | 30069 | int64_t tmp = 0; | |
| 734 |
7/9✓ Branch 0 taken 182 times.
✓ Branch 1 taken 873 times.
✓ Branch 2 taken 669 times.
✓ Branch 3 taken 649 times.
✓ Branch 4 taken 1001 times.
✓ Branch 5 taken 890 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 25805 times.
|
30069 | switch (id) { |
| 735 | 182 | case AV_CODEC_ID_ADPCM_IMA_XBOX: | |
| 736 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 182 times.
|
182 | if (bps != 4) |
| 737 | ✗ | return 0; | |
| 738 | 182 | tmp = blocks * ((ba - 4 * ch) / (bps * ch) * 8); | |
| 739 | 182 | break; | |
| 740 | 873 | case AV_CODEC_ID_ADPCM_IMA_WAV: | |
| 741 |
2/4✓ Branch 0 taken 873 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 873 times.
|
873 | if (bps < 2 || bps > 5) |
| 742 | ✗ | return 0; | |
| 743 | 873 | tmp = blocks * (1LL + (ba - 4 * ch) / (bps * ch) * 8LL); | |
| 744 | 873 | break; | |
| 745 | 669 | case AV_CODEC_ID_ADPCM_IMA_DK3: | |
| 746 | 669 | tmp = blocks * (((ba - 16LL) * 2 / 3 * 4) / ch); | |
| 747 | 669 | break; | |
| 748 | 649 | case AV_CODEC_ID_ADPCM_IMA_DK4: | |
| 749 | 649 | tmp = blocks * (1 + (ba - 4LL * ch) * 2 / ch); | |
| 750 | 649 | break; | |
| 751 | 1001 | case AV_CODEC_ID_ADPCM_IMA_RAD: | |
| 752 | 1001 | tmp = blocks * ((ba - 4LL * ch) * 2 / ch); | |
| 753 | 1001 | break; | |
| 754 | 890 | case AV_CODEC_ID_ADPCM_MS: | |
| 755 | 890 | tmp = blocks * (2 + (ba - 7LL * ch) * 2LL / ch); | |
| 756 | 890 | break; | |
| 757 | ✗ | case AV_CODEC_ID_ADPCM_MTAF: | |
| 758 | ✗ | tmp = blocks * (ba - 16LL) * 2 / ch; | |
| 759 | ✗ | break; | |
| 760 | ✗ | case AV_CODEC_ID_ADPCM_XMD: | |
| 761 | ✗ | tmp = blocks * 32; | |
| 762 | ✗ | break; | |
| 763 | } | ||
| 764 |
2/2✓ Branch 0 taken 4264 times.
✓ Branch 1 taken 25805 times.
|
30069 | if (tmp) { |
| 765 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 4264 times.
|
4264 | if (tmp != (int)tmp) |
| 766 | ✗ | return 0; | |
| 767 | 4264 | return tmp; | |
| 768 | } | ||
| 769 | } | ||
| 770 | |||
| 771 |
2/2✓ Branch 0 taken 37662 times.
✓ Branch 1 taken 76680 times.
|
114342 | if (bps > 0) { |
| 772 | /* calc from frame_bytes, channels, and bits_per_coded_sample */ | ||
| 773 |
2/4✓ Branch 0 taken 20820 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 16842 times.
|
37662 | switch (id) { |
| 774 | 20820 | case AV_CODEC_ID_PCM_DVD: | |
| 775 |
2/4✓ Branch 0 taken 20820 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 20820 times.
|
20820 | if(bps<4 || frame_bytes<3) |
| 776 | ✗ | return 0; | |
| 777 | 20820 | return 2 * ((frame_bytes - 3) / ((bps * 2 / 8) * ch)); | |
| 778 | ✗ | case AV_CODEC_ID_PCM_BLURAY: | |
| 779 | ✗ | if(bps<4 || frame_bytes<4) | |
| 780 | ✗ | return 0; | |
| 781 | ✗ | return (frame_bytes - 4) / ((FFALIGN(ch, 2) * bps) / 8); | |
| 782 | ✗ | case AV_CODEC_ID_S302M: | |
| 783 | ✗ | return 2 * (frame_bytes / ((bps + 4) / 4)) / ch; | |
| 784 | } | ||
| 785 | } | ||
| 786 | } | ||
| 787 | } | ||
| 788 | |||
| 789 | /* Fall back on using frame_size */ | ||
| 790 |
4/4✓ Branch 0 taken 53129 times.
✓ Branch 1 taken 44245 times.
✓ Branch 2 taken 52968 times.
✓ Branch 3 taken 161 times.
|
97374 | if (frame_size > 1 && frame_bytes) |
| 791 | 52968 | return frame_size; | |
| 792 | |||
| 793 | //For WMA we currently have no other means to calculate duration thus we | ||
| 794 | //do it here by assuming CBR, which is true for all known cases. | ||
| 795 |
8/8✓ Branch 0 taken 29513 times.
✓ Branch 1 taken 14893 times.
✓ Branch 2 taken 25803 times.
✓ Branch 3 taken 3710 times.
✓ Branch 4 taken 25773 times.
✓ Branch 5 taken 30 times.
✓ Branch 6 taken 9817 times.
✓ Branch 7 taken 15956 times.
|
44406 | if (bitrate > 0 && frame_bytes > 0 && sr > 0 && ba > 1) { |
| 796 |
4/4✓ Branch 0 taken 9612 times.
✓ Branch 1 taken 205 times.
✓ Branch 2 taken 795 times.
✓ Branch 3 taken 8817 times.
|
9817 | if (id == AV_CODEC_ID_WMAV1 || id == AV_CODEC_ID_WMAV2) |
| 797 | 1000 | return (frame_bytes * 8LL * sr) / bitrate; | |
| 798 | } | ||
| 799 | |||
| 800 | 43406 | return 0; | |
| 801 | } | ||
| 802 | |||
| 803 | 45468 | int av_get_audio_frame_duration(AVCodecContext *avctx, int frame_bytes) | |
| 804 | { | ||
| 805 | 45468 | int channels = avctx->ch_layout.nb_channels; | |
| 806 | int duration; | ||
| 807 | |||
| 808 | 45468 | duration = get_audio_frame_duration(avctx->codec_id, avctx->sample_rate, | |
| 809 | channels, avctx->block_align, | ||
| 810 | avctx->codec_tag, avctx->bits_per_coded_sample, | ||
| 811 | avctx->bit_rate, avctx->extradata, avctx->frame_size, | ||
| 812 | frame_bytes); | ||
| 813 | 45468 | return FFMAX(0, duration); | |
| 814 | } | ||
| 815 | |||
| 816 | 476499 | int av_get_audio_frame_duration2(AVCodecParameters *par, int frame_bytes) | |
| 817 | { | ||
| 818 | 476499 | int channels = par->ch_layout.nb_channels; | |
| 819 | int duration; | ||
| 820 | |||
| 821 | 476499 | duration = get_audio_frame_duration(par->codec_id, par->sample_rate, | |
| 822 | channels, par->block_align, | ||
| 823 | par->codec_tag, par->bits_per_coded_sample, | ||
| 824 | par->bit_rate, par->extradata, par->frame_size, | ||
| 825 | frame_bytes); | ||
| 826 | 476499 | return FFMAX(0, duration); | |
| 827 | } | ||
| 828 | |||
| 829 | 58 | unsigned int av_xiphlacing(unsigned char *s, unsigned int v) | |
| 830 | { | ||
| 831 | 58 | unsigned int n = 0; | |
| 832 | |||
| 833 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 58 times.
|
58 | while (v >= 0xff) { |
| 834 | ✗ | *s++ = 0xff; | |
| 835 | ✗ | v -= 0xff; | |
| 836 | ✗ | n++; | |
| 837 | } | ||
| 838 | 58 | *s = v; | |
| 839 | 58 | n++; | |
| 840 | 58 | return n; | |
| 841 | } | ||
| 842 | |||
| 843 | 476 | int ff_match_2uint16(const uint16_t(*tab)[2], int size, int a, int b) | |
| 844 | { | ||
| 845 | int i; | ||
| 846 |
5/6✓ Branch 0 taken 1919 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 1448 times.
✓ Branch 3 taken 471 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 471 times.
|
1924 | for (i = 0; i < size && !(tab[i][0] == a && tab[i][1] == b); i++) ; |
| 847 | 476 | return i; | |
| 848 | } | ||
| 849 | |||
| 850 | 17177 | const AVCodecHWConfig *avcodec_get_hw_config(const AVCodec *avcodec, int index) | |
| 851 | { | ||
| 852 | 17177 | const FFCodec *const codec = ffcodec(avcodec); | |
| 853 | int i; | ||
| 854 |
3/4✓ Branch 0 taken 2713 times.
✓ Branch 1 taken 14464 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2713 times.
|
17177 | if (!codec->hw_configs || index < 0) |
| 855 | 14464 | return NULL; | |
| 856 |
2/2✓ Branch 0 taken 5268 times.
✓ Branch 1 taken 1742 times.
|
7010 | for (i = 0; i <= index; i++) |
| 857 |
2/2✓ Branch 0 taken 971 times.
✓ Branch 1 taken 4297 times.
|
5268 | if (!codec->hw_configs[i]) |
| 858 | 971 | return NULL; | |
| 859 | 1742 | return &codec->hw_configs[index]->public; | |
| 860 | } | ||
| 861 | |||
| 862 | 27474 | int ff_thread_ref_frame(ThreadFrame *dst, const ThreadFrame *src) | |
| 863 | { | ||
| 864 | int ret; | ||
| 865 | |||
| 866 | 27474 | dst->owner[0] = src->owner[0]; | |
| 867 | 27474 | dst->owner[1] = src->owner[1]; | |
| 868 | |||
| 869 | 27474 | ret = av_frame_ref(dst->f, src->f); | |
| 870 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 27474 times.
|
27474 | if (ret < 0) |
| 871 | ✗ | return ret; | |
| 872 | |||
| 873 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 27474 times.
|
27474 | av_assert0(!dst->progress); |
| 874 | |||
| 875 |
2/2✓ Branch 0 taken 60 times.
✓ Branch 1 taken 27414 times.
|
27474 | if (src->progress) |
| 876 | 60 | dst->progress = av_refstruct_ref(src->progress); | |
| 877 | |||
| 878 | 27474 | return 0; | |
| 879 | } | ||
| 880 | |||
| 881 | 298 | int ff_thread_replace_frame(ThreadFrame *dst, const ThreadFrame *src) | |
| 882 | { | ||
| 883 | int ret; | ||
| 884 | |||
| 885 | 298 | dst->owner[0] = src->owner[0]; | |
| 886 | 298 | dst->owner[1] = src->owner[1]; | |
| 887 | |||
| 888 | 298 | ret = av_frame_replace(dst->f, src->f); | |
| 889 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 298 times.
|
298 | if (ret < 0) |
| 890 | ✗ | return ret; | |
| 891 | |||
| 892 | 298 | av_refstruct_replace(&dst->progress, src->progress); | |
| 893 | |||
| 894 | 298 | return 0; | |
| 895 | } | ||
| 896 | |||
| 897 | #if !HAVE_THREADS | ||
| 898 | |||
| 899 | int ff_thread_get_buffer(AVCodecContext *avctx, AVFrame *f, int flags) | ||
| 900 | { | ||
| 901 | return ff_get_buffer(avctx, f, flags); | ||
| 902 | } | ||
| 903 | |||
| 904 | int ff_thread_get_ext_buffer(AVCodecContext *avctx, ThreadFrame *f, int flags) | ||
| 905 | { | ||
| 906 | f->owner[0] = f->owner[1] = avctx; | ||
| 907 | return ff_get_buffer(avctx, f->f, flags); | ||
| 908 | } | ||
| 909 | |||
| 910 | void ff_thread_release_ext_buffer(ThreadFrame *f) | ||
| 911 | { | ||
| 912 | f->owner[0] = f->owner[1] = NULL; | ||
| 913 | if (f->f) | ||
| 914 | av_frame_unref(f->f); | ||
| 915 | } | ||
| 916 | |||
| 917 | void ff_thread_finish_setup(AVCodecContext *avctx) | ||
| 918 | { | ||
| 919 | } | ||
| 920 | |||
| 921 | void ff_thread_report_progress(ThreadFrame *f, int progress, int field) | ||
| 922 | { | ||
| 923 | } | ||
| 924 | |||
| 925 | void ff_thread_await_progress(const ThreadFrame *f, int progress, int field) | ||
| 926 | { | ||
| 927 | } | ||
| 928 | |||
| 929 | int ff_thread_can_start_frame(AVCodecContext *avctx) | ||
| 930 | { | ||
| 931 | return 1; | ||
| 932 | } | ||
| 933 | #endif | ||
| 934 | |||
| 935 | 685818 | const uint8_t *avpriv_find_start_code(const uint8_t *restrict p, | |
| 936 | const uint8_t *end, | ||
| 937 | uint32_t *restrict state) | ||
| 938 | { | ||
| 939 | int i; | ||
| 940 | |||
| 941 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 685818 times.
|
685818 | av_assert0(p <= end); |
| 942 |
2/2✓ Branch 0 taken 911 times.
✓ Branch 1 taken 684907 times.
|
685818 | if (p >= end) |
| 943 | 911 | return end; | |
| 944 | |||
| 945 |
2/2✓ Branch 0 taken 2049104 times.
✓ Branch 1 taken 680977 times.
|
2730081 | for (i = 0; i < 3; i++) { |
| 946 | 2049104 | uint32_t tmp = *state << 8; | |
| 947 | 2049104 | *state = tmp + *(p++); | |
| 948 |
4/4✓ Branch 0 taken 2048210 times.
✓ Branch 1 taken 894 times.
✓ Branch 2 taken 3036 times.
✓ Branch 3 taken 2045174 times.
|
2049104 | if (tmp == 0x100 || p == end) |
| 949 | 3930 | return p; | |
| 950 | } | ||
| 951 | |||
| 952 |
2/2✓ Branch 0 taken 399565951 times.
✓ Branch 1 taken 67588 times.
|
399633539 | while (p < end) { |
| 953 |
2/2✓ Branch 0 taken 361981555 times.
✓ Branch 1 taken 37584396 times.
|
399565951 | if (p[-1] > 1 ) p += 3; |
| 954 |
2/2✓ Branch 0 taken 16167799 times.
✓ Branch 1 taken 21416597 times.
|
37584396 | else if (p[-2] ) p += 2; |
| 955 |
2/2✓ Branch 0 taken 20803208 times.
✓ Branch 1 taken 613389 times.
|
21416597 | else if (p[-3]|(p[-1]-1)) p++; |
| 956 | else { | ||
| 957 | 613389 | p++; | |
| 958 | 613389 | break; | |
| 959 | } | ||
| 960 | } | ||
| 961 | |||
| 962 |
2/2✓ Branch 0 taken 42296 times.
✓ Branch 1 taken 638681 times.
|
680977 | p = FFMIN(p, end) - 4; |
| 963 | 680977 | *state = AV_RB32(p); | |
| 964 | |||
| 965 | 680977 | return p + 4; | |
| 966 | } | ||
| 967 | |||
| 968 | 420 | AVCPBProperties *av_cpb_properties_alloc(size_t *size) | |
| 969 | { | ||
| 970 | 420 | AVCPBProperties *props = av_mallocz(sizeof(AVCPBProperties)); | |
| 971 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 420 times.
|
420 | if (!props) |
| 972 | ✗ | return NULL; | |
| 973 | |||
| 974 |
1/2✓ Branch 0 taken 420 times.
✗ Branch 1 not taken.
|
420 | if (size) |
| 975 | 420 | *size = sizeof(*props); | |
| 976 | |||
| 977 | 420 | props->vbv_delay = UINT64_MAX; | |
| 978 | |||
| 979 | 420 | return props; | |
| 980 | } | ||
| 981 | |||
| 982 | ✗ | int ff_alloc_timecode_sei(const AVFrame *frame, AVRational rate, size_t prefix_len, | |
| 983 | void **data, size_t *sei_size) | ||
| 984 | { | ||
| 985 | ✗ | AVFrameSideData *sd = NULL; | |
| 986 | uint8_t *sei_data; | ||
| 987 | PutBitContext pb; | ||
| 988 | uint32_t *tc; | ||
| 989 | int m; | ||
| 990 | |||
| 991 | ✗ | if (frame) | |
| 992 | ✗ | sd = av_frame_get_side_data(frame, AV_FRAME_DATA_S12M_TIMECODE); | |
| 993 | |||
| 994 | ✗ | if (!sd) { | |
| 995 | ✗ | *data = NULL; | |
| 996 | ✗ | return 0; | |
| 997 | } | ||
| 998 | ✗ | tc = (uint32_t*)sd->data; | |
| 999 | ✗ | m = tc[0] & 3; | |
| 1000 | |||
| 1001 | ✗ | *sei_size = sizeof(uint32_t) * 4; | |
| 1002 | ✗ | *data = av_mallocz(*sei_size + prefix_len); | |
| 1003 | ✗ | if (!*data) | |
| 1004 | ✗ | return AVERROR(ENOMEM); | |
| 1005 | ✗ | sei_data = (uint8_t*)*data + prefix_len; | |
| 1006 | |||
| 1007 | ✗ | init_put_bits(&pb, sei_data, *sei_size); | |
| 1008 | ✗ | put_bits(&pb, 2, m); // num_clock_ts | |
| 1009 | |||
| 1010 | ✗ | for (int j = 1; j <= m; j++) { | |
| 1011 | unsigned hh, mm, ss, ff, drop; | ||
| 1012 | ✗ | ff_timecode_set_smpte(&drop, &hh, &mm, &ss, &ff, rate, tc[j], 0, 0); | |
| 1013 | |||
| 1014 | ✗ | put_bits(&pb, 1, 1); // clock_timestamp_flag | |
| 1015 | ✗ | put_bits(&pb, 1, 1); // units_field_based_flag | |
| 1016 | ✗ | put_bits(&pb, 5, 0); // counting_type | |
| 1017 | ✗ | put_bits(&pb, 1, 1); // full_timestamp_flag | |
| 1018 | ✗ | put_bits(&pb, 1, 0); // discontinuity_flag | |
| 1019 | ✗ | put_bits(&pb, 1, drop); | |
| 1020 | ✗ | put_bits(&pb, 9, ff); | |
| 1021 | ✗ | put_bits(&pb, 6, ss); | |
| 1022 | ✗ | put_bits(&pb, 6, mm); | |
| 1023 | ✗ | put_bits(&pb, 5, hh); | |
| 1024 | ✗ | put_bits(&pb, 5, 0); | |
| 1025 | } | ||
| 1026 | ✗ | flush_put_bits(&pb); | |
| 1027 | |||
| 1028 | ✗ | return 0; | |
| 1029 | } | ||
| 1030 | |||
| 1031 | 19417 | int64_t ff_guess_coded_bitrate(AVCodecContext *avctx) | |
| 1032 | { | ||
| 1033 | 19417 | AVRational framerate = avctx->framerate; | |
| 1034 | 19417 | int bits_per_coded_sample = avctx->bits_per_coded_sample; | |
| 1035 | int64_t bitrate; | ||
| 1036 | |||
| 1037 |
3/4✓ Branch 0 taken 19298 times.
✓ Branch 1 taken 119 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 19298 times.
|
19417 | if (!(framerate.num && framerate.den)) |
| 1038 | 119 | framerate = av_inv_q(avctx->time_base); | |
| 1039 |
2/4✓ Branch 0 taken 19417 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 19417 times.
|
19417 | if (!(framerate.num && framerate.den)) |
| 1040 | ✗ | return 0; | |
| 1041 | |||
| 1042 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 19417 times.
|
19417 | if (!bits_per_coded_sample) { |
| 1043 | ✗ | const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(avctx->pix_fmt); | |
| 1044 | ✗ | bits_per_coded_sample = av_get_bits_per_pixel(desc); | |
| 1045 | } | ||
| 1046 | 19417 | bitrate = (int64_t)bits_per_coded_sample * avctx->width * avctx->height * | |
| 1047 | 19417 | framerate.num / framerate.den; | |
| 1048 | |||
| 1049 | 19417 | return bitrate; | |
| 1050 | } | ||
| 1051 |