libavcodec/error_resilience.h
54974c62
 /*
1fad547c
  * This file is part of FFmpeg.
54974c62
  *
1fad547c
  * FFmpeg is free software; you can redistribute it and/or
54974c62
  * modify it under the terms of the GNU Lesser General Public
  * License as published by the Free Software Foundation; either
  * version 2.1 of the License, or (at your option) any later version.
  *
1fad547c
  * FFmpeg is distributed in the hope that it will be useful,
54974c62
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public
1fad547c
  * License along with FFmpeg; if not, write to the Free Software
54974c62
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
 #ifndef AVCODEC_ERROR_RESILIENCE_H
 #define AVCODEC_ERROR_RESILIENCE_H
 
1f8f43a5
 #include <stdint.h>
 
 #include "avcodec.h"
2d604443
 #include "me_cmp.h"
d66e305b
 #include "thread.h"
1f8f43a5
 
54974c62
 ///< current MB is the first after a resync marker
 #define VP_START               1
 #define ER_AC_ERROR            2
 #define ER_DC_ERROR            4
 #define ER_MV_ERROR            8
 #define ER_AC_END              16
 #define ER_DC_END              32
 #define ER_MV_END              64
 
 #define ER_MB_ERROR (ER_AC_ERROR|ER_DC_ERROR|ER_MV_ERROR)
 #define ER_MB_END   (ER_AC_END|ER_DC_END|ER_MV_END)
 
d66e305b
 typedef struct ERPicture {
     AVFrame *f;
     ThreadFrame *tf;
 
41ed7ab4
     // it is the caller's responsibility to allocate these buffers
d66e305b
     int16_t (*motion_val[2])[2];
     int8_t *ref_index[2];
 
     uint32_t *mb_type;
     int field_picture;
 } ERPicture;
 
54974c62
 typedef struct ERContext {
     AVCodecContext *avctx;
cf1e0786
     MECmpContext mecc;
     int mecc_inited;
54974c62
 
     int *mb_index2xy;
     int mb_num;
     int mb_width, mb_height;
6b527629
     ptrdiff_t mb_stride;
     ptrdiff_t b8_stride;
54974c62
 
cf880ccb
     volatile int error_count;
     int error_occurred;
54974c62
     uint8_t *error_status_table;
     uint8_t *er_temp_buffer;
     int16_t *dc_val[3];
     uint8_t *mbskip_table;
     uint8_t *mbintra_table;
     int mv[2][4][2];
 
d66e305b
     ERPicture cur_pic;
     ERPicture last_pic;
     ERPicture next_pic;
54974c62
 
4f22e39e
     AVBufferRef *ref_index_buf[2];
     AVBufferRef *motion_val_buf[2];
 
54974c62
     uint16_t pp_time;
     uint16_t pb_time;
     int quarter_sample;
     int partitioned_frame;
     int ref_count;
 
     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);
     void *opaque;
 } ERContext;
 
 void ff_er_frame_start(ERContext *s);
 void ff_er_frame_end(ERContext *s);
 void ff_er_add_slice(ERContext *s, int startx, int starty, int endx, int endy,
                      int status);
 
 #endif /* AVCODEC_ERROR_RESILIENCE_H */