1cabdff1aSopenharmony_ci/* 2cabdff1aSopenharmony_ci * Mpeg video formats-related defines and utility functions 3cabdff1aSopenharmony_ci * 4cabdff1aSopenharmony_ci * This file is part of FFmpeg. 5cabdff1aSopenharmony_ci * 6cabdff1aSopenharmony_ci * FFmpeg is free software; you can redistribute it and/or 7cabdff1aSopenharmony_ci * modify it under the terms of the GNU Lesser General Public 8cabdff1aSopenharmony_ci * License as published by the Free Software Foundation; either 9cabdff1aSopenharmony_ci * version 2.1 of the License, or (at your option) any later version. 10cabdff1aSopenharmony_ci * 11cabdff1aSopenharmony_ci * FFmpeg is distributed in the hope that it will be useful, 12cabdff1aSopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of 13cabdff1aSopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14cabdff1aSopenharmony_ci * Lesser General Public License for more details. 15cabdff1aSopenharmony_ci * 16cabdff1aSopenharmony_ci * You should have received a copy of the GNU Lesser General Public 17cabdff1aSopenharmony_ci * License along with FFmpeg; if not, write to the Free Software 18cabdff1aSopenharmony_ci * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19cabdff1aSopenharmony_ci */ 20cabdff1aSopenharmony_ci 21cabdff1aSopenharmony_ci#ifndef AVCODEC_MPEGUTILS_H 22cabdff1aSopenharmony_ci#define AVCODEC_MPEGUTILS_H 23cabdff1aSopenharmony_ci 24cabdff1aSopenharmony_ci#include <stdint.h> 25cabdff1aSopenharmony_ci 26cabdff1aSopenharmony_ci#include "libavutil/frame.h" 27cabdff1aSopenharmony_ci 28cabdff1aSopenharmony_ci#include "avcodec.h" 29cabdff1aSopenharmony_ci 30cabdff1aSopenharmony_ci/** 31cabdff1aSopenharmony_ci * Return value for header parsers if frame is not coded. 32cabdff1aSopenharmony_ci * */ 33cabdff1aSopenharmony_ci#define FRAME_SKIPPED 100 34cabdff1aSopenharmony_ci 35cabdff1aSopenharmony_ci/* picture type */ 36cabdff1aSopenharmony_ci#define PICT_TOP_FIELD 1 37cabdff1aSopenharmony_ci#define PICT_BOTTOM_FIELD 2 38cabdff1aSopenharmony_ci#define PICT_FRAME 3 39cabdff1aSopenharmony_ci 40cabdff1aSopenharmony_ci#define MAX_MB_BYTES (30 * 16 * 16 * 3 / 8 + 120) 41cabdff1aSopenharmony_ci#define MAX_FCODE 7 42cabdff1aSopenharmony_ci 43cabdff1aSopenharmony_ci/* MB types */ 44cabdff1aSopenharmony_ci#define MB_TYPE_INTRA4x4 (1 << 0) 45cabdff1aSopenharmony_ci#define MB_TYPE_INTRA16x16 (1 << 1) // FIXME H.264-specific 46cabdff1aSopenharmony_ci#define MB_TYPE_INTRA_PCM (1 << 2) // FIXME H.264-specific 47cabdff1aSopenharmony_ci#define MB_TYPE_16x16 (1 << 3) 48cabdff1aSopenharmony_ci#define MB_TYPE_16x8 (1 << 4) 49cabdff1aSopenharmony_ci#define MB_TYPE_8x16 (1 << 5) 50cabdff1aSopenharmony_ci#define MB_TYPE_8x8 (1 << 6) 51cabdff1aSopenharmony_ci#define MB_TYPE_INTERLACED (1 << 7) 52cabdff1aSopenharmony_ci#define MB_TYPE_DIRECT2 (1 << 8) // FIXME 53cabdff1aSopenharmony_ci#define MB_TYPE_ACPRED (1 << 9) 54cabdff1aSopenharmony_ci#define MB_TYPE_GMC (1 << 10) 55cabdff1aSopenharmony_ci#define MB_TYPE_SKIP (1 << 11) 56cabdff1aSopenharmony_ci#define MB_TYPE_P0L0 (1 << 12) 57cabdff1aSopenharmony_ci#define MB_TYPE_P1L0 (1 << 13) 58cabdff1aSopenharmony_ci#define MB_TYPE_P0L1 (1 << 14) 59cabdff1aSopenharmony_ci#define MB_TYPE_P1L1 (1 << 15) 60cabdff1aSopenharmony_ci#define MB_TYPE_L0 (MB_TYPE_P0L0 | MB_TYPE_P1L0) 61cabdff1aSopenharmony_ci#define MB_TYPE_L1 (MB_TYPE_P0L1 | MB_TYPE_P1L1) 62cabdff1aSopenharmony_ci#define MB_TYPE_L0L1 (MB_TYPE_L0 | MB_TYPE_L1) 63cabdff1aSopenharmony_ci#define MB_TYPE_QUANT (1 << 16) 64cabdff1aSopenharmony_ci#define MB_TYPE_CBP (1 << 17) 65cabdff1aSopenharmony_ci 66cabdff1aSopenharmony_ci#define MB_TYPE_INTRA MB_TYPE_INTRA4x4 // default mb_type if there is just one type 67cabdff1aSopenharmony_ci 68cabdff1aSopenharmony_ci#define IS_INTRA4x4(a) ((a) & MB_TYPE_INTRA4x4) 69cabdff1aSopenharmony_ci#define IS_INTRA16x16(a) ((a) & MB_TYPE_INTRA16x16) 70cabdff1aSopenharmony_ci#define IS_PCM(a) ((a) & MB_TYPE_INTRA_PCM) 71cabdff1aSopenharmony_ci#define IS_INTRA(a) ((a) & 7) 72cabdff1aSopenharmony_ci#define IS_INTER(a) ((a) & (MB_TYPE_16x16 | MB_TYPE_16x8 | \ 73cabdff1aSopenharmony_ci MB_TYPE_8x16 | MB_TYPE_8x8)) 74cabdff1aSopenharmony_ci#define IS_SKIP(a) ((a) & MB_TYPE_SKIP) 75cabdff1aSopenharmony_ci#define IS_INTRA_PCM(a) ((a) & MB_TYPE_INTRA_PCM) 76cabdff1aSopenharmony_ci#define IS_INTERLACED(a) ((a) & MB_TYPE_INTERLACED) 77cabdff1aSopenharmony_ci#define IS_DIRECT(a) ((a) & MB_TYPE_DIRECT2) 78cabdff1aSopenharmony_ci#define IS_GMC(a) ((a) & MB_TYPE_GMC) 79cabdff1aSopenharmony_ci#define IS_16X16(a) ((a) & MB_TYPE_16x16) 80cabdff1aSopenharmony_ci#define IS_16X8(a) ((a) & MB_TYPE_16x8) 81cabdff1aSopenharmony_ci#define IS_8X16(a) ((a) & MB_TYPE_8x16) 82cabdff1aSopenharmony_ci#define IS_8X8(a) ((a) & MB_TYPE_8x8) 83cabdff1aSopenharmony_ci#define IS_SUB_8X8(a) ((a) & MB_TYPE_16x16) // note reused 84cabdff1aSopenharmony_ci#define IS_SUB_8X4(a) ((a) & MB_TYPE_16x8) // note reused 85cabdff1aSopenharmony_ci#define IS_SUB_4X8(a) ((a) & MB_TYPE_8x16) // note reused 86cabdff1aSopenharmony_ci#define IS_SUB_4X4(a) ((a) & MB_TYPE_8x8) // note reused 87cabdff1aSopenharmony_ci#define IS_ACPRED(a) ((a) & MB_TYPE_ACPRED) 88cabdff1aSopenharmony_ci#define IS_QUANT(a) ((a) & MB_TYPE_QUANT) 89cabdff1aSopenharmony_ci#define IS_DIR(a, part, list) ((a) & (MB_TYPE_P0L0 << ((part) + 2 * (list)))) 90cabdff1aSopenharmony_ci 91cabdff1aSopenharmony_ci// does this mb use listX, note does not work if subMBs 92cabdff1aSopenharmony_ci#define USES_LIST(a, list) ((a) & ((MB_TYPE_P0L0 | MB_TYPE_P1L0) << (2 * (list)))) 93cabdff1aSopenharmony_ci 94cabdff1aSopenharmony_ci#define HAS_CBP(a) ((a) & MB_TYPE_CBP) 95cabdff1aSopenharmony_ci 96cabdff1aSopenharmony_ci/* MB types for encoding */ 97cabdff1aSopenharmony_ci#define CANDIDATE_MB_TYPE_INTRA (1 << 0) 98cabdff1aSopenharmony_ci#define CANDIDATE_MB_TYPE_INTER (1 << 1) 99cabdff1aSopenharmony_ci#define CANDIDATE_MB_TYPE_INTER4V (1 << 2) 100cabdff1aSopenharmony_ci#define CANDIDATE_MB_TYPE_SKIPPED (1 << 3) 101cabdff1aSopenharmony_ci 102cabdff1aSopenharmony_ci#define CANDIDATE_MB_TYPE_DIRECT (1 << 4) 103cabdff1aSopenharmony_ci#define CANDIDATE_MB_TYPE_FORWARD (1 << 5) 104cabdff1aSopenharmony_ci#define CANDIDATE_MB_TYPE_BACKWARD (1 << 6) 105cabdff1aSopenharmony_ci#define CANDIDATE_MB_TYPE_BIDIR (1 << 7) 106cabdff1aSopenharmony_ci 107cabdff1aSopenharmony_ci#define CANDIDATE_MB_TYPE_INTER_I (1 << 8) 108cabdff1aSopenharmony_ci#define CANDIDATE_MB_TYPE_FORWARD_I (1 << 9) 109cabdff1aSopenharmony_ci#define CANDIDATE_MB_TYPE_BACKWARD_I (1 << 10) 110cabdff1aSopenharmony_ci#define CANDIDATE_MB_TYPE_BIDIR_I (1 << 11) 111cabdff1aSopenharmony_ci 112cabdff1aSopenharmony_ci#define CANDIDATE_MB_TYPE_DIRECT0 (1 << 12) 113cabdff1aSopenharmony_ci 114cabdff1aSopenharmony_ci#define INPLACE_OFFSET 16 115cabdff1aSopenharmony_ci 116cabdff1aSopenharmony_cienum OutputFormat { 117cabdff1aSopenharmony_ci FMT_MPEG1, 118cabdff1aSopenharmony_ci FMT_H261, 119cabdff1aSopenharmony_ci FMT_H263, 120cabdff1aSopenharmony_ci FMT_MJPEG, 121cabdff1aSopenharmony_ci FMT_SPEEDHQ, 122cabdff1aSopenharmony_ci}; 123cabdff1aSopenharmony_ci 124cabdff1aSopenharmony_ci 125cabdff1aSopenharmony_ci/** 126cabdff1aSopenharmony_ci * Draw a horizontal band if supported. 127cabdff1aSopenharmony_ci * 128cabdff1aSopenharmony_ci * @param h is the normal height, this will be reduced automatically if needed 129cabdff1aSopenharmony_ci */ 130cabdff1aSopenharmony_civoid ff_draw_horiz_band(AVCodecContext *avctx, AVFrame *cur, AVFrame *last, 131cabdff1aSopenharmony_ci int y, int h, int picture_structure, int first_field, 132cabdff1aSopenharmony_ci int low_delay); 133cabdff1aSopenharmony_ci 134cabdff1aSopenharmony_ci/** 135cabdff1aSopenharmony_ci * Print debugging info for the given picture. 136cabdff1aSopenharmony_ci */ 137cabdff1aSopenharmony_civoid ff_print_debug_info2(AVCodecContext *avctx, AVFrame *pict, uint8_t *mbskip_table, 138cabdff1aSopenharmony_ci uint32_t *mbtype_table, int8_t *qscale_table, int16_t (*motion_val[2])[2], 139cabdff1aSopenharmony_ci int mb_width, int mb_height, int mb_stride, int quarter_sample); 140cabdff1aSopenharmony_ci 141cabdff1aSopenharmony_ci#endif /* AVCODEC_MPEGUTILS_H */ 142