FFmpeg
h2645_sei.c
Go to the documentation of this file.
1 /*
2  * Common H.264 and HEVC Supplementary Enhancement Information messages
3  *
4  * Copyright (c) 2003 Michael Niedermayer <michaelni@gmx.at>
5  * Copyright (C) 2012 - 2013 Guillaume Martres
6  * Copyright (C) 2012 - 2013 Gildas Cocherel
7  * Copyright (C) 2013 Vittorio Giovara
8  *
9  * This file is part of FFmpeg.
10  *
11  * FFmpeg is free software; you can redistribute it and/or
12  * modify it under the terms of the GNU Lesser General Public
13  * License as published by the Free Software Foundation; either
14  * version 2.1 of the License, or (at your option) any later version.
15  *
16  * FFmpeg is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19  * Lesser General Public License for more details.
20  *
21  * You should have received a copy of the GNU Lesser General Public
22  * License along with FFmpeg; if not, write to the Free Software
23  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24  */
25 
26 #include "config_components.h"
27 
29 #include "libavutil/display.h"
33 #include "libavutil/pixdesc.h"
34 #include "libavutil/stereo3d.h"
35 
36 #include "atsc_a53.h"
37 #include "avcodec.h"
38 #include "dynamic_hdr_vivid.h"
39 #include "get_bits.h"
40 #include "golomb.h"
41 #include "h2645_sei.h"
42 
43 #define IS_H264(codec_id) (CONFIG_H264_SEI && CONFIG_HEVC_SEI ? codec_id == AV_CODEC_ID_H264 : CONFIG_H264_SEI)
44 #define IS_HEVC(codec_id) (CONFIG_H264_SEI && CONFIG_HEVC_SEI ? codec_id == AV_CODEC_ID_HEVC : CONFIG_HEVC_SEI)
45 
46 #if CONFIG_HEVC_SEI
47 static int decode_registered_user_data_dynamic_hdr_plus(HEVCSEIDynamicHDRPlus *s,
48  GetByteContext *gb)
49 {
50  size_t meta_size;
51  int err;
52  AVDynamicHDRPlus *metadata = av_dynamic_hdr_plus_alloc(&meta_size);
53  if (!metadata)
54  return AVERROR(ENOMEM);
55 
56  err = av_dynamic_hdr_plus_from_t35(metadata, gb->buffer,
58  if (err < 0) {
59  av_free(metadata);
60  return err;
61  }
62 
63  av_buffer_unref(&s->info);
64  s->info = av_buffer_create((uint8_t *)metadata, meta_size, NULL, NULL, 0);
65  if (!s->info) {
66  av_free(metadata);
67  return AVERROR(ENOMEM);
68  }
69 
70  return 0;
71 }
72 
73 static int decode_registered_user_data_dynamic_hdr_vivid(HEVCSEIDynamicHDRVivid *s,
74  GetByteContext *gb)
75 {
76  size_t meta_size;
77  int err;
78  AVDynamicHDRVivid *metadata = av_dynamic_hdr_vivid_alloc(&meta_size);
79  if (!metadata)
80  return AVERROR(ENOMEM);
81 
84  if (err < 0) {
85  av_free(metadata);
86  return err;
87  }
88 
89  av_buffer_unref(&s->info);
90  s->info = av_buffer_create((uint8_t *)metadata, meta_size, NULL, NULL, 0);
91  if (!s->info) {
92  av_free(metadata);
93  return AVERROR(ENOMEM);
94  }
95 
96  return 0;
97 }
98 #endif
99 
101 {
102  int flag;
103 
104  if (bytestream2_get_bytes_left(gb) <= 0)
105  return AVERROR_INVALIDDATA;
106 
107  flag = !!(bytestream2_get_byteu(gb) & 0x40); // active_format_flag
108 
109  if (flag) {
110  if (bytestream2_get_bytes_left(gb) <= 0)
111  return AVERROR_INVALIDDATA;
112  h->active_format_description = bytestream2_get_byteu(gb) & 0xF;
113  h->present = 1;
114  }
115 
116  return 0;
117 }
118 
120  GetByteContext *gb)
121 {
122  return ff_parse_a53_cc(&h->buf_ref, gb->buffer,
124 }
125 
127  enum AVCodecID codec_id, void *logctx)
128 {
129  int country_code, provider_code;
130 
131  if (bytestream2_get_bytes_left(gb) < 3)
132  return AVERROR_INVALIDDATA;
133 
134  country_code = bytestream2_get_byteu(gb); // itu_t_t35_country_code
135  if (country_code == 0xFF) {
136  if (bytestream2_get_bytes_left(gb) < 3)
137  return AVERROR_INVALIDDATA;
138 
139  bytestream2_skipu(gb, 1); // itu_t_t35_country_code_extension_byte
140  }
141 
142  if (country_code != 0xB5 && country_code != 0x26) { // usa_country_code and cn_country_code
143  av_log(logctx, AV_LOG_VERBOSE,
144  "Unsupported User Data Registered ITU-T T35 SEI message (country_code = %d)\n",
145  country_code);
146  return 0;
147  }
148 
149  /* itu_t_t35_payload_byte follows */
150  provider_code = bytestream2_get_be16u(gb);
151 
152  switch (provider_code) {
153  case 0x31: { // atsc_provider_code
154  uint32_t user_identifier;
155 
156  if (bytestream2_get_bytes_left(gb) < 4)
157  return AVERROR_INVALIDDATA;
158 
159  user_identifier = bytestream2_get_be32u(gb);
160  switch (user_identifier) {
161  case MKBETAG('D', 'T', 'G', '1'): // afd_data
162  return decode_registered_user_data_afd(&h->afd, gb);
163  case MKBETAG('G', 'A', '9', '4'): // closed captions
164  return decode_registered_user_data_closed_caption(&h->a53_caption, gb);
165  default:
166  av_log(logctx, AV_LOG_VERBOSE,
167  "Unsupported User Data Registered ITU-T T35 SEI message (atsc user_identifier = 0x%04x)\n",
168  user_identifier);
169  break;
170  }
171  break;
172  }
173 #if CONFIG_HEVC_SEI
174  case 0x04: { // cuva_provider_code
175  const uint16_t cuva_provider_oriented_code = 0x0005;
176  uint16_t provider_oriented_code;
177 
178  if (!IS_HEVC(codec_id))
179  goto unsupported_provider_code;
180 
181  if (bytestream2_get_bytes_left(gb) < 2)
182  return AVERROR_INVALIDDATA;
183 
184  provider_oriented_code = bytestream2_get_be16u(gb);
185  if (provider_oriented_code == cuva_provider_oriented_code) {
186  return decode_registered_user_data_dynamic_hdr_vivid(&h->dynamic_hdr_vivid, gb);
187  }
188  break;
189  }
190  case 0x3C: { // smpte_provider_code
191  // A/341 Amendment - 2094-40
192  const uint16_t smpte2094_40_provider_oriented_code = 0x0001;
193  const uint8_t smpte2094_40_application_identifier = 0x04;
194  uint16_t provider_oriented_code;
195  uint8_t application_identifier;
196 
197  if (!IS_HEVC(codec_id))
198  goto unsupported_provider_code;
199 
200  if (bytestream2_get_bytes_left(gb) < 3)
201  return AVERROR_INVALIDDATA;
202 
203  provider_oriented_code = bytestream2_get_be16u(gb);
204  application_identifier = bytestream2_get_byteu(gb);
205  if (provider_oriented_code == smpte2094_40_provider_oriented_code &&
206  application_identifier == smpte2094_40_application_identifier) {
207  return decode_registered_user_data_dynamic_hdr_plus(&h->dynamic_hdr_plus, gb);
208  }
209  break;
210  }
211  unsupported_provider_code:
212 #endif
213  default:
214  av_log(logctx, AV_LOG_VERBOSE,
215  "Unsupported User Data Registered ITU-T T35 SEI message (provider_code = %d)\n",
216  provider_code);
217  break;
218  }
219 
220  return 0;
221 }
222 
224  GetByteContext *gb,
225  enum AVCodecID codec_id)
226 {
227  uint8_t *user_data;
229  AVBufferRef *buf_ref, **tmp;
230 
231  if (size < 16 || size >= INT_MAX - 1)
232  return AVERROR_INVALIDDATA;
233 
234  tmp = av_realloc_array(h->buf_ref, h->nb_buf_ref + 1, sizeof(*h->buf_ref));
235  if (!tmp)
236  return AVERROR(ENOMEM);
237  h->buf_ref = tmp;
238 
239  buf_ref = av_buffer_alloc(size + 1);
240  if (!buf_ref)
241  return AVERROR(ENOMEM);
242  user_data = buf_ref->data;
243 
245  user_data[size] = 0;
246  buf_ref->size = size;
247  h->buf_ref[h->nb_buf_ref++] = buf_ref;
248 
249  if (IS_H264(codec_id)) {
250  int e, build;
251  e = sscanf(user_data + 16, "x264 - core %d", &build);
252  if (e == 1 && build > 0)
253  h->x264_build = build;
254  if (e == 1 && build == 1 && !strncmp(user_data+16, "x264 - core 0000", 16))
255  h->x264_build = 67;
256  }
257 
258  return 0;
259 }
260 
262  GetBitContext *gb)
263 {
264  h->present = !get_bits1(gb); // display_orientation_cancel_flag
265 
266  if (h->present) {
267  h->hflip = get_bits1(gb); // hor_flip
268  h->vflip = get_bits1(gb); // ver_flip
269 
270  h->anticlockwise_rotation = get_bits(gb, 16);
271  // This is followed by display_orientation_repetition_period
272  // and display_orientation_extension_flag for H.264
273  // and by display_orientation_persistence_flag for HEVC.
274  }
275 
276  return 0;
277 }
278 
280  GetBitContext *gb,
281  enum AVCodecID codec_id)
282 {
283  h->arrangement_id = get_ue_golomb_long(gb);
284  h->arrangement_cancel_flag = get_bits1(gb);
285  h->present = !h->arrangement_cancel_flag;
286 
287  if (h->present) {
288  h->arrangement_type = get_bits(gb, 7);
289  h->quincunx_sampling_flag = get_bits1(gb);
290  h->content_interpretation_type = get_bits(gb, 6);
291 
292  // spatial_flipping_flag, frame0_flipped_flag, field_views_flag
293  skip_bits(gb, 3);
294  h->current_frame_is_frame0_flag = get_bits1(gb);
295  // frame0_self_contained_flag, frame1_self_contained_flag
296  skip_bits(gb, 2);
297 
298  if (!h->quincunx_sampling_flag && h->arrangement_type != 5)
299  skip_bits(gb, 16); // frame[01]_grid_position_[xy]
300  skip_bits(gb, 8); // frame_packing_arrangement_reserved_byte
301  if (IS_H264(codec_id))
302  h->arrangement_repetition_period = get_ue_golomb_long(gb);
303  else
304  skip_bits1(gb); // frame_packing_arrangement_persistence_flag
305  }
306  // H.264: frame_packing_arrangement_extension_flag,
307  // HEVC: upsampled_aspect_ratio_flag
308  skip_bits1(gb);
309 
310  return 0;
311 }
312 
314  GetByteContext *gb)
315 {
316  if (bytestream2_get_bytes_left(gb) < 1)
317  return AVERROR_INVALIDDATA;
318 
319  s->present = 1;
320  s->preferred_transfer_characteristics = bytestream2_get_byteu(gb);
321 
322  return 0;
323 }
324 
326  GetByteContext *gb)
327 {
328  static const uint16_t max_ambient_light_value = 50000;
329 
330  if (bytestream2_get_bytes_left(gb) < 8)
331  return AVERROR_INVALIDDATA;
332 
333  s->ambient_illuminance = bytestream2_get_be32u(gb);
334  if (!s->ambient_illuminance)
335  return AVERROR_INVALIDDATA;
336 
337  s->ambient_light_x = bytestream2_get_be16u(gb);
338  if (s->ambient_light_x > max_ambient_light_value)
339  return AVERROR_INVALIDDATA;
340 
341  s->ambient_light_y = bytestream2_get_be16u(gb);
342  if (s->ambient_light_y > max_ambient_light_value)
343  return AVERROR_INVALIDDATA;
344 
345  s->present = 1;
346 
347  return 0;
348 }
349 
351  enum AVCodecID codec_id, GetBitContext *gb)
352 {
353  h->present = !get_bits1(gb); // film_grain_characteristics_cancel_flag
354 
355  if (h->present) {
356  memset(h, 0, sizeof(*h));
357  h->model_id = get_bits(gb, 2);
358  h->separate_colour_description_present_flag = get_bits1(gb);
359  if (h->separate_colour_description_present_flag) {
360  h->bit_depth_luma = get_bits(gb, 3) + 8;
361  h->bit_depth_chroma = get_bits(gb, 3) + 8;
362  h->full_range = get_bits1(gb);
363  h->color_primaries = get_bits(gb, 8);
364  h->transfer_characteristics = get_bits(gb, 8);
365  h->matrix_coeffs = get_bits(gb, 8);
366  }
367  h->blending_mode_id = get_bits(gb, 2);
368  h->log2_scale_factor = get_bits(gb, 4);
369  for (int c = 0; c < 3; c++)
370  h->comp_model_present_flag[c] = get_bits1(gb);
371  for (int c = 0; c < 3; c++) {
372  if (h->comp_model_present_flag[c]) {
373  h->num_intensity_intervals[c] = get_bits(gb, 8) + 1;
374  h->num_model_values[c] = get_bits(gb, 3) + 1;
375  if (h->num_model_values[c] > 6)
376  return AVERROR_INVALIDDATA;
377  for (int i = 0; i < h->num_intensity_intervals[c]; i++) {
378  h->intensity_interval_lower_bound[c][i] = get_bits(gb, 8);
379  h->intensity_interval_upper_bound[c][i] = get_bits(gb, 8);
380  for (int j = 0; j < h->num_model_values[c]; j++)
381  h->comp_model_value[c][i][j] = get_se_golomb_long(gb);
382  }
383  }
384  }
385  if (IS_HEVC(codec_id))
386  h->persistence_flag = get_bits1(gb);
387  else
388  h->repetition_period = get_ue_golomb_long(gb);
389 
390  h->present = 1;
391  }
392 
393  return 0;
394 }
395 
397  GetByteContext *gb)
398 {
399  int i;
400 
401  if (bytestream2_get_bytes_left(gb) < 24)
402  return AVERROR_INVALIDDATA;
403 
404  // Mastering primaries
405  for (i = 0; i < 3; i++) {
406  s->display_primaries[i][0] = bytestream2_get_be16u(gb);
407  s->display_primaries[i][1] = bytestream2_get_be16u(gb);
408  }
409  // White point (x, y)
410  s->white_point[0] = bytestream2_get_be16u(gb);
411  s->white_point[1] = bytestream2_get_be16u(gb);
412 
413  // Max and min luminance of mastering display
414  s->max_luminance = bytestream2_get_be32u(gb);
415  s->min_luminance = bytestream2_get_be32u(gb);
416 
417  // As this SEI message comes before the first frame that references it,
418  // initialize the flag to 2 and decrement on IRAP access unit so it
419  // persists for the coded video sequence (e.g., between two IRAPs)
420  s->present = 2;
421 
422  return 0;
423 }
424 
426  GetByteContext *gb)
427 {
428  if (bytestream2_get_bytes_left(gb) < 4)
429  return AVERROR_INVALIDDATA;
430 
431  // Max and average light levels
432  s->max_content_light_level = bytestream2_get_be16u(gb);
433  s->max_pic_average_light_level = bytestream2_get_be16u(gb);
434  // As this SEI message comes before the first frame that references it,
435  // initialize the flag to 2 and decrement on IRAP access unit so it
436  // persists for the coded video sequence (e.g., between two IRAPs)
437  s->present = 2;
438 
439  return 0;
440 }
441 
443  enum AVCodecID codec_id, GetBitContext *gb,
444  GetByteContext *gbyte, void *logctx)
445 {
446  switch (type) {
448  return decode_registered_user_data(h, gbyte, codec_id, logctx);
450  return decode_unregistered_user_data(&h->unregistered, gbyte, codec_id);
452  return decode_display_orientation(&h->display_orientation, gb);
454  return decode_film_grain_characteristics(&h->film_grain_characteristics, codec_id, gb);
456  return decode_frame_packing_arrangement(&h->frame_packing, gb, codec_id);
458  return decode_alternative_transfer(&h->alternative_transfer, gbyte);
460  return decode_ambient_viewing_environment(&h->ambient_viewing_environment,
461  gbyte);
463  return decode_nal_sei_mastering_display_info(&h->mastering_display,
464  gbyte);
466  return decode_nal_sei_content_light_info(&h->content_light, gbyte);
467  default:
469  }
470 }
471 
473 {
475  src->a53_caption.buf_ref);
476  if (ret < 0)
477  return ret;
478 
479  for (unsigned i = 0; i < dst->unregistered.nb_buf_ref; i++)
481  dst->unregistered.nb_buf_ref = 0;
482 
483  if (src->unregistered.nb_buf_ref) {
485  src->unregistered.nb_buf_ref,
486  sizeof(*dst->unregistered.buf_ref));
487  if (ret < 0)
488  return ret;
489 
490  for (unsigned i = 0; i < src->unregistered.nb_buf_ref; i++) {
491  dst->unregistered.buf_ref[i] = av_buffer_ref(src->unregistered.buf_ref[i]);
492  if (!dst->unregistered.buf_ref[i])
493  return AVERROR(ENOMEM);
494  dst->unregistered.nb_buf_ref++;
495  }
496  }
497 
498  return 0;
499 }
500 
502 {
503  if (IS_H264(codec_id))
504  return type <= SEI_FPA_H264_TYPE_2D &&
506  else
509 }
510 
512  enum AVCodecID codec_id,
513  AVCodecContext *avctx, const H2645VUI *vui,
514  unsigned bit_depth_luma, unsigned bit_depth_chroma,
515  int seed)
516 {
517  H2645SEIFramePacking *fp = &sei->frame_packing;
518 
519  if (fp->present &&
520  is_frame_packing_type_valid(fp->arrangement_type, codec_id) &&
521  fp->content_interpretation_type > 0 &&
522  fp->content_interpretation_type < 3) {
524 
525  if (!stereo)
526  return AVERROR(ENOMEM);
527 
528  switch (fp->arrangement_type) {
529 #if CONFIG_H264_SEI
531  stereo->type = AV_STEREO3D_CHECKERBOARD;
532  break;
534  stereo->type = AV_STEREO3D_COLUMNS;
535  break;
537  stereo->type = AV_STEREO3D_LINES;
538  break;
539 #endif
541  if (fp->quincunx_sampling_flag)
543  else
544  stereo->type = AV_STEREO3D_SIDEBYSIDE;
545  break;
547  stereo->type = AV_STEREO3D_TOPBOTTOM;
548  break;
551  break;
552 #if CONFIG_H264_SEI
554  stereo->type = AV_STEREO3D_2D;
555  break;
556 #endif
557  }
558 
559  if (fp->content_interpretation_type == 2)
560  stereo->flags = AV_STEREO3D_FLAG_INVERT;
561 
562  if (fp->arrangement_type == SEI_FPA_TYPE_INTERLEAVE_TEMPORAL) {
563  if (fp->current_frame_is_frame0_flag)
564  stereo->view = AV_STEREO3D_VIEW_LEFT;
565  else
566  stereo->view = AV_STEREO3D_VIEW_RIGHT;
567  }
568  }
569 
570  if (sei->display_orientation.present &&
571  (sei->display_orientation.anticlockwise_rotation ||
572  sei->display_orientation.hflip ||
573  sei->display_orientation.vflip)) {
574  H2645SEIDisplayOrientation *o = &sei->display_orientation;
575  double angle = o->anticlockwise_rotation * 360 / (double) (1 << 16);
578  sizeof(int32_t) * 9);
579  if (!rotation)
580  return AVERROR(ENOMEM);
581 
582  /* av_display_rotation_set() expects the angle in the clockwise
583  * direction, hence the first minus.
584  * The below code applies the flips after the rotation, yet
585  * the H.2645 specs require flipping to be applied first.
586  * Because of R O(phi) = O(-phi) R (where R is flipping around
587  * an arbitatry axis and O(phi) is the proper rotation by phi)
588  * we can create display matrices as desired by negating
589  * the degree once for every flip applied. */
590  angle = -angle * (1 - 2 * !!o->hflip) * (1 - 2 * !!o->vflip);
591  av_display_rotation_set((int32_t *)rotation->data, angle);
592  av_display_matrix_flip((int32_t *)rotation->data,
593  o->hflip, o->vflip);
594  }
595 
596  if (sei->a53_caption.buf_ref) {
597  H2645SEIA53Caption *a53 = &sei->a53_caption;
599  if (!sd)
600  av_buffer_unref(&a53->buf_ref);
601  a53->buf_ref = NULL;
602  if (avctx)
604  }
605 
606  for (unsigned i = 0; i < sei->unregistered.nb_buf_ref; i++) {
607  H2645SEIUnregistered *unreg = &sei->unregistered;
608 
609  if (unreg->buf_ref[i]) {
612  unreg->buf_ref[i]);
613  if (!sd)
614  av_buffer_unref(&unreg->buf_ref[i]);
615  unreg->buf_ref[i] = NULL;
616  }
617  }
618  sei->unregistered.nb_buf_ref = 0;
619 
620  if (sei->afd.present) {
622  sizeof(uint8_t));
623 
624  if (sd) {
625  *sd->data = sei->afd.active_format_description;
626  sei->afd.present = 0;
627  }
628  }
629 
630  if (sei->film_grain_characteristics.present) {
631  H2645SEIFilmGrainCharacteristics *fgc = &sei->film_grain_characteristics;
633  AVFilmGrainH274Params *h274;
634 
635  if (!fgp)
636  return AVERROR(ENOMEM);
637 
639  h274 = &fgp->codec.h274;
640 
641  fgp->seed = seed;
642 
643  h274->model_id = fgc->model_id;
645  h274->bit_depth_luma = fgc->bit_depth_luma;
646  h274->bit_depth_chroma = fgc->bit_depth_chroma;
647  h274->color_range = fgc->full_range + 1;
648  h274->color_primaries = fgc->color_primaries;
649  h274->color_trc = fgc->transfer_characteristics;
650  h274->color_space = fgc->matrix_coeffs;
651  } else {
652  h274->bit_depth_luma = bit_depth_luma;
653  h274->bit_depth_chroma = bit_depth_chroma;
655  h274->color_range = vui->video_full_range_flag + 1;
656  else
659  h274->color_primaries = vui->colour_primaries;
660  h274->color_trc = vui->transfer_characteristics;
661  h274->color_space = vui->matrix_coeffs;
662  } else {
666  }
667  }
668  h274->blending_mode_id = fgc->blending_mode_id;
670 
672  sizeof(h274->component_model_present));
674  sizeof(h274->num_intensity_intervals));
675  memcpy(&h274->num_model_values, &fgc->num_model_values,
676  sizeof(h274->num_model_values));
678  sizeof(h274->intensity_interval_lower_bound));
680  sizeof(h274->intensity_interval_upper_bound));
681  memcpy(&h274->comp_model_value, &fgc->comp_model_value,
682  sizeof(h274->comp_model_value));
683 
684  if (IS_H264(codec_id))
685  fgc->present = !!fgc->repetition_period;
686  else
687  fgc->present = fgc->persistence_flag;
688 
689  if (avctx)
691  }
692 
693  if (sei->ambient_viewing_environment.present) {
695  &sei->ambient_viewing_environment;
696 
697  AVAmbientViewingEnvironment *dst_env =
699  if (!dst_env)
700  return AVERROR(ENOMEM);
701 
702  dst_env->ambient_illuminance = av_make_q(env->ambient_illuminance, 10000);
703  dst_env->ambient_light_x = av_make_q(env->ambient_light_x, 50000);
704  dst_env->ambient_light_y = av_make_q(env->ambient_light_y, 50000);
705  }
706 
707  if (sei->mastering_display.present) {
708  // HEVC uses a g,b,r ordering, which we convert to a more natural r,g,b
709  const int mapping[3] = {2, 0, 1};
710  const int chroma_den = 50000;
711  const int luma_den = 10000;
712  int i;
713  AVMasteringDisplayMetadata *metadata =
715  if (!metadata)
716  return AVERROR(ENOMEM);
717 
718  for (i = 0; i < 3; i++) {
719  const int j = mapping[i];
720  metadata->display_primaries[i][0].num = sei->mastering_display.display_primaries[j][0];
721  metadata->display_primaries[i][0].den = chroma_den;
722  metadata->display_primaries[i][1].num = sei->mastering_display.display_primaries[j][1];
723  metadata->display_primaries[i][1].den = chroma_den;
724  }
725  metadata->white_point[0].num = sei->mastering_display.white_point[0];
726  metadata->white_point[0].den = chroma_den;
727  metadata->white_point[1].num = sei->mastering_display.white_point[1];
728  metadata->white_point[1].den = chroma_den;
729 
730  metadata->max_luminance.num = sei->mastering_display.max_luminance;
731  metadata->max_luminance.den = luma_den;
732  metadata->min_luminance.num = sei->mastering_display.min_luminance;
733  metadata->min_luminance.den = luma_den;
734  metadata->has_luminance = 1;
735  metadata->has_primaries = 1;
736 
737  av_log(avctx, AV_LOG_DEBUG, "Mastering Display Metadata:\n");
738  av_log(avctx, AV_LOG_DEBUG,
739  "r(%5.4f,%5.4f) g(%5.4f,%5.4f) b(%5.4f %5.4f) wp(%5.4f, %5.4f)\n",
740  av_q2d(metadata->display_primaries[0][0]),
741  av_q2d(metadata->display_primaries[0][1]),
742  av_q2d(metadata->display_primaries[1][0]),
743  av_q2d(metadata->display_primaries[1][1]),
744  av_q2d(metadata->display_primaries[2][0]),
745  av_q2d(metadata->display_primaries[2][1]),
746  av_q2d(metadata->white_point[0]), av_q2d(metadata->white_point[1]));
747  av_log(avctx, AV_LOG_DEBUG,
748  "min_luminance=%f, max_luminance=%f\n",
749  av_q2d(metadata->min_luminance), av_q2d(metadata->max_luminance));
750  }
751 
752  if (sei->content_light.present) {
753  AVContentLightMetadata *metadata =
755  if (!metadata)
756  return AVERROR(ENOMEM);
757  metadata->MaxCLL = sei->content_light.max_content_light_level;
758  metadata->MaxFALL = sei->content_light.max_pic_average_light_level;
759 
760  av_log(avctx, AV_LOG_DEBUG, "Content Light Level Metadata:\n");
761  av_log(avctx, AV_LOG_DEBUG, "MaxCLL=%d, MaxFALL=%d\n",
762  metadata->MaxCLL, metadata->MaxFALL);
763  }
764 
765  return 0;
766 }
767 
769 {
770  av_buffer_unref(&s->a53_caption.buf_ref);
771 
772  for (unsigned i = 0; i < s->unregistered.nb_buf_ref; i++)
773  av_buffer_unref(&s->unregistered.buf_ref[i]);
774  s->unregistered.nb_buf_ref = 0;
775  av_freep(&s->unregistered.buf_ref);
776  av_buffer_unref(&s->dynamic_hdr_plus.info);
777  av_buffer_unref(&s->dynamic_hdr_vivid.info);
778 
779  s->ambient_viewing_environment.present = 0;
780  s->mastering_display.present = 0;
781  s->content_light.present = 0;
782 }
AVMasteringDisplayMetadata::has_primaries
int has_primaries
Flag indicating whether the display primaries (and white point) are set.
Definition: mastering_display_metadata.h:62
decode_film_grain_characteristics
static int decode_film_grain_characteristics(H2645SEIFilmGrainCharacteristics *h, enum AVCodecID codec_id, GetBitContext *gb)
Definition: h2645_sei.c:350
AVMasteringDisplayMetadata::max_luminance
AVRational max_luminance
Max luminance of mastering display (cd/m^2).
Definition: mastering_display_metadata.h:57
AV_STEREO3D_VIEW_LEFT
@ AV_STEREO3D_VIEW_LEFT
Frame contains only the left view.
Definition: stereo3d.h:153
H2645SEIFilmGrainCharacteristics::persistence_flag
int persistence_flag
Definition: h2645_sei.h:105
AVERROR
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
AV_STEREO3D_SIDEBYSIDE_QUINCUNX
@ AV_STEREO3D_SIDEBYSIDE_QUINCUNX
Views are next to each other, but when upscaling apply a checkerboard pattern.
Definition: stereo3d.h:114
SEI_FPA_H264_TYPE_CHECKERBOARD
@ SEI_FPA_H264_TYPE_CHECKERBOARD
Definition: sei.h:148
SEI_FPA_TYPE_INTERLEAVE_TEMPORAL
@ SEI_FPA_TYPE_INTERLEAVE_TEMPORAL
Definition: sei.h:153
H2645SEIAmbientViewingEnvironment::ambient_light_x
uint16_t ambient_light_x
Definition: h2645_sei.h:82
H2645SEIFramePacking
Definition: h2645_sei.h:57
av_frame_new_side_data
AVFrameSideData * av_frame_new_side_data(AVFrame *frame, enum AVFrameSideDataType type, size_t size)
Add a new side data to a frame.
Definition: frame.c:812
GetByteContext
Definition: bytestream.h:33
H2645SEIAFD
Definition: h2645_sei.h:38
AVAmbientViewingEnvironment
Ambient viewing environment metadata as defined by H.274.
Definition: ambient_viewing_environment.h:36
AVFilmGrainH274Params::color_space
enum AVColorSpace color_space
Definition: film_grain_params.h:152
get_se_golomb_long
static int get_se_golomb_long(GetBitContext *gb)
Definition: golomb.h:294
AVBufferRef::data
uint8_t * data
The data buffer.
Definition: buffer.h:90
H2645SEIFilmGrainCharacteristics::bit_depth_chroma
int bit_depth_chroma
Definition: h2645_sei.h:91
AV_FRAME_DATA_A53_CC
@ AV_FRAME_DATA_A53_CC
ATSC A53 Part 4 Closed Captions.
Definition: frame.h:59
ff_h2645_sei_to_frame
int ff_h2645_sei_to_frame(AVFrame *frame, H2645SEI *sei, enum AVCodecID codec_id, AVCodecContext *avctx, const H2645VUI *vui, unsigned bit_depth_luma, unsigned bit_depth_chroma, int seed)
Definition: h2645_sei.c:511
AVMasteringDisplayMetadata::display_primaries
AVRational display_primaries[3][2]
CIE 1931 xy chromaticity coords of color primaries (r, g, b order).
Definition: mastering_display_metadata.h:42
AVMasteringDisplayMetadata::has_luminance
int has_luminance
Flag indicating whether the luminance (min_ and max_) have been set.
Definition: mastering_display_metadata.h:67
bytestream2_skipu
static av_always_inline void bytestream2_skipu(GetByteContext *g, unsigned int size)
Definition: bytestream.h:174
H2645VUI::matrix_coeffs
enum AVColorSpace matrix_coeffs
Definition: h2645_vui.h:41
AVFilmGrainH274Params::blending_mode_id
int blending_mode_id
Specifies the blending mode used to blend the simulated film grain with the decoded images.
Definition: film_grain_params.h:160
AVContentLightMetadata::MaxCLL
unsigned MaxCLL
Max content light level (cd/m^2).
Definition: mastering_display_metadata.h:102
H2645SEIA53Caption::buf_ref
AVBufferRef * buf_ref
Definition: h2645_sei.h:35
AVFrame
This structure describes decoded (raw) audio or video data.
Definition: frame.h:340
tmp
static uint8_t tmp[11]
Definition: aes_ctr.c:28
pixdesc.h
IS_H264
#define IS_H264(codec_id)
Definition: h2645_sei.c:43
H2645SEIA53Caption
Definition: h2645_sei.h:34
av_display_matrix_flip
void av_display_matrix_flip(int32_t matrix[9], int hflip, int vflip)
Flip the input matrix horizontally and/or vertically.
Definition: display.c:66
H2645SEIMasteringDisplay
Definition: h2645_sei.h:108
AVAmbientViewingEnvironment::ambient_light_x
AVRational ambient_light_x
Normalized x chromaticity coordinate of the environmental ambient light in the nominal viewing enviro...
Definition: ambient_viewing_environment.h:47
AVFilmGrainParams::codec
union AVFilmGrainParams::@337 codec
Additional fields may be added both here and in any structure included.
AVCOL_TRC_UNSPECIFIED
@ AVCOL_TRC_UNSPECIFIED
Definition: pixfmt.h:573
AV_LOG_VERBOSE
#define AV_LOG_VERBOSE
Detailed information.
Definition: log.h:196
AVFilmGrainH274Params::color_range
enum AVColorRange color_range
Definition: film_grain_params.h:149
av_display_rotation_set
void av_display_rotation_set(int32_t matrix[9], double angle)
Initialize a transformation matrix describing a pure clockwise rotation by the specified angle (in de...
Definition: display.c:51
AV_FRAME_DATA_DISPLAYMATRIX
@ AV_FRAME_DATA_DISPLAYMATRIX
This side data contains a 3x3 transformation matrix describing an affine transformation that needs to...
Definition: frame.h:85
SEI_FPA_TYPE_TOP_BOTTOM
@ SEI_FPA_TYPE_TOP_BOTTOM
Definition: sei.h:152
H2645VUI::colour_primaries
enum AVColorPrimaries colour_primaries
Definition: h2645_vui.h:39
av_buffer_ref
AVBufferRef * av_buffer_ref(const AVBufferRef *buf)
Create a new reference to an AVBuffer.
Definition: buffer.c:103
AV_STEREO3D_VIEW_RIGHT
@ AV_STEREO3D_VIEW_RIGHT
Frame contains only the right view.
Definition: stereo3d.h:158
H2645VUI::video_full_range_flag
int video_full_range_flag
Definition: h2645_vui.h:37
AVFilmGrainParams::seed
uint64_t seed
Seed to use for the synthesis process, if the codec allows for it.
Definition: film_grain_params.h:228
H2645SEIDisplayOrientation
Definition: h2645_sei.h:68
H2645VUI::video_signal_type_present_flag
int video_signal_type_present_flag
Definition: h2645_vui.h:35
ff_h2645_sei_message_decode
int ff_h2645_sei_message_decode(H2645SEI *h, enum SEIType type, enum AVCodecID codec_id, GetBitContext *gb, GetByteContext *gbyte, void *logctx)
Decode a single SEI message.
Definition: h2645_sei.c:442
AVContentLightMetadata
Content light level needed by to transmit HDR over HDMI (CTA-861.3).
Definition: mastering_display_metadata.h:98
skip_bits
static void skip_bits(GetBitContext *s, int n)
Definition: get_bits.h:381
FF_H2645_SEI_MESSAGE_UNHANDLED
@ FF_H2645_SEI_MESSAGE_UNHANDLED
Definition: h2645_sei.h:139
golomb.h
exp golomb vlc stuff
AV_STEREO3D_SIDEBYSIDE
@ AV_STEREO3D_SIDEBYSIDE
Views are next to each other.
Definition: stereo3d.h:64
get_bits
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
Definition: get_bits.h:335
SEI_FPA_H264_TYPE_INTERLEAVE_COLUMN
@ SEI_FPA_H264_TYPE_INTERLEAVE_COLUMN
Definition: sei.h:149
H2645SEI::a53_caption
H2645SEIA53Caption a53_caption
Definition: h2645_sei.h:123
AV_STEREO3D_2D
@ AV_STEREO3D_2D
Video is not stereoscopic (and metadata has to be there).
Definition: stereo3d.h:52
H2645SEIFilmGrainCharacteristics::intensity_interval_upper_bound
uint8_t intensity_interval_upper_bound[3][256]
Definition: h2645_sei.h:102
GetBitContext
Definition: get_bits.h:108
av_dynamic_hdr_vivid_alloc
AVDynamicHDRVivid * av_dynamic_hdr_vivid_alloc(size_t *size)
Copyright (c) 2021 Limin Wang <lance.lmwang at gmail.com>
Definition: hdr_dynamic_vivid_metadata.c:24
type
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf type
Definition: writing_filters.txt:86
SEI_TYPE_AMBIENT_VIEWING_ENVIRONMENT
@ SEI_TYPE_AMBIENT_VIEWING_ENVIRONMENT
Definition: sei.h:107
AVAmbientViewingEnvironment::ambient_illuminance
AVRational ambient_illuminance
Environmental illuminance of the ambient viewing environment in lux.
Definition: ambient_viewing_environment.h:40
AVRational::num
int num
Numerator.
Definition: rational.h:59
AVFilmGrainH274Params::intensity_interval_upper_bound
uint8_t intensity_interval_upper_bound[3][256]
Specifies the upper bound of each intensity interval for which the set of model values applies for th...
Definition: film_grain_params.h:194
AVFilmGrainH274Params::bit_depth_luma
int bit_depth_luma
Specifies the bit depth used for the luma component.
Definition: film_grain_params.h:142
is_frame_packing_type_valid
static int is_frame_packing_type_valid(SEIFpaType type, enum AVCodecID codec_id)
Definition: h2645_sei.c:501
AV_STEREO3D_FRAMESEQUENCE
@ AV_STEREO3D_FRAMESEQUENCE
Views are alternated temporally.
Definition: stereo3d.h:89
film_grain_params.h
H2645SEIFilmGrainCharacteristics::intensity_interval_lower_bound
uint8_t intensity_interval_lower_bound[3][256]
Definition: h2645_sei.h:101
H2645SEIFilmGrainCharacteristics::matrix_coeffs
int matrix_coeffs
Definition: h2645_sei.h:95
H2645SEIDisplayOrientation::anticlockwise_rotation
int anticlockwise_rotation
Definition: h2645_sei.h:70
AV_STEREO3D_LINES
@ AV_STEREO3D_LINES
Views are packed per line, as if interlaced.
Definition: stereo3d.h:126
stereo3d.h
AVMasteringDisplayMetadata::white_point
AVRational white_point[2]
CIE 1931 xy chromaticity coords of white point.
Definition: mastering_display_metadata.h:47
s
#define s(width, name)
Definition: cbs_vp9.c:198
SEI_TYPE_FRAME_PACKING_ARRANGEMENT
@ SEI_TYPE_FRAME_PACKING_ARRANGEMENT
Definition: sei.h:75
av_realloc_array
void * av_realloc_array(void *ptr, size_t nmemb, size_t size)
Definition: mem.c:215
SEI_FPA_H264_TYPE_INTERLEAVE_ROW
@ SEI_FPA_H264_TYPE_INTERLEAVE_ROW
Definition: sei.h:150
decode_registered_user_data_closed_caption
static int decode_registered_user_data_closed_caption(H2645SEIA53Caption *h, GetByteContext *gb)
Definition: h2645_sei.c:119
av_q2d
static double av_q2d(AVRational a)
Convert an AVRational to a double.
Definition: rational.h:104
decode_nal_sei_content_light_info
static int decode_nal_sei_content_light_info(H2645SEIContentLight *s, GetByteContext *gb)
Definition: h2645_sei.c:425
av_film_grain_params_create_side_data
AVFilmGrainParams * av_film_grain_params_create_side_data(AVFrame *frame)
Allocate a complete AVFilmGrainParams and add it to the frame.
Definition: film_grain_params.c:31
GetByteContext::buffer
const uint8_t * buffer
Definition: bytestream.h:34
H2645SEIAmbientViewingEnvironment
Definition: h2645_sei.h:79
H2645SEIFilmGrainCharacteristics::log2_scale_factor
int log2_scale_factor
Definition: h2645_sei.h:97
AV_LOG_DEBUG
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition: log.h:201
SEIType
SEIType
Definition: sei.h:29
SEI_TYPE_USER_DATA_REGISTERED_ITU_T_T35
@ SEI_TYPE_USER_DATA_REGISTERED_ITU_T_T35
Definition: sei.h:34
get_bits.h
decode_unregistered_user_data
static int decode_unregistered_user_data(H2645SEIUnregistered *h, GetByteContext *gb, enum AVCodecID codec_id)
Definition: h2645_sei.c:223
codec_id
enum AVCodecID codec_id
Definition: vaapi_decode.c:389
AVFilmGrainH274Params::comp_model_value
int16_t comp_model_value[3][256][6]
Specifies the model values for the component for each intensity interval.
Definition: film_grain_params.h:205
AVCOL_PRI_UNSPECIFIED
@ AVCOL_PRI_UNSPECIFIED
Definition: pixfmt.h:548
frame
static AVFrame * frame
Definition: demux_decode.c:54
FF_CODEC_PROPERTY_FILM_GRAIN
#define FF_CODEC_PROPERTY_FILM_GRAIN
Definition: avcodec.h:1907
AVStereo3D::flags
int flags
Additional information about the frame packing.
Definition: stereo3d.h:182
H2645SEIDisplayOrientation::hflip
int hflip
Definition: h2645_sei.h:71
AVFilmGrainH274Params::model_id
int model_id
Specifies the film grain simulation mode.
Definition: film_grain_params.h:137
ff_parse_a53_cc
int ff_parse_a53_cc(AVBufferRef **pbuf, const uint8_t *data, int size)
Parse a data array for ATSC A53 Part 4 Closed Captions and store them in an AVBufferRef.
Definition: atsc_a53.c:68
decode_registered_user_data
static int decode_registered_user_data(H2645SEI *h, GetByteContext *gb, enum AVCodecID codec_id, void *logctx)
Definition: h2645_sei.c:126
NULL
#define NULL
Definition: coverity.c:32
H2645SEIFilmGrainCharacteristics::color_primaries
int color_primaries
Definition: h2645_sei.h:93
H2645VUI::colour_description_present_flag
int colour_description_present_flag
Definition: h2645_vui.h:38
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
decode_frame_packing_arrangement
static int decode_frame_packing_arrangement(H2645SEIFramePacking *h, GetBitContext *gb, enum AVCodecID codec_id)
Definition: h2645_sei.c:279
H2645SEIFilmGrainCharacteristics::repetition_period
int repetition_period
Definition: h2645_sei.h:104
H2645SEIFilmGrainCharacteristics::model_id
int model_id
Definition: h2645_sei.h:88
H2645SEIFilmGrainCharacteristics::comp_model_present_flag
int comp_model_present_flag[3]
Definition: h2645_sei.h:98
get_bits1
static unsigned int get_bits1(GetBitContext *s)
Definition: get_bits.h:388
H2645SEI
Definition: h2645_sei.h:122
AVDynamicHDRVivid
This struct represents dynamic metadata for color volume transform - CUVA 005.1:2021 standard.
Definition: hdr_dynamic_vivid_metadata.h:310
H2645VUI
Definition: h2645_vui.h:27
double
double
Definition: af_crystalizer.c:131
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:780
H2645SEIFilmGrainCharacteristics::num_intensity_intervals
uint16_t num_intensity_intervals[3]
Definition: h2645_sei.h:99
fp
#define fp
Definition: regdef.h:44
seed
static unsigned int seed
Definition: videogen.c:78
AV_FRAME_DATA_AFD
@ AV_FRAME_DATA_AFD
Active Format Description data consisting of a single byte as specified in ETSI TS 101 154 using AVAc...
Definition: frame.h:90
sei
static int FUNC() sei(CodedBitstreamContext *ctx, RWContext *rw, H264RawSEI *current)
Definition: cbs_h264_syntax_template.c:824
AVCOL_RANGE_UNSPECIFIED
@ AVCOL_RANGE_UNSPECIFIED
Definition: pixfmt.h:639
IS_HEVC
#define IS_HEVC(codec_id)
Definition: h2645_sei.c:44
c
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C it is not safe even if the output of undefined operations is unused The unsafety may seem nit picking but Optimizing compilers have in fact optimized code on the assumption that no undefined Behavior occurs Optimizing code based on wrong assumptions can and has in some cases lead to effects beyond the output of computations The signed integer overflow problem in speed critical code Code which is highly optimized and works with signed integers sometimes has the problem that often the output of the computation does not c
Definition: undefined.txt:32
AV_FRAME_DATA_SEI_UNREGISTERED
@ AV_FRAME_DATA_SEI_UNREGISTERED
User data unregistered metadata associated with a video frame.
Definition: frame.h:178
decode_alternative_transfer
static int decode_alternative_transfer(H2645SEIAlternativeTransfer *s, GetByteContext *gb)
Definition: h2645_sei.c:313
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
bytestream2_get_bytes_left
static av_always_inline int bytestream2_get_bytes_left(GetByteContext *g)
Definition: bytestream.h:158
AVCodecID
AVCodecID
Identify the syntax and semantics of the bitstream.
Definition: codec_id.h:49
H2645SEIFilmGrainCharacteristics::bit_depth_luma
int bit_depth_luma
Definition: h2645_sei.h:90
H2645SEIFilmGrainCharacteristics::num_model_values
uint8_t num_model_values[3]
Definition: h2645_sei.h:100
AV_STEREO3D_CHECKERBOARD
@ AV_STEREO3D_CHECKERBOARD
Views are packed in a checkerboard-like structure per pixel.
Definition: stereo3d.h:101
H2645SEIDisplayOrientation::vflip
int vflip
Definition: h2645_sei.h:71
H2645VUI::transfer_characteristics
enum AVColorTransferCharacteristic transfer_characteristics
Definition: h2645_vui.h:40
AVFilmGrainH274Params::component_model_present
int component_model_present[3]
Indicates if the modelling of film grain for a given component is present.
Definition: film_grain_params.h:170
h2645_sei.h
size
int size
Definition: twinvq_data.h:10344
av_make_q
static AVRational av_make_q(int num, int den)
Create an AVRational.
Definition: rational.h:71
MKBETAG
#define MKBETAG(a, b, c, d)
Definition: macros.h:56
AVFrameSideData::data
uint8_t * data
Definition: frame.h:248
AVFilmGrainParams
This structure describes how to handle film grain synthesis in video for specific codecs.
Definition: film_grain_params.h:216
user_data
static int FUNC() user_data(CodedBitstreamContext *ctx, RWContext *rw, MPEG2RawUserData *current)
Definition: cbs_mpeg2_syntax_template.c:59
H2645SEIFilmGrainCharacteristics::blending_mode_id
int blending_mode_id
Definition: h2645_sei.h:96
decode_nal_sei_mastering_display_info
static int decode_nal_sei_mastering_display_info(H2645SEIMasteringDisplay *s, GetByteContext *gb)
Definition: h2645_sei.c:396
av_reallocp_array
int av_reallocp_array(void *ptr, size_t nmemb, size_t size)
Allocate, reallocate an array through a pointer to a pointer.
Definition: mem.c:223
SEI_TYPE_MASTERING_DISPLAY_COLOUR_VOLUME
@ SEI_TYPE_MASTERING_DISPLAY_COLOUR_VOLUME
Definition: sei.h:96
SEI_FPA_TYPE_SIDE_BY_SIDE
@ SEI_FPA_TYPE_SIDE_BY_SIDE
Definition: sei.h:151
ff_h2645_sei_reset
void ff_h2645_sei_reset(H2645SEI *s)
Definition: h2645_sei.c:768
av_content_light_metadata_create_side_data
AVContentLightMetadata * av_content_light_metadata_create_side_data(AVFrame *frame)
Allocate a complete AVContentLightMetadata and add it to the frame.
Definition: mastering_display_metadata.c:55
SEI_TYPE_ALTERNATIVE_TRANSFER_CHARACTERISTICS
@ SEI_TYPE_ALTERNATIVE_TRANSFER_CHARACTERISTICS
Definition: sei.h:106
skip_bits1
static void skip_bits1(GetBitContext *s)
Definition: get_bits.h:413
av_buffer_alloc
AVBufferRef * av_buffer_alloc(size_t size)
Allocate an AVBuffer of the given size using av_malloc().
Definition: buffer.c:77
AVFilmGrainParams::h274
AVFilmGrainH274Params h274
Definition: film_grain_params.h:237
decode_registered_user_data_afd
static int decode_registered_user_data_afd(H2645SEIAFD *h, GetByteContext *gb)
Definition: h2645_sei.c:100
AV_STEREO3D_FLAG_INVERT
#define AV_STEREO3D_FLAG_INVERT
Inverted views, Right/Bottom represents the left view.
Definition: stereo3d.h:164
ff_parse_itu_t_t35_to_dynamic_hdr_vivid
int ff_parse_itu_t_t35_to_dynamic_hdr_vivid(AVDynamicHDRVivid *s, const uint8_t *data, int size)
Parse the user data registered ITU-T T.35 to AVbuffer (AVDynamicHDRVivid).
Definition: dynamic_hdr_vivid.c:32
AVBufferRef::size
size_t size
Size of data in bytes.
Definition: buffer.h:94
flag
#define flag(name)
Definition: cbs_av1.c:466
SEI_FPA_H264_TYPE_2D
@ SEI_FPA_H264_TYPE_2D
Definition: sei.h:154
H2645SEIFilmGrainCharacteristics::transfer_characteristics
int transfer_characteristics
Definition: h2645_sei.h:94
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:255
AVCodecContext::properties
unsigned properties
Properties of the stream that gets decoded.
Definition: avcodec.h:1904
HEVCSEIDynamicHDRPlus
Definition: h2645_sei.h:43
av_ambient_viewing_environment_create_side_data
AVAmbientViewingEnvironment * av_ambient_viewing_environment_create_side_data(AVFrame *frame)
Allocate and add an AVAmbientViewingEnvironment structure to an existing AVFrame as side data.
Definition: ambient_viewing_environment.c:37
AVFilmGrainH274Params
This structure describes how to handle film grain synthesis for codecs using the ITU-T H....
Definition: film_grain_params.h:132
AVFilmGrainH274Params::num_intensity_intervals
uint16_t num_intensity_intervals[3]
Specifies the number of intensity intervals for which a specific set of model values has been estimat...
Definition: film_grain_params.h:176
display.h
AV_STEREO3D_TOPBOTTOM
@ AV_STEREO3D_TOPBOTTOM
Views are on top of each other.
Definition: stereo3d.h:76
SEI_TYPE_DISPLAY_ORIENTATION
@ SEI_TYPE_DISPLAY_ORIENTATION
Definition: sei.h:77
H2645SEIFilmGrainCharacteristics::present
int present
Definition: h2645_sei.h:87
av_buffer_replace
int av_buffer_replace(AVBufferRef **pdst, const AVBufferRef *src)
Ensure dst refers to the same data as src.
Definition: buffer.c:233
AVMasteringDisplayMetadata
Mastering display metadata capable of representing the color volume of the display used to master the...
Definition: mastering_display_metadata.h:38
AVCOL_SPC_UNSPECIFIED
@ AVCOL_SPC_UNSPECIFIED
Definition: pixfmt.h:602
AVFilmGrainH274Params::color_primaries
enum AVColorPrimaries color_primaries
Definition: film_grain_params.h:150
ambient_viewing_environment.h
AVFilmGrainH274Params::intensity_interval_lower_bound
uint8_t intensity_interval_lower_bound[3][256]
Specifies the lower ounds of each intensity interval for whichthe set of model values applies for the...
Definition: film_grain_params.h:188
H2645SEIFilmGrainCharacteristics::separate_colour_description_present_flag
int separate_colour_description_present_flag
Definition: h2645_sei.h:89
AVDynamicHDRPlus
This struct represents dynamic metadata for color volume transform - application 4 of SMPTE 2094-40:2...
Definition: hdr_dynamic_metadata.h:243
avcodec.h
ret
ret
Definition: filter_design.txt:187
H2645SEIUnregistered
Definition: h2645_sei.h:51
AV_STEREO3D_COLUMNS
@ AV_STEREO3D_COLUMNS
Views are packed per column.
Definition: stereo3d.h:138
atsc_a53.h
AVStereo3D::type
enum AVStereo3DType type
How views are packed within the video.
Definition: stereo3d.h:177
SEIFpaType
SEIFpaType
frame_packing_arrangement types.
Definition: sei.h:147
H2645SEI::unregistered
H2645SEIUnregistered unregistered
Definition: h2645_sei.h:127
AVCodecContext
main external API structure.
Definition: avcodec.h:441
AV_FILM_GRAIN_PARAMS_H274
@ AV_FILM_GRAIN_PARAMS_H274
The union is valid when interpreted as AVFilmGrainH274Params (codec.h274)
Definition: film_grain_params.h:35
av_mastering_display_metadata_create_side_data
AVMasteringDisplayMetadata * av_mastering_display_metadata_create_side_data(AVFrame *frame)
Allocate a complete AVMasteringDisplayMetadata and add it to the frame.
Definition: mastering_display_metadata.c:32
SEI_TYPE_USER_DATA_UNREGISTERED
@ SEI_TYPE_USER_DATA_UNREGISTERED
Definition: sei.h:35
AVRational::den
int den
Denominator.
Definition: rational.h:60
decode_ambient_viewing_environment
static int decode_ambient_viewing_environment(H2645SEIAmbientViewingEnvironment *s, GetByteContext *gb)
Definition: h2645_sei.c:325
AVFilmGrainH274Params::log2_scale_factor
int log2_scale_factor
Specifies a scale factor used in the film grain characterization equations.
Definition: film_grain_params.h:165
hdr_dynamic_metadata.h
HEVCSEIDynamicHDRVivid
Definition: h2645_sei.h:47
AVMasteringDisplayMetadata::min_luminance
AVRational min_luminance
Min luminance of mastering display (cd/m^2).
Definition: mastering_display_metadata.h:52
FF_CODEC_PROPERTY_CLOSED_CAPTIONS
#define FF_CODEC_PROPERTY_CLOSED_CAPTIONS
Definition: avcodec.h:1906
H2645SEIAmbientViewingEnvironment::ambient_illuminance
uint32_t ambient_illuminance
Definition: h2645_sei.h:81
AVFilmGrainH274Params::num_model_values
uint8_t num_model_values[3]
Specifies the number of model values present for each intensity interval in which the film grain has ...
Definition: film_grain_params.h:182
H2645SEIAmbientViewingEnvironment::ambient_light_y
uint16_t ambient_light_y
Definition: h2645_sei.h:83
AVBufferRef
A reference to a data buffer.
Definition: buffer.h:82
bytestream2_get_bufferu
static av_always_inline unsigned int bytestream2_get_bufferu(GetByteContext *g, uint8_t *dst, unsigned int size)
Definition: bytestream.h:277
mastering_display_metadata.h
get_ue_golomb_long
static unsigned get_ue_golomb_long(GetBitContext *gb)
Read an unsigned Exp-Golomb code in the range 0 to UINT32_MAX-1.
Definition: golomb.h:104
ff_h2645_sei_ctx_replace
int ff_h2645_sei_ctx_replace(H2645SEI *dst, const H2645SEI *src)
Definition: h2645_sei.c:472
av_stereo3d_create_side_data
AVStereo3D * av_stereo3d_create_side_data(AVFrame *frame)
Allocate a complete AVFrameSideData and add it to the frame.
Definition: stereo3d.c:34
AVFilmGrainH274Params::color_trc
enum AVColorTransferCharacteristic color_trc
Definition: film_grain_params.h:151
AVFrameSideData
Structure to hold side data for an AVFrame.
Definition: frame.h:246
av_dynamic_hdr_plus_alloc
AVDynamicHDRPlus * av_dynamic_hdr_plus_alloc(size_t *size)
Allocate an AVDynamicHDRPlus structure and set its fields to default values.
Definition: hdr_dynamic_metadata.c:36
dynamic_hdr_vivid.h
AVStereo3D::view
enum AVStereo3DView view
Determines which views are packed.
Definition: stereo3d.h:187
av_free
#define av_free(p)
Definition: tableprint_vlc.h:33
AVContentLightMetadata::MaxFALL
unsigned MaxFALL
Max average light level per frame (cd/m^2).
Definition: mastering_display_metadata.h:107
av_freep
#define av_freep(p)
Definition: tableprint_vlc.h:34
src
INIT_CLIP pixel * src
Definition: h264pred_template.c:418
av_dynamic_hdr_plus_from_t35
int av_dynamic_hdr_plus_from_t35(AVDynamicHDRPlus *s, const uint8_t *data, size_t size)
Parse the user data registered ITU-T T.35 to AVbuffer (AVDynamicHDRPlus).
Definition: hdr_dynamic_metadata.c:61
H2645SEIFilmGrainCharacteristics::full_range
int full_range
Definition: h2645_sei.h:92
H2645SEIUnregistered::nb_buf_ref
unsigned nb_buf_ref
Definition: h2645_sei.h:53
int32_t
int32_t
Definition: audioconvert.c:56
H2645SEIContentLight
Definition: h2645_sei.h:116
av_log
#define av_log(a,...)
Definition: tableprint_vlc.h:27
AVFilmGrainH274Params::bit_depth_chroma
int bit_depth_chroma
Specifies the bit depth used for the chroma components.
Definition: film_grain_params.h:147
AVERROR_INVALIDDATA
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition: error.h:61
SEI_TYPE_CONTENT_LIGHT_LEVEL_INFO
@ SEI_TYPE_CONTENT_LIGHT_LEVEL_INFO
Definition: sei.h:103
h
h
Definition: vp9dsp_template.c:2038
AVStereo3D
Stereo 3D type: this structure describes how two videos are packed within a single video surface,...
Definition: stereo3d.h:173
AVAmbientViewingEnvironment::ambient_light_y
AVRational ambient_light_y
Normalized y chromaticity coordinate of the environmental ambient light in the nominal viewing enviro...
Definition: ambient_viewing_environment.h:54
H2645SEIFilmGrainCharacteristics::comp_model_value
int16_t comp_model_value[3][256][6]
Definition: h2645_sei.h:103
H2645SEIUnregistered::buf_ref
AVBufferRef ** buf_ref
Definition: h2645_sei.h:52
SEI_TYPE_FILM_GRAIN_CHARACTERISTICS
@ SEI_TYPE_FILM_GRAIN_CHARACTERISTICS
Definition: sei.h:49
AVFilmGrainParams::type
enum AVFilmGrainParamsType type
Specifies the codec for which this structure is valid.
Definition: film_grain_params.h:220
H2645SEIAlternativeTransfer
Definition: h2645_sei.h:74
decode_display_orientation
static int decode_display_orientation(H2645SEIDisplayOrientation *h, GetBitContext *gb)
Definition: h2645_sei.c:261
H2645SEIFilmGrainCharacteristics
Definition: h2645_sei.h:86