FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Data Structures | Macros | Functions | Variables
mpeg12dec.c File Reference

MPEG-1/2 decoder. More...

#include <inttypes.h>
#include "libavutil/attributes.h"
#include "libavutil/imgutils.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 "mpegvideodata.h"
#include "profiles.h"
#include "thread.h"
#include "version.h"
#include "vdpau_compat.h"
#include "xvmc_internal.h"

Go to the source code of this file.

Data Structures

struct  Mpeg1Context
 

Macros

#define UNCHECKED_BITSTREAM_READER   1
 
#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)
 Note: this function can read out of range and crash for corrupt streams. More...
 
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)
 Note: this function can read out of range and crash for corrupt streams. More...
 
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)
 Note: this function can read out of range and crash for corrupt streams. More...
 
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 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 void setup_hwaccel_for_pixfmt (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 enum AVPixelFormat mpeg1_hwaccel_pixfmt_list_420 []
 
static enum AVPixelFormat mpeg2_hwaccel_pixfmt_list_420 []
 
static enum AVPixelFormat mpeg12_pixfmt_list_422 []
 
static enum AVPixelFormat mpeg12_pixfmt_list_444 []
 
AVCodec ff_mpeg1video_decoder
 
AVCodec ff_mpeg2video_decoder
 
AVCodec ff_mpegvideo_decoder
 

Detailed Description

MPEG-1/2 decoder.

Definition in file mpeg12dec.c.

Macro Definition Documentation

#define UNCHECKED_BITSTREAM_READER   1

Definition at line 28 of file mpeg12dec.c.

#define MB_TYPE_ZERO_MV   0x20000000

Definition at line 74 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:59
AVFormatContext * ctx
Definition: movenc-test.c:48
#define av_log(a,...)
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:176
return
if(ret< 0)
Definition: vf_mcdeint.c:282

Definition at line 127 of file mpeg12dec.c.

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

#define MT_FIELD   1

Definition at line 723 of file mpeg12dec.c.

Referenced by mpeg_decode_mb().

#define MT_FRAME   2

Definition at line 724 of file mpeg12dec.c.

Referenced by mpeg_decode_mb().

#define MT_16X8   2

Definition at line 725 of file mpeg12dec.c.

#define MT_DMV   3

Definition at line 726 of file mpeg12dec.c.

Referenced by mpeg_decode_mb().

#define DECODE_SLICE_ERROR   -1

Definition at line 1765 of file mpeg12dec.c.

Referenced by mpeg_decode_slice().

#define DECODE_SLICE_OK   0

Definition at line 1766 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 101 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 136 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 219 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 224 of file mpeg12dec.c.

Referenced by mpeg_decode_mb().

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

Note: this function can read out of range and crash for corrupt streams.

Changing this would eat up any speed benefits it has. Do not use "fast" flag if you need the code to be robust.

Definition at line 309 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 389 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

Note: this function can read out of range and crash for corrupt streams.

Changing this would eat up any speed benefits it has. Do not use "fast" flag if you need the code to be robust.

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

Referenced by mpeg_decode_mb().

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

Note: this function can read out of range and crash for corrupt streams.

Changing this would eat up any speed benefits it has. Do not use "fast" flag if you need the code to be robust.

Definition at line 627 of file mpeg12dec.c.

Referenced by mpeg_decode_mb().

static int get_dmv ( MpegEncContext s)
inlinestatic

Definition at line 704 of file mpeg12dec.c.

Referenced by mpeg_decode_mb().

static int get_qscale ( MpegEncContext s)
inlinestatic

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

Referenced by mpeg_decode_slice().

static av_cold int mpeg_decode_init ( AVCodecContext avctx)
static

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

static enum AVPixelFormat mpeg_get_pixelformat ( AVCodecContext avctx)
static

Definition at line 1238 of file mpeg12dec.c.

Referenced by vcr2_init_sequence().

static void setup_hwaccel_for_pixfmt ( AVCodecContext avctx)
static

Definition at line 1259 of file mpeg12dec.c.

Referenced by vcr2_init_sequence().

static int mpeg_decode_postinit ( AVCodecContext avctx)
static

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

Referenced by decode_chunks().

static void mpeg_decode_sequence_extension ( Mpeg1Context s1)
static

Definition at line 1468 of file mpeg12dec.c.

Referenced by decode_chunks().

static void mpeg_decode_sequence_display_extension ( Mpeg1Context s1)
static

Definition at line 1511 of file mpeg12dec.c.

Referenced by decode_chunks().

static void mpeg_decode_picture_display_extension ( Mpeg1Context s1)
static

Definition at line 1535 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 1569 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 1592 of file mpeg12dec.c.

Referenced by decode_chunks().

static void mpeg_decode_picture_coding_extension ( Mpeg1Context s1)
static

Definition at line 1606 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 1665 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 1774 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 2043 of file mpeg12dec.c.

Referenced by decode_chunks().

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

Definition at line 2145 of file mpeg12dec.c.

Referenced by decode_chunks().

static int vcr2_init_sequence ( AVCodecContext avctx)
static

Definition at line 2234 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 2288 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 2341 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 2416 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 2449 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 2784 of file mpeg12dec.c.

static void flush ( AVCodecContext avctx)
static

Definition at line 2858 of file mpeg12dec.c.

static av_cold int mpeg_decode_end ( AVCodecContext avctx)
static

Definition at line 2867 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:75
#define MB_TYPE_QUANT
Definition: avcodec.h:1159
#define MB_TYPE_16x16
Definition: avcodec.h:1143
#define MB_TYPE_CBP
Definition: avcodec.h:1160
#define MB_TYPE_ZERO_MV
Definition: mpeg12dec.c:74
#define MB_TYPE_L0
Definition: avcodec.h:1156

Definition at line 76 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:75
#define MB_TYPE_QUANT
Definition: avcodec.h:1159
#define MB_TYPE_L0L1
Definition: avcodec.h:1158
#define MB_TYPE_L1
Definition: avcodec.h:1157
#define MB_TYPE_CBP
Definition: avcodec.h:1160
#define MB_TYPE_L0
Definition: avcodec.h:1156

Definition at line 86 of file mpeg12dec.c.

Referenced by mpeg_decode_mb().

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

Definition at line 1182 of file mpeg12dec.c.

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

Definition at line 1196 of file mpeg12dec.c.

Referenced by mpeg_get_pixelformat().

enum AVPixelFormat mpeg12_pixfmt_list_422[]
static
Initial value:
= {
}
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
Definition: pixfmt.h:67

Definition at line 1222 of file mpeg12dec.c.

Referenced by mpeg_get_pixelformat().

enum AVPixelFormat mpeg12_pixfmt_list_444[]
static
Initial value:
= {
}
planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
Definition: pixfmt.h:68

Definition at line 1227 of file mpeg12dec.c.

Referenced by mpeg_get_pixelformat().

AVCodec ff_mpeg1video_decoder
Initial value:
= {
.name = "mpeg1video",
.long_name = NULL_IF_CONFIG_SMALL("MPEG-1 video"),
.priv_data_size = sizeof(Mpeg1Context),
.close = mpeg_decode_end,
.max_lowres = 3,
.update_thread_context = ONLY_IF_THREADS_ENABLED(mpeg_decode_update_thread_context)
}
static av_cold int init(AVCodecContext *avctx)
Definition: avrndec.c:35
static av_cold int mpeg_decode_init(AVCodecContext *avctx)
Definition: mpeg12dec.c:1114
#define AV_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:881
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
Definition: internal.h:176
#define ONLY_IF_THREADS_ENABLED(x)
Define a function with only the non-default version specified.
Definition: internal.h:215
#define AV_CODEC_CAP_DRAW_HORIZ_BAND
Decoder can use draw_horiz_band callback.
Definition: avcodec.h:850
static av_cold int mpeg_decode_end(AVCodecContext *avctx)
Definition: mpeg12dec.c:2867
#define AV_CODEC_CAP_SLICE_THREADS
Codec supports slice-based (or partition-based) multithreading.
Definition: avcodec.h:923
static int mpeg_decode_frame(AVCodecContext *avctx, void *data, int *got_output, AVPacket *avpkt)
Definition: mpeg12dec.c:2784
#define AV_CODEC_CAP_TRUNCATED
Definition: avcodec.h:857
static int decode(AVCodecContext *avctx, void *data, int *got_sub, AVPacket *avpkt)
Definition: ccaption_dec.c:572
static void flush(AVCodecContext *avctx)
Definition: mpeg12dec.c:2858
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
Definition: avcodec.h:856

Definition at line 2877 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),
.close = mpeg_decode_end,
.max_lowres = 3,
}
static av_cold int init(AVCodecContext *avctx)
Definition: avrndec.c:35
static av_cold int mpeg_decode_init(AVCodecContext *avctx)
Definition: mpeg12dec.c:1114
#define AV_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:881
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
Definition: internal.h:176
const AVProfile ff_mpeg2_video_profiles[]
Definition: profiles.c:84
#define AV_CODEC_CAP_DRAW_HORIZ_BAND
Decoder can use draw_horiz_band callback.
Definition: avcodec.h:850
static av_cold int mpeg_decode_end(AVCodecContext *avctx)
Definition: mpeg12dec.c:2867
preferred ID for MPEG-1/2 video decoding
Definition: avcodec.h:106
#define AV_CODEC_CAP_SLICE_THREADS
Codec supports slice-based (or partition-based) multithreading.
Definition: avcodec.h:923
static int mpeg_decode_frame(AVCodecContext *avctx, void *data, int *got_output, AVPacket *avpkt)
Definition: mpeg12dec.c:2784
#define AV_CODEC_CAP_TRUNCATED
Definition: avcodec.h:857
static int decode(AVCodecContext *avctx, void *data, int *got_sub, AVPacket *avpkt)
Definition: ccaption_dec.c:572
static const AVProfile profiles[]
Definition: libfaac.c:216
static void flush(AVCodecContext *avctx)
Definition: mpeg12dec.c:2858
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
Definition: avcodec.h:856

Definition at line 2894 of file mpeg12dec.c.

AVCodec ff_mpegvideo_decoder
Initial value:
= {
.name = "mpegvideo",
.long_name = NULL_IF_CONFIG_SMALL("MPEG-1 video"),
.priv_data_size = sizeof(Mpeg1Context),
.close = mpeg_decode_end,
.max_lowres = 3,
}
static av_cold int init(AVCodecContext *avctx)
Definition: avrndec.c:35
static av_cold int mpeg_decode_init(AVCodecContext *avctx)
Definition: mpeg12dec.c:1114
#define AV_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:881
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
Definition: internal.h:176
#define AV_CODEC_CAP_DRAW_HORIZ_BAND
Decoder can use draw_horiz_band callback.
Definition: avcodec.h:850
static av_cold int mpeg_decode_end(AVCodecContext *avctx)
Definition: mpeg12dec.c:2867
preferred ID for MPEG-1/2 video decoding
Definition: avcodec.h:106
#define AV_CODEC_CAP_SLICE_THREADS
Codec supports slice-based (or partition-based) multithreading.
Definition: avcodec.h:923
static int mpeg_decode_frame(AVCodecContext *avctx, void *data, int *got_output, AVPacket *avpkt)
Definition: mpeg12dec.c:2784
#define AV_CODEC_CAP_TRUNCATED
Definition: avcodec.h:857
static int decode(AVCodecContext *avctx, void *data, int *got_sub, AVPacket *avpkt)
Definition: ccaption_dec.c:572
static void flush(AVCodecContext *avctx)
Definition: mpeg12dec.c:2858
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
Definition: avcodec.h:856

Definition at line 2912 of file mpeg12dec.c.