FFmpeg
libavcodec
error_resilience.h
1
/*
2
* This file is part of FFmpeg.
3
*
4
* FFmpeg is free software; you can redistribute it and/or
5
* modify it under the terms of the GNU Lesser General Public
6
* License as published by the Free Software Foundation; either
7
* version 2.1 of the License, or (at your option) any later version.
8
*
9
* FFmpeg is distributed in the hope that it will be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
* Lesser General Public License for more details.
13
*
14
* You should have received a copy of the GNU Lesser General Public
15
* License along with FFmpeg; if not, write to the Free Software
16
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
*/
18
19
#ifndef AVCODEC_ERROR_RESILIENCE_H
20
#define AVCODEC_ERROR_RESILIENCE_H
21
22
#include <stdint.h>
23
#include <stdatomic.h>
24
25
#include "
avcodec.h
"
26
#include "me_cmp.h"
27
#include "thread.h"
28
30
#define VP_START 1
31
#define ER_AC_ERROR 2
32
#define ER_DC_ERROR 4
33
#define ER_MV_ERROR 8
34
#define ER_AC_END 16
35
#define ER_DC_END 32
36
#define ER_MV_END 64
37
38
#define ER_MB_ERROR (ER_AC_ERROR|ER_DC_ERROR|ER_MV_ERROR)
39
#define ER_MB_END (ER_AC_END|ER_DC_END|ER_MV_END)
40
41
typedef
struct
ERPicture
{
42
AVFrame
*f;
43
ThreadFrame
*tf;
44
45
// it is the caller's responsibility to allocate these buffers
46
int16_t (*motion_val[2])[2];
47
int8_t *ref_index[2];
48
49
uint32_t *mb_type;
50
int
field_picture;
51
}
ERPicture
;
52
53
typedef
struct
ERContext
{
54
AVCodecContext
*avctx;
55
MECmpContext
mecc;
56
int
mecc_inited;
57
58
int
*mb_index2xy;
59
int
mb_num;
60
int
mb_width, mb_height;
61
ptrdiff_t mb_stride;
62
ptrdiff_t b8_stride;
63
64
atomic_int error_count;
65
int
error_occurred;
66
uint8_t *error_status_table;
67
uint8_t *er_temp_buffer;
68
int16_t *dc_val[3];
69
uint8_t *mbskip_table;
70
uint8_t *mbintra_table;
71
int
mv[2][4][2];
72
73
ERPicture
cur_pic;
74
ERPicture
last_pic;
75
ERPicture
next_pic;
76
77
AVBufferRef
*ref_index_buf[2];
78
AVBufferRef
*motion_val_buf[2];
79
80
uint16_t pp_time;
81
uint16_t pb_time;
82
int
quarter_sample;
83
int
partitioned_frame;
84
int
ref_count;
85
86
void (*decode_mb)(
void
*opaque,
int
ref,
int
mv_dir,
int
mv_type,
87
int (*mv)[2][4][2],
88
int
mb_x,
int
mb_y,
int
mb_intra,
int
mb_skipped);
89
void
*opaque;
90
}
ERContext
;
91
92
void
ff_er_frame_start(
ERContext
*s);
93
void
ff_er_frame_end(
ERContext
*s);
94
void
ff_er_add_slice
(
ERContext
*s,
int
startx,
int
starty,
int
endx,
int
endy,
95
int
status);
96
97
#endif
/* AVCODEC_ERROR_RESILIENCE_H */
AVFrame
This structure describes decoded (raw) audio or video data.
Definition:
frame.h:218
ERContext
Definition:
error_resilience.h:53
ff_er_add_slice
void ff_er_add_slice(ERContext *s, int startx, int starty, int endx, int endy, int status)
Add a slice.
Definition:
error_resilience.c:831
ThreadFrame
Definition:
thread.h:34
avcodec.h
Libavcodec external API header.
AVCodecContext
main external API structure.
Definition:
avcodec.h:1518
AVBufferRef
A reference to a data buffer.
Definition:
buffer.h:81
MECmpContext
Definition:
me_cmp.h:53
ERPicture
Definition:
error_resilience.h:41
Generated by
1.8.12