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

MPEG-1/2 decoder. More...

#include <inttypes.h>
#include "libavutil/attributes.h"
#include "libavutil/internal.h"
#include "libavutil/stereo3d.h"
#include "avcodec.h"
#include "bytestream.h"
#include "error_resilience.h"
#include "idctdsp.h"
#include "internal.h"
#include "mpeg_er.h"
#include "mpeg12.h"
#include "mpeg12data.h"
#include "mpegutils.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 69 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:168
return
if(ac->has_optimized_func)

Definition at line 129 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 705 of file mpeg12dec.c.

Referenced by mpeg_decode_mb().

#define MT_FRAME   2

Definition at line 706 of file mpeg12dec.c.

Referenced by mpeg_decode_mb().

#define MT_16X8   2

Definition at line 707 of file mpeg12dec.c.

#define MT_DMV   3

Definition at line 708 of file mpeg12dec.c.

Referenced by mpeg_decode_mb().

#define DECODE_SLICE_ERROR   -1

Definition at line 1690 of file mpeg12dec.c.

Referenced by mpeg_decode_slice().

#define DECODE_SLICE_OK   0

Definition at line 1691 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 103 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 138 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 214 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 219 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 299 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 379 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 461 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 527 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 608 of file mpeg12dec.c.

Referenced by mpeg_decode_mb().

static int get_dmv ( MpegEncContext s)
inlinestatic

Definition at line 687 of file mpeg12dec.c.

Referenced by mpeg_decode_mb().

static int get_qscale ( MpegEncContext s)
inlinestatic

Definition at line 695 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 710 of file mpeg12dec.c.

Referenced by mpeg_decode_slice().

static av_cold int mpeg_decode_init ( AVCodecContext avctx)
static

Definition at line 1096 of file mpeg12dec.c.

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

Definition at line 1125 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 1150 of file mpeg12dec.c.

Referenced by mpeg_decode_postinit().

static enum AVPixelFormat mpeg_get_pixelformat ( AVCodecContext avctx)
static

Definition at line 1184 of file mpeg12dec.c.

Referenced by mpeg_decode_postinit(), and vcr2_init_sequence().

static int mpeg_decode_postinit ( AVCodecContext avctx)
static

Definition at line 1206 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 1328 of file mpeg12dec.c.

Referenced by decode_chunks().

static void mpeg_decode_sequence_extension ( Mpeg1Context s1)
static

Definition at line 1372 of file mpeg12dec.c.

Referenced by decode_chunks().

static void mpeg_decode_sequence_display_extension ( Mpeg1Context s1)
static

Definition at line 1409 of file mpeg12dec.c.

Referenced by decode_chunks().

static void mpeg_decode_picture_display_extension ( Mpeg1Context s1)
static

Definition at line 1433 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 1467 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 1490 of file mpeg12dec.c.

Referenced by decode_chunks().

static void mpeg_decode_picture_coding_extension ( Mpeg1Context s1)
static

Definition at line 1504 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 1584 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 1699 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 1944 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 1992 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 2045 of file mpeg12dec.c.

Referenced by decode_chunks().

static int vcr2_init_sequence ( AVCodecContext avctx)
static

Definition at line 2127 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 2181 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 2234 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 2293 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 2326 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 2592 of file mpeg12dec.c.

static void flush ( AVCodecContext avctx)
static

Definition at line 2641 of file mpeg12dec.c.

static av_cold int mpeg_decode_end ( AVCodecContext avctx)
static

Definition at line 2651 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_INTRA
Definition: mpegutils.h:69
#define MB_TYPE_QUANT
Definition: avcodec.h:794
#define MB_TYPE_16x16
Definition: avcodec.h:778
#define MB_TYPE_CBP
Definition: avcodec.h:795
#define MB_TYPE_ZERO_MV
Definition: mpeg12dec.c:69
#define MB_TYPE_L0
Definition: avcodec.h:791

Definition at line 71 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_INTRA
Definition: mpegutils.h:69
#define MB_TYPE_QUANT
Definition: avcodec.h:794
#define MB_TYPE_L0L1
Definition: avcodec.h:793
#define MB_TYPE_L1
Definition: avcodec.h:792
#define MB_TYPE_CBP
Definition: avcodec.h:795
#define MB_TYPE_L0
Definition: avcodec.h:791

Definition at line 81 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 95 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 1170 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:2641
#define FF_PROFILE_MPEG2_SNR_SCALABLE
Definition: avcodec.h:2640
#define FF_PROFILE_MPEG2_HIGH
Definition: avcodec.h:2638
#define FF_PROFILE_UNKNOWN
Definition: avcodec.h:2617
#define FF_PROFILE_MPEG2_422
Definition: avcodec.h:2637
#define FF_PROFILE_MPEG2_SS
Definition: avcodec.h:2639
#define FF_PROFILE_RESERVED
Definition: avcodec.h:2618
#define FF_PROFILE_MPEG2_SIMPLE
Definition: avcodec.h:2642

Definition at line 2661 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:685
static av_cold int mpeg_decode_init(AVCodecContext *avctx)
Definition: mpeg12dec.c:1096
static int mpeg_decode_update_thread_context(AVCodecContext *avctx, const AVCodecContext *avctx_from)
Definition: mpeg12dec.c:1125
static int decode(MimicContext *ctx, int quality, int num_coeffs, int is_iframe)
Definition: mimic.c:275
#define CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
Definition: avcodec.h:684
#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:713
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
Definition: internal.h:150
#define ONLY_IF_THREADS_ENABLED(x)
Define a function with only the non-default version specified.
Definition: internal.h:190
#define CODEC_CAP_DRAW_HORIZ_BAND
Decoder can use draw_horiz_band callback.
Definition: avcodec.h:678
static av_cold int mpeg_decode_end(AVCodecContext *avctx)
Definition: mpeg12dec.c:2651
static void close(AVCodecParserContext *s)
Definition: h264_parser.c:490
static int mpeg_decode_frame(AVCodecContext *avctx, void *data, int *got_output, AVPacket *avpkt)
Definition: mpeg12dec.c:2592
#define CODEC_CAP_SLICE_THREADS
Codec supports slice-based (or partition-based) multithreading.
Definition: avcodec.h:759
static void flush(AVCodecContext *avctx)
Definition: mpeg12dec.c:2641
static av_cold int init(AVCodecParserContext *s)
Definition: h264_parser.c:499

Definition at line 2673 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:2066
static const AVProfile mpeg2_video_profiles[]
Definition: mpeg12dec.c:2661
#define CODEC_CAP_TRUNCATED
Definition: avcodec.h:685
static av_cold int mpeg_decode_init(AVCodecContext *avctx)
Definition: mpeg12dec.c:1096
static int decode(MimicContext *ctx, int quality, int num_coeffs, int is_iframe)
Definition: mimic.c:275
#define CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
Definition: avcodec.h:684
#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:713
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
Definition: internal.h:150
#define CODEC_CAP_DRAW_HORIZ_BAND
Decoder can use draw_horiz_band callback.
Definition: avcodec.h:678
static av_cold int mpeg_decode_end(AVCodecContext *avctx)
Definition: mpeg12dec.c:2651
preferred ID for MPEG-1/2 video decoding
Definition: avcodec.h:110
static void close(AVCodecParserContext *s)
Definition: h264_parser.c:490
static int mpeg_decode_frame(AVCodecContext *avctx, void *data, int *got_output, AVPacket *avpkt)
Definition: mpeg12dec.c:2592
#define CODEC_CAP_SLICE_THREADS
Codec supports slice-based (or partition-based) multithreading.
Definition: avcodec.h:759
static void flush(AVCodecContext *avctx)
Definition: mpeg12dec.c:2641
static av_cold int init(AVCodecParserContext *s)
Definition: h264_parser.c:499

Definition at line 2689 of file mpeg12dec.c.