Libav
Data Structures | Macros | Functions | Variables
mpeg12dec.c File Reference

MPEG-1/2 decoder. More...

#include "libavutil/attributes.h"
#include "libavutil/internal.h"
#include "libavutil/stereo3d.h"
#include "avcodec.h"
#include "bytestream.h"
#include "dsputil.h"
#include "error_resilience.h"
#include "internal.h"
#include "mpeg12.h"
#include "mpeg12data.h"
#include "mpegvideo.h"
#include "thread.h"
#include "version.h"
#include "xvmc_internal.h"

Go to the source code of this file.

Data Structures

struct  Mpeg1Context
 

Macros

#define MB_TYPE_ZERO_MV   0x20000000
 
#define check_scantable_index(ctx, x)
 
#define MT_FIELD   1
 
#define MT_FRAME   2
 
#define MT_16X8   2
 
#define MT_DMV   3
 
#define DECODE_SLICE_ERROR   -1
 
#define DECODE_SLICE_OK   0
 

Functions

static int mpeg_decode_motion (MpegEncContext *s, int fcode, int pred)
 
static int mpeg1_decode_block_intra (MpegEncContext *s, int16_t *block, int n)
 
int ff_mpeg1_decode_block_intra (MpegEncContext *s, int16_t *block, int n)
 
static int mpeg1_decode_block_inter (MpegEncContext *s, int16_t *block, int n)
 
static int mpeg1_fast_decode_block_inter (MpegEncContext *s, int16_t *block, int n)
 
static int mpeg2_decode_block_non_intra (MpegEncContext *s, int16_t *block, int n)
 
static int mpeg2_fast_decode_block_non_intra (MpegEncContext *s, int16_t *block, int n)
 
static int mpeg2_decode_block_intra (MpegEncContext *s, int16_t *block, int n)
 
static int mpeg2_fast_decode_block_intra (MpegEncContext *s, int16_t *block, int n)
 
static int get_dmv (MpegEncContext *s)
 
static int get_qscale (MpegEncContext *s)
 
static int mpeg_decode_mb (MpegEncContext *s, int16_t block[12][64])
 
static av_cold int mpeg_decode_init (AVCodecContext *avctx)
 
static int mpeg_decode_update_thread_context (AVCodecContext *avctx, const AVCodecContext *avctx_from)
 
static void quant_matrix_rebuild (uint16_t *matrix, const uint8_t *old_perm, const uint8_t *new_perm)
 
static enum AVPixelFormat mpeg_get_pixelformat (AVCodecContext *avctx)
 
static int mpeg_decode_postinit (AVCodecContext *avctx)
 
static int mpeg1_decode_picture (AVCodecContext *avctx, const uint8_t *buf, int buf_size)
 
static void mpeg_decode_sequence_extension (Mpeg1Context *s1)
 
static void mpeg_decode_sequence_display_extension (Mpeg1Context *s1)
 
static void mpeg_decode_picture_display_extension (Mpeg1Context *s1)
 
static int load_matrix (MpegEncContext *s, uint16_t matrix0[64], uint16_t matrix1[64], int intra)
 
static void mpeg_decode_quant_matrix_extension (MpegEncContext *s)
 
static void mpeg_decode_picture_coding_extension (Mpeg1Context *s1)
 
static int mpeg_field_start (MpegEncContext *s, const uint8_t *buf, int buf_size)
 
static int mpeg_decode_slice (MpegEncContext *s, int mb_y, const uint8_t **buf, int buf_size)
 Decode a slice. More...
 
static int slice_decode_thread (AVCodecContext *c, void *arg)
 
static int slice_end (AVCodecContext *avctx, AVFrame *pict)
 Handle slice ends. More...
 
static int mpeg1_decode_sequence (AVCodecContext *avctx, const uint8_t *buf, int buf_size)
 
static int vcr2_init_sequence (AVCodecContext *avctx)
 
static int mpeg_decode_a53_cc (AVCodecContext *avctx, const uint8_t *p, int buf_size)
 
static void mpeg_decode_user_data (AVCodecContext *avctx, const uint8_t *p, int buf_size)
 
static void mpeg_decode_gop (AVCodecContext *avctx, const uint8_t *buf, int buf_size)
 
static int decode_chunks (AVCodecContext *avctx, AVFrame *picture, int *got_output, const uint8_t *buf, int buf_size)
 
static int mpeg_decode_frame (AVCodecContext *avctx, void *data, int *got_output, AVPacket *avpkt)
 
static void flush (AVCodecContext *avctx)
 
static av_cold int mpeg_decode_end (AVCodecContext *avctx)
 

Variables

static const uint32_t ptype2mb_type [7]
 
static const uint32_t btype2mb_type [11]
 
static const uint8_t non_linear_qscale [32]
 
static enum AVPixelFormat mpeg12_hwaccel_pixfmt_list_420 []
 
static const AVProfile mpeg2_video_profiles []
 
AVCodec ff_mpeg1video_decoder
 
AVCodec ff_mpeg2video_decoder
 

Detailed Description

MPEG-1/2 decoder.

Definition in file mpeg12dec.c.

Macro Definition Documentation

#define MB_TYPE_ZERO_MV   0x20000000

Definition at line 63 of file mpeg12dec.c.

Referenced by mpeg_decode_mb().

#define check_scantable_index (   ctx,
 
)
Value:
do { \
if ((x) > 63) { \
av_log(ctx->avctx, AV_LOG_ERROR, "ac-tex damaged at %d %d\n", \
ctx->mb_x, ctx->mb_y); \
} \
} while (0)
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition: error.h:54
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:123
void av_log(void *avcl, int level, const char *fmt,...)
Definition: log.c:148
return
if(ac->has_optimized_func)

Definition at line 123 of file mpeg12dec.c.

Referenced by mpeg1_decode_block_inter(), mpeg1_decode_block_intra(), mpeg1_fast_decode_block_inter(), mpeg2_decode_block_intra(), mpeg2_decode_block_non_intra(), mpeg2_fast_decode_block_intra(), and mpeg2_fast_decode_block_non_intra().

#define MT_FIELD   1

Definition at line 699 of file mpeg12dec.c.

Referenced by mpeg_decode_mb().

#define MT_FRAME   2

Definition at line 700 of file mpeg12dec.c.

Referenced by mpeg_decode_mb().

#define MT_16X8   2

Definition at line 701 of file mpeg12dec.c.

#define MT_DMV   3

Definition at line 702 of file mpeg12dec.c.

Referenced by mpeg_decode_mb().

#define DECODE_SLICE_ERROR   -1

Definition at line 1671 of file mpeg12dec.c.

Referenced by mpeg_decode_slice().

#define DECODE_SLICE_OK   0

Definition at line 1672 of file mpeg12dec.c.

Referenced by mpeg_decode_slice().

Function Documentation

static int mpeg_decode_motion ( MpegEncContext s,
int  fcode,
int  pred 
)
static

Definition at line 97 of file mpeg12dec.c.

Referenced by mpeg_decode_mb().

static int mpeg1_decode_block_intra ( MpegEncContext s,
int16_t *  block,
int  n 
)
inlinestatic

Definition at line 132 of file mpeg12dec.c.

Referenced by ff_mpeg1_decode_block_intra(), and mpeg_decode_mb().

int ff_mpeg1_decode_block_intra ( MpegEncContext s,
int16_t *  block,
int  n 
)

Definition at line 208 of file mpeg12dec.c.

Referenced by tqi_decode_mb().

static int mpeg1_decode_block_inter ( MpegEncContext s,
int16_t *  block,
int  n 
)
inlinestatic

Definition at line 213 of file mpeg12dec.c.

Referenced by mpeg_decode_mb().

static int mpeg1_fast_decode_block_inter ( MpegEncContext s,
int16_t *  block,
int  n 
)
inlinestatic

Definition at line 293 of file mpeg12dec.c.

Referenced by mpeg_decode_mb().

static int mpeg2_decode_block_non_intra ( MpegEncContext s,
int16_t *  block,
int  n 
)
inlinestatic

Definition at line 373 of file mpeg12dec.c.

Referenced by mpeg_decode_mb().

static int mpeg2_fast_decode_block_non_intra ( MpegEncContext s,
int16_t *  block,
int  n 
)
inlinestatic

Definition at line 455 of file mpeg12dec.c.

Referenced by mpeg_decode_mb().

static int mpeg2_decode_block_intra ( MpegEncContext s,
int16_t *  block,
int  n 
)
inlinestatic

Definition at line 521 of file mpeg12dec.c.

Referenced by mpeg_decode_mb().

static int mpeg2_fast_decode_block_intra ( MpegEncContext s,
int16_t *  block,
int  n 
)
inlinestatic

Definition at line 602 of file mpeg12dec.c.

Referenced by mpeg_decode_mb().

static int get_dmv ( MpegEncContext s)
inlinestatic

Definition at line 681 of file mpeg12dec.c.

Referenced by mpeg_decode_mb().

static int get_qscale ( MpegEncContext s)
inlinestatic

Definition at line 689 of file mpeg12dec.c.

Referenced by mpeg_decode_mb(), and mpeg_decode_slice().

static int mpeg_decode_mb ( MpegEncContext s,
int16_t  block[12][64] 
)
static

Definition at line 704 of file mpeg12dec.c.

Referenced by mpeg_decode_slice().

static av_cold int mpeg_decode_init ( AVCodecContext avctx)
static

Definition at line 1090 of file mpeg12dec.c.

static int mpeg_decode_update_thread_context ( AVCodecContext avctx,
const AVCodecContext avctx_from 
)
static

Definition at line 1121 of file mpeg12dec.c.

static void quant_matrix_rebuild ( uint16_t *  matrix,
const uint8_t old_perm,
const uint8_t new_perm 
)
static

Definition at line 1146 of file mpeg12dec.c.

Referenced by mpeg_decode_postinit().

static enum AVPixelFormat mpeg_get_pixelformat ( AVCodecContext avctx)
static

Definition at line 1180 of file mpeg12dec.c.

Referenced by mpeg_decode_postinit(), and vcr2_init_sequence().

static int mpeg_decode_postinit ( AVCodecContext avctx)
static

Definition at line 1202 of file mpeg12dec.c.

Referenced by decode_chunks().

static int mpeg1_decode_picture ( AVCodecContext avctx,
const uint8_t buf,
int  buf_size 
)
static

Definition at line 1322 of file mpeg12dec.c.

Referenced by decode_chunks().

static void mpeg_decode_sequence_extension ( Mpeg1Context s1)
static

Definition at line 1366 of file mpeg12dec.c.

Referenced by decode_chunks().

static void mpeg_decode_sequence_display_extension ( Mpeg1Context s1)
static

Definition at line 1403 of file mpeg12dec.c.

Referenced by decode_chunks().

static void mpeg_decode_picture_display_extension ( Mpeg1Context s1)
static

Definition at line 1427 of file mpeg12dec.c.

Referenced by decode_chunks().

static int load_matrix ( MpegEncContext s,
uint16_t  matrix0[64],
uint16_t  matrix1[64],
int  intra 
)
static

Definition at line 1460 of file mpeg12dec.c.

Referenced by mpeg1_decode_sequence(), and mpeg_decode_quant_matrix_extension().

static void mpeg_decode_quant_matrix_extension ( MpegEncContext s)
static

Definition at line 1483 of file mpeg12dec.c.

Referenced by decode_chunks().

static void mpeg_decode_picture_coding_extension ( Mpeg1Context s1)
static

Definition at line 1497 of file mpeg12dec.c.

Referenced by decode_chunks().

static int mpeg_field_start ( MpegEncContext s,
const uint8_t buf,
int  buf_size 
)
static

Definition at line 1577 of file mpeg12dec.c.

Referenced by decode_chunks().

static int mpeg_decode_slice ( MpegEncContext s,
int  mb_y,
const uint8_t **  buf,
int  buf_size 
)
static

Decode a slice.

MpegEncContext.mb_y must be set to the MB row from the startcode.

Returns
DECODE_SLICE_ERROR if the slice is damaged, DECODE_SLICE_OK if this slice is OK

Definition at line 1680 of file mpeg12dec.c.

Referenced by decode_chunks(), and slice_decode_thread().

static int slice_decode_thread ( AVCodecContext c,
void arg 
)
static

Definition at line 1925 of file mpeg12dec.c.

Referenced by decode_chunks().

static int slice_end ( AVCodecContext avctx,
AVFrame pict 
)
static

Handle slice ends.

Returns
1 if it seems to be the last slice

Definition at line 1973 of file mpeg12dec.c.

Referenced by decode_chunks(), decode_frame(), filter_slice(), filter_slice_chroma(), and filter_slice_luma().

static int mpeg1_decode_sequence ( AVCodecContext avctx,
const uint8_t buf,
int  buf_size 
)
static

Definition at line 2026 of file mpeg12dec.c.

Referenced by decode_chunks().

static int vcr2_init_sequence ( AVCodecContext avctx)
static

Definition at line 2108 of file mpeg12dec.c.

Referenced by mpeg_decode_frame().

static int mpeg_decode_a53_cc ( AVCodecContext avctx,
const uint8_t p,
int  buf_size 
)
static

Definition at line 2162 of file mpeg12dec.c.

Referenced by mpeg_decode_user_data().

static void mpeg_decode_user_data ( AVCodecContext avctx,
const uint8_t p,
int  buf_size 
)
static

Definition at line 2215 of file mpeg12dec.c.

Referenced by decode_chunks().

static void mpeg_decode_gop ( AVCodecContext avctx,
const uint8_t buf,
int  buf_size 
)
static

Definition at line 2268 of file mpeg12dec.c.

Referenced by decode_chunks().

static int decode_chunks ( AVCodecContext avctx,
AVFrame picture,
int *  got_output,
const uint8_t buf,
int  buf_size 
)
static

Definition at line 2301 of file mpeg12dec.c.

Referenced by mpeg_decode_frame().

static int mpeg_decode_frame ( AVCodecContext avctx,
void data,
int *  got_output,
AVPacket avpkt 
)
static

Definition at line 2567 of file mpeg12dec.c.

static void flush ( AVCodecContext avctx)
static

Definition at line 2616 of file mpeg12dec.c.

static av_cold int mpeg_decode_end ( AVCodecContext avctx)
static

Definition at line 2626 of file mpeg12dec.c.

Variable Documentation

const uint32_t ptype2mb_type[7]
static
Initial value:
= {
MB_TYPE_L0 | MB_TYPE_CBP,
MB_TYPE_QUANT | MB_TYPE_L0 | MB_TYPE_CBP,
}
#define MB_TYPE_QUANT
Definition: avcodec.h:821
#define MB_TYPE_INTRA
Definition: mpegvideo.h:157
#define MB_TYPE_16x16
Definition: avcodec.h:805
#define MB_TYPE_CBP
Definition: avcodec.h:822
#define MB_TYPE_ZERO_MV
Definition: mpeg12dec.c:63
#define MB_TYPE_L0
Definition: avcodec.h:818

Definition at line 65 of file mpeg12dec.c.

Referenced by mpeg_decode_mb().

const uint32_t btype2mb_type[11]
static
Initial value:
= {
MB_TYPE_L1 | MB_TYPE_CBP,
MB_TYPE_L0 | MB_TYPE_CBP,
MB_TYPE_L0L1 | MB_TYPE_CBP,
MB_TYPE_QUANT | MB_TYPE_L1 | MB_TYPE_CBP,
MB_TYPE_QUANT | MB_TYPE_L0 | MB_TYPE_CBP,
MB_TYPE_QUANT | MB_TYPE_L0L1 | MB_TYPE_CBP,
}
#define MB_TYPE_QUANT
Definition: avcodec.h:821
#define MB_TYPE_INTRA
Definition: mpegvideo.h:157
#define MB_TYPE_L0L1
Definition: avcodec.h:820
#define MB_TYPE_L1
Definition: avcodec.h:819
#define MB_TYPE_CBP
Definition: avcodec.h:822
#define MB_TYPE_L0
Definition: avcodec.h:818

Definition at line 75 of file mpeg12dec.c.

Referenced by mpeg_decode_mb().

const uint8_t non_linear_qscale[32]
static
Initial value:
= {
0, 1, 2, 3, 4, 5, 6, 7,
8, 10, 12, 14, 16, 18, 20, 22,
24, 28, 32, 36, 40, 44, 48, 52,
56, 64, 72, 80, 88, 96, 104, 112,
}

Definition at line 89 of file mpeg12dec.c.

Referenced by get_qscale().

enum AVPixelFormat mpeg12_hwaccel_pixfmt_list_420[]
static
Initial value:
= {
}
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
Definition: pixfmt.h:65

Definition at line 1166 of file mpeg12dec.c.

Referenced by mpeg_get_pixelformat().

const AVProfile mpeg2_video_profiles[]
static
Initial value:
= {
{ FF_PROFILE_MPEG2_422, "4:2:2" },
{ FF_PROFILE_MPEG2_HIGH, "High" },
{ FF_PROFILE_MPEG2_SS, "Spatially Scalable" },
{ FF_PROFILE_MPEG2_SNR_SCALABLE, "SNR Scalable" },
{ FF_PROFILE_MPEG2_MAIN, "Main" },
{ FF_PROFILE_MPEG2_SIMPLE, "Simple" },
{ FF_PROFILE_RESERVED, "Reserved" },
{ FF_PROFILE_RESERVED, "Reserved" },
}
#define FF_PROFILE_MPEG2_MAIN
Definition: avcodec.h:2621
#define FF_PROFILE_MPEG2_SNR_SCALABLE
Definition: avcodec.h:2620
#define FF_PROFILE_MPEG2_HIGH
Definition: avcodec.h:2618
#define FF_PROFILE_UNKNOWN
Definition: avcodec.h:2597
#define FF_PROFILE_MPEG2_422
Definition: avcodec.h:2617
#define FF_PROFILE_MPEG2_SS
Definition: avcodec.h:2619
#define FF_PROFILE_RESERVED
Definition: avcodec.h:2598
#define FF_PROFILE_MPEG2_SIMPLE
Definition: avcodec.h:2622

Definition at line 2636 of file mpeg12dec.c.

AVCodec ff_mpeg1video_decoder
Initial value:
= {
.name = "mpeg1video",
.long_name = NULL_IF_CONFIG_SMALL("MPEG-1 video"),
.priv_data_size = sizeof(Mpeg1Context),
}
#define CODEC_CAP_TRUNCATED
Definition: avcodec.h:712
static av_cold int mpeg_decode_init(AVCodecContext *avctx)
Definition: mpeg12dec.c:1090
static int mpeg_decode_update_thread_context(AVCodecContext *avctx, const AVCodecContext *avctx_from)
Definition: mpeg12dec.c:1121
static int decode(MimicContext *ctx, int quality, int num_coeffs, int is_iframe)
Definition: mimic.c:269
#define CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
Definition: avcodec.h:711
#define CODEC_CAP_DELAY
Encoder or decoder requires flushing with NULL input at the end in order to give the complete and cor...
Definition: avcodec.h:740
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
Definition: internal.h:142
#define ONLY_IF_THREADS_ENABLED(x)
Define a function with only the non-default version specified.
Definition: internal.h:182
#define CODEC_CAP_DRAW_HORIZ_BAND
Decoder can use draw_horiz_band callback.
Definition: avcodec.h:705
static av_cold int mpeg_decode_end(AVCodecContext *avctx)
Definition: mpeg12dec.c:2626
static void close(AVCodecParserContext *s)
Definition: h264_parser.c:489
static int mpeg_decode_frame(AVCodecContext *avctx, void *data, int *got_output, AVPacket *avpkt)
Definition: mpeg12dec.c:2567
#define CODEC_CAP_SLICE_THREADS
Codec supports slice-based (or partition-based) multithreading.
Definition: avcodec.h:786
static void flush(AVCodecContext *avctx)
Definition: mpeg12dec.c:2616
static av_cold int init(AVCodecParserContext *s)
Definition: h264_parser.c:498

Definition at line 2648 of file mpeg12dec.c.

AVCodec ff_mpeg2video_decoder
Initial value:
= {
.name = "mpeg2video",
.long_name = NULL_IF_CONFIG_SMALL("MPEG-2 video"),
.priv_data_size = sizeof(Mpeg1Context),
}
static const AVProfile profiles[]
Definition: dcadec.c:2072
static const AVProfile mpeg2_video_profiles[]
Definition: mpeg12dec.c:2636
#define CODEC_CAP_TRUNCATED
Definition: avcodec.h:712
static av_cold int mpeg_decode_init(AVCodecContext *avctx)
Definition: mpeg12dec.c:1090
static int decode(MimicContext *ctx, int quality, int num_coeffs, int is_iframe)
Definition: mimic.c:269
#define CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
Definition: avcodec.h:711
#define CODEC_CAP_DELAY
Encoder or decoder requires flushing with NULL input at the end in order to give the complete and cor...
Definition: avcodec.h:740
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
Definition: internal.h:142
#define CODEC_CAP_DRAW_HORIZ_BAND
Decoder can use draw_horiz_band callback.
Definition: avcodec.h:705
static av_cold int mpeg_decode_end(AVCodecContext *avctx)
Definition: mpeg12dec.c:2626
preferred ID for MPEG-1/2 video decoding
Definition: avcodec.h:110
static void close(AVCodecParserContext *s)
Definition: h264_parser.c:489
static int mpeg_decode_frame(AVCodecContext *avctx, void *data, int *got_output, AVPacket *avpkt)
Definition: mpeg12dec.c:2567
#define CODEC_CAP_SLICE_THREADS
Codec supports slice-based (or partition-based) multithreading.
Definition: avcodec.h:786
static void flush(AVCodecContext *avctx)
Definition: mpeg12dec.c:2616
static av_cold int init(AVCodecParserContext *s)
Definition: h264_parser.c:498

Definition at line 2664 of file mpeg12dec.c.