FFmpeg
Loading...
Searching...
No Matches
error_resilience.h
Go to the documentation of this file.
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
27/// current MB is the first after a resync marker
28#define VP_START 1
29#define ER_AC_ERROR 2
30#define ER_DC_ERROR 4
31#define ER_MV_ERROR 8
32#define ER_AC_END 16
33#define ER_DC_END 32
34#define ER_MV_END 64
35
36#define ER_MB_ERROR (ER_AC_ERROR|ER_DC_ERROR|ER_MV_ERROR)
37#define ER_MB_END (ER_AC_END|ER_DC_END|ER_MV_END)
38
39typedef struct MPVEncContext MPVEncContext;
40
41typedef struct ERPicture {
43 const struct ThreadFrame *tf;
44 const struct ThreadProgress *progress;
45
46 // it is the caller's responsibility to allocate these buffers
47 int16_t (*motion_val[2])[2];
48 int8_t *ref_index[2];
49
50 uint32_t *mb_type;
52} ERPicture;
53
54typedef struct ERContext {
56
57 int (*sad)(MPVEncContext *unused, const uint8_t *blk1,
58 const uint8_t *blk2, ptrdiff_t stride, int h);
59
61 int mb_num;
63 ptrdiff_t mb_stride;
64 ptrdiff_t b8_stride;
65
70 int16_t *dc_val[3];
71 uint8_t *mbskip_table;
72 uint8_t *mbintra_table;
73 int mv[2][4][2];
74
78
79 int8_t *ref_index[2];
80 int16_t (*motion_val_base[2])[2];
81
82 uint16_t pp_time;
83 uint16_t pb_time;
86
87 void (*decode_mb)(void *opaque, int ref, int mv_dir, int mv_type,
88 int (*mv)[2][4][2],
89 int mb_x, int mb_y, int mb_intra, int mb_skipped);
90 void *opaque;
91} ERContext;
92
93int ff_er_init(ERContext *const s);
94
96
97/**
98 * Indicate that a frame has finished decoding and perform error concealment
99 * in case it has been enabled and is necessary and supported.
100 *
101 * @param s ERContext in use
102 * @param decode_error_flags pointer where updated decode_error_flags are written
103 * if supplied; if not, the new flags are directly
104 * applied to the AVFrame whose errors are concealed
105 */
106void ff_er_frame_end(ERContext *s, int *decode_error_flags);
107void ff_er_add_slice(ERContext *s, int startx, int starty, int endx, int endy,
108 int status);
109
110#endif /* AVCODEC_ERROR_RESILIENCE_H */
Libavcodec external API header.
#define s(width, name)
Definition cbs_vp9.c:198
intptr_t atomic_int
Definition stdatomic.h:55
void ff_er_add_slice(ERContext *s, int startx, int starty, int endx, int endy, int status)
Add a slice.
int ff_er_init(ERContext *const s)
void ff_er_frame_end(ERContext *s, int *decode_error_flags)
Indicate that a frame has finished decoding and perform error concealment in case it has been enabled...
void ff_er_frame_start(ERContext *s)
main external API structure.
Definition avcodec.h:443
This structure describes decoded (raw) audio or video data.
Definition frame.h:472
ptrdiff_t mb_stride
uint16_t pp_time
ERPicture next_pic
int8_t * ref_index[2]
int16_t * dc_val[3]
ERPicture cur_pic
uint8_t * er_temp_buffer
uint8_t * error_status_table
uint8_t * mbintra_table
uint16_t pb_time
atomic_int error_count
ptrdiff_t b8_stride
int16_t(*[2] motion_val_base)[2]
void(* decode_mb)(void *opaque, int ref, int mv_dir, int mv_type, int(*mv)[2][4][2], int mb_x, int mb_y, int mb_intra, int mb_skipped)
AVCodecContext * avctx
ERPicture last_pic
int(* sad)(MPVEncContext *unused, const uint8_t *blk1, const uint8_t *blk2, ptrdiff_t stride, int h)
int mv[2][4][2]
uint8_t * mbskip_table
int8_t * ref_index[2]
int16_t(*[2] motion_val)[2]
AVFrame * f
const struct ThreadFrame * tf
const struct ThreadProgress * progress
uint32_t * mb_type
ThreadProgress is an API to easily notify other threads about progress of any kind as long as it can ...
#define stride
static int ref[MAX_W *MAX_W]