MythTV master
element.h
Go to the documentation of this file.
1/*
2 * element.h
3 *
4 *
5 * Copyright (C) 2003 Marcus Metzler <mocm@metzlerbros.de>
6 * Metzler Brothers Systementwicklung GbR
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License
10 * as published by the Free Software Foundation; either version 2
11 * of the License, or (at your option) any later version.
12 *
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * General Public License for more details.
18 *
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
23 * Or, point your browser to http://www.gnu.org/copyleft/gpl.html
24 *
25 */
26
27#ifndef ELEMENT_H
28#define ELEMENT_H
29
30#include <array>
31#include <cstdint>
32
33#include "ringbuffer.h"
34
35#define PICTURE_START_CODE 0x00
36#define SLICE_START_CODE_S 0x01
37
38#define SLICE_START_CODE_E 0xAF
39#define EXCEPT_SLICE 0xb0
40
41#define USR_DATA_START_CODE 0xB2
42#define SEQUENCE_HDR_CODE 0xB3
43#define SEQUENCE_ERR_CODE 0xB4
44#define EXTENSION_START_CODE 0xB5
45#define SEQUENCE_END_CODE 0xB7
46#define GROUP_START_CODE 0xB8
47
48#define SEQUENCE_EXTENSION 0x01
49#define SEQUENCE_DISPLAY_EXTENSION 0x02
50#define PICTURE_CODING_EXTENSION 0x08
51#define QUANT_MATRIX_EXTENSION 0x03
52#define PICTURE_DISPLAY_EXTENSION 0x07
53
54#define I_FRAME 0x01
55#define P_FRAME 0x02
56#define B_FRAME 0x03
57#define D_FRAME 0x04
58
59#define OFF_SIZE 4
60#define FIRST_FIELD 0
61#define SECOND_FIELD 1
62#define VIDEO_FRAME_PICTURE 0x03
63
64#define MPG_TIMESTEP 90000ULL
66
67#define CSPF_FLAG 0x04
68#define INTRAQ_FLAG 0x02
69#define NONINTRAQ_FLAG 0x01
70
71#define AUDIO_SYNCWORD 0x7ff /* or is it 0xfff */
72#define AC3_SYNCWORD 0x0b77
73
74#define NOPULLDOWN 0
75#define PULLDOWN32 1
76#define PULLDOWN23 2
77
78#define CLOCK_MS 27000LL
79#define CLOCK_PER 27000000000LL
80#define SEC_PER (CLOCK_PER/s->frame_rate)
81
82
83enum {
85};
86
87struct sequence_t {
88 int set;
92 uint8_t aspect_ratio;
93 uint32_t frame_rate;
94 uint32_t bit_rate;
96 uint8_t flags;
97 uint8_t intra_quant[64];
98 uint8_t non_intra_quant[64];
100 uint8_t profile;
101 uint8_t progressive;
102 uint8_t chroma;
104 uint8_t pulldown;
107};
108
110 int set;
111 int layer;
112 uint32_t bit_rate;
113 uint32_t frequency;
114 uint32_t mode;
116 uint32_t emphasis;
117 uint32_t framesize;
118 uint32_t frametime;
119 uint32_t off;
120 char language[4];
121};
122
123using audio_sync_buf = std::array<uint8_t,7>;
124
125void pts2time(uint64_t pts, uint8_t *buf, int len);
126int find_audio_sync(ringbuffer *rbuf, audio_sync_buf &buf, int off, int type, int le);
127int find_audio_s(const uint8_t *rbuf, int off, int type, int le);
128int get_video_info(ringbuffer *rbuf, sequence_t *s, int off, int le);
129int get_audio_info(ringbuffer *rbuf, audio_frame_t *af, int off, int le);
130int get_ac3_info(ringbuffer *rbuf, audio_frame_t *af, int off, int le);
131uint64_t add_pts_audio(uint64_t pts, audio_frame_t *aframe, uint64_t frames);
132uint64_t next_ptsdts_video(uint64_t *pts, sequence_t *s, uint64_t fcount, uint64_t gcount);
133void fix_audio_count(uint64_t *acount, audio_frame_t *aframe,
134 uint64_t origpts, uint64_t pts);
135void fix_video_count(sequence_t *s, uint64_t *frame, uint64_t origpts,
136 uint64_t pts, uint64_t origdts, uint64_t dts);
137
139 int off, int le, int type);
140int get_video_ext_info(ringbuffer *rbuf, sequence_t *s, int off, int le);
141
142#endif /* ELEMENT_H */
int get_audio_info(ringbuffer *rbuf, audio_frame_t *af, int off, int le)
Definition: element.cpp:488
@ VIDEO_NONE
Definition: element.h:65
@ VIDEO_PAL
Definition: element.h:65
@ VIDEO_NTSC
Definition: element.h:65
uint64_t add_pts_audio(uint64_t pts, audio_frame_t *aframe, uint64_t frames)
Definition: element.cpp:56
int find_audio_sync(ringbuffer *rbuf, audio_sync_buf &buf, int off, int type, int le)
Definition: element.cpp:329
void fix_audio_count(uint64_t *acount, audio_frame_t *aframe, uint64_t origpts, uint64_t pts)
Definition: element.cpp:65
int get_ac3_info(ringbuffer *rbuf, audio_frame_t *af, int off, int le)
Definition: element.cpp:539
@ AC3
Definition: element.h:84
@ NONE
Definition: element.h:84
@ MPEG_AUDIO
Definition: element.h:84
@ LPCM
Definition: element.h:84
@ MAX_TYPES
Definition: element.h:84
int find_audio_s(const uint8_t *rbuf, int off, int type, int le)
Definition: element.cpp:381
uint64_t next_ptsdts_video(uint64_t *pts, sequence_t *s, uint64_t fcount, uint64_t gcount)
Definition: element.cpp:76
int get_video_ext_info(ringbuffer *rbuf, sequence_t *s, int off, int le)
Definition: element.cpp:596
std::array< uint8_t, 7 > audio_sync_buf
Definition: element.h:123
int get_video_info(ringbuffer *rbuf, sequence_t *s, int off, int le)
Definition: element.cpp:197
void pts2time(uint64_t pts, uint8_t *buf, int len)
Definition: element.cpp:154
int check_audio_header(ringbuffer *rbuf, audio_frame_t *af, int off, int le, int type)
Definition: element.cpp:425
void fix_video_count(sequence_t *s, uint64_t *frame, uint64_t origpts, uint64_t pts, uint64_t origdts, uint64_t dts)
Definition: element.cpp:117
unsigned short uint16_t
Definition: iso6937tables.h:3
std::chrono::duration< CHRONO_TYPE, std::ratio< 1, 90000 > > pts
Definition: mythchrono.h:55
char language[4]
Definition: element.h:120
uint32_t bit_rate
Definition: element.h:112
uint32_t mode
Definition: element.h:114
uint32_t framesize
Definition: element.h:117
uint32_t emphasis
Definition: element.h:116
uint32_t off
Definition: element.h:119
uint32_t frequency
Definition: element.h:113
uint32_t mode_extension
Definition: element.h:115
uint32_t frametime
Definition: element.h:118
uint16_t h_size
Definition: element.h:90
uint16_t v_size
Definition: element.h:91
uint8_t current_tmpref
Definition: element.h:106
int set
Definition: element.h:88
int ext_set
Definition: element.h:89
uint8_t pulldown_set
Definition: element.h:103
uint8_t aspect_ratio
Definition: element.h:92
uint8_t progressive
Definition: element.h:101
uint8_t profile
Definition: element.h:100
uint8_t pulldown
Definition: element.h:104
uint8_t chroma
Definition: element.h:102
uint32_t bit_rate
Definition: element.h:94
int video_format
Definition: element.h:99
uint8_t flags
Definition: element.h:96
uint32_t vbv_buffer_size
Definition: element.h:95
uint8_t current_frame
Definition: element.h:105
uint8_t non_intra_quant[64]
Definition: element.h:98
uint8_t intra_quant[64]
Definition: element.h:97
uint32_t frame_rate
Definition: element.h:93