FFmpeg
dnxhddata.h
Go to the documentation of this file.
1 /*
2  * VC3/DNxHD decoder.
3  * Copyright (c) 2007 SmartJog S.A., Baptiste Coudurier <baptiste dot coudurier at smartjog dot com>
4  *
5  * This file is part of FFmpeg.
6  *
7  * FFmpeg is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * FFmpeg is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with FFmpeg; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20  */
21 
22 #ifndef AVCODEC_DNXHDDATA_H
23 #define AVCODEC_DNXHDDATA_H
24 
25 #include <stdint.h>
26 #include "avcodec.h"
27 #include "libavutil/internal.h"
28 #include "libavutil/intreadwrite.h"
29 
30 /** Additional profile info flags */
31 #define DNXHD_INTERLACED (1<<0)
32 #define DNXHD_MBAFF (1<<1)
33 #define DNXHD_444 (1<<2)
34 
35 /** Frame headers, extra 0x00 added to end for parser */
36 #define DNXHD_HEADER_INITIAL 0x000002800100
37 #define DNXHD_HEADER_444 0x000002800200
38 
39 /** Indicate that a CIDEntry value must be read in the bitstream */
40 #define DNXHD_VARIABLE 0
41 
42 typedef struct CIDEntry {
43  int cid;
44  unsigned int width, height;
45  unsigned int frame_size;
46  unsigned int coding_unit_size;
47  uint16_t flags;
49  int bit_depth;
50  int eob_index;
53  const uint16_t *ac_codes;
55  const uint16_t *run_codes;
56  const uint8_t *run_bits, *run;
57  int bit_rates[5]; ///< Helper to choose variants, rounded to nearest 5Mb/s
59 } CIDEntry;
60 
61 extern const CIDEntry ff_dnxhd_cid_table[];
62 
65 void ff_dnxhd_print_profiles(AVCodecContext *avctx, int loglevel);
66 
67 static av_always_inline uint64_t ff_dnxhd_check_header_prefix_hr(uint64_t prefix)
68 {
69  uint64_t data_offset = prefix >> 16;
70  if ((prefix & 0xFFFF0000FFFFLL) == 0x0300 &&
71  data_offset >= 0x0280 && data_offset <= 0x2170 &&
72  (data_offset & 3) == 0)
73  return prefix;
74  return 0;
75 }
76 
77 static av_always_inline uint64_t ff_dnxhd_check_header_prefix(uint64_t prefix)
78 {
79  if (prefix == DNXHD_HEADER_INITIAL ||
80  prefix == DNXHD_HEADER_444 ||
82  return prefix;
83  return 0;
84 }
85 
87 {
88  uint64_t prefix = AV_RB32(buf);
89  prefix = (prefix << 16) | buf[4] << 8;
90  return ff_dnxhd_check_header_prefix(prefix);
91 }
92 
94 int avpriv_dnxhd_get_hr_frame_size(int cid, int w, int h);
96 
97 #endif /* AVCODEC_DNXHDDATA_H */
bit_depth
static void bit_depth(AudioStatsContext *s, uint64_t mask, uint64_t imask, AVRational *depth)
Definition: af_astats.c:254
ff_dnxhd_check_header_prefix_hr
static av_always_inline uint64_t ff_dnxhd_check_header_prefix_hr(uint64_t prefix)
Definition: dnxhddata.h:67
ff_dnxhd_print_profiles
void ff_dnxhd_print_profiles(AVCodecContext *avctx, int loglevel)
Definition: dnxhddata.c:1163
w
uint8_t w
Definition: llviddspenc.c:38
DNXHD_HEADER_INITIAL
#define DNXHD_HEADER_INITIAL
Frame headers, extra 0x00 added to end for parser.
Definition: dnxhddata.h:36
CIDEntry::run_bits
const uint8_t * run_bits
Definition: dnxhddata.h:56
CIDEntry::coding_unit_size
unsigned int coding_unit_size
Definition: dnxhddata.h:46
CIDEntry::bit_rates
int bit_rates[5]
Helper to choose variants, rounded to nearest 5Mb/s.
Definition: dnxhddata.h:57
CIDEntry::ac_info
const uint8_t * ac_info
Definition: dnxhddata.h:54
avpriv_dnxhd_get_hr_frame_size
int avpriv_dnxhd_get_hr_frame_size(int cid, int w, int h)
Definition: dnxhddata.c:1095
CIDEntry::cid
int cid
Definition: dnxhddata.h:43
CIDEntry::packet_scale
AVRational packet_scale
Definition: dnxhddata.h:58
CIDEntry
Definition: dnxhddata.h:42
CIDEntry::flags
uint16_t flags
Definition: dnxhddata.h:47
CIDEntry::bit_depth
int bit_depth
Definition: dnxhddata.h:49
intreadwrite.h
ff_dnxhd_cid_table
const CIDEntry ff_dnxhd_cid_table[]
Definition: dnxhddata.c:935
CIDEntry::eob_index
int eob_index
Definition: dnxhddata.h:50
CIDEntry::luma_weight
const uint8_t * luma_weight
Definition: dnxhddata.h:51
CIDEntry::run_codes
const uint16_t * run_codes
Definition: dnxhddata.h:55
CIDEntry::height
unsigned int height
Definition: dnxhddata.h:44
AVRational
Rational number (pair of numerator and denominator).
Definition: rational.h:58
CIDEntry::width
unsigned int width
Definition: dnxhddata.h:44
CIDEntry::index_bits
int index_bits
Definition: dnxhddata.h:48
DNXHD_HEADER_444
#define DNXHD_HEADER_444
Definition: dnxhddata.h:37
cid
int cid
Definition: mxfenc.c:1970
CIDEntry::dc_codes
const uint8_t * dc_codes
Definition: dnxhddata.h:52
CIDEntry::chroma_weight
const uint8_t * chroma_weight
Definition: dnxhddata.h:51
AV_RB32
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_WL32 unsigned int_TMPL AV_WL24 unsigned int_TMPL AV_WL16 uint64_t_TMPL AV_WB64 unsigned int_TMPL AV_RB32
Definition: bytestream.h:92
avpriv_dnxhd_get_interlaced
int avpriv_dnxhd_get_interlaced(int cid)
Definition: dnxhddata.c:1108
ff_dnxhd_get_cid_table
int ff_dnxhd_get_cid_table(int cid)
Definition: dnxhddata.c:1078
CIDEntry::run
const uint8_t * run
Definition: dnxhddata.h:56
CIDEntry::ac_bits
const uint8_t * ac_bits
Definition: dnxhddata.h:54
CIDEntry::ac_codes
const uint16_t * ac_codes
Definition: dnxhddata.h:53
ff_dnxhd_find_cid
int ff_dnxhd_find_cid(AVCodecContext *avctx, int bit_depth)
Definition: dnxhddata.c:1133
internal.h
ff_dnxhd_check_header_prefix
static av_always_inline uint64_t ff_dnxhd_check_header_prefix(uint64_t prefix)
Definition: dnxhddata.h:77
av_always_inline
#define av_always_inline
Definition: attributes.h:49
uint8_t
uint8_t
Definition: audio_convert.c:194
CIDEntry::dc_bits
const uint8_t * dc_bits
Definition: dnxhddata.h:52
avcodec.h
ff_dnxhd_parse_header_prefix
static av_always_inline uint64_t ff_dnxhd_parse_header_prefix(const uint8_t *buf)
Definition: dnxhddata.h:86
AVCodecContext
main external API structure.
Definition: avcodec.h:526
avpriv_dnxhd_get_frame_size
int avpriv_dnxhd_get_frame_size(int cid)
Definition: dnxhddata.c:1087
CIDEntry::frame_size
unsigned int frame_size
Definition: dnxhddata.h:45
h
h
Definition: vp9dsp_template.c:2038