/*
* VC-1 and WMV3 decoder
* Copyright (c) 2011 Mashiat Sarker Shakkhar
* Copyright (c) 2006-2007 Konstantin Shishkov
* Partly based on vc9.c (c) 2005 Anonymous, Alex Beregszaszi, Michael Niedermayer
*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* 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.
*
* FFmpeg is distributed in the hope that it will be useful,
* 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
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/**
* @file
* VC-1 and WMV3 decoder
*/
#include "internal.h"
#include "dsputil.h"
#include "avcodec.h"
#include "mpegvideo.h"
#include "h263.h"
#include "vc1.h"
#include "vc1data.h"
#include "vc1acdata.h"
#include "msmpeg4data.h"
#include "unary.h"
#include "mathops.h"
#include "vdpau_internal.h"
#include "libavutil/avassert.h"
#undef NDEBUG
#include <assert.h>
#define MB_INTRA_VLC_BITS 9
#define DC_VLC_BITS 9
// offset tables for interlaced picture MVDATA decoding
static const int offset_table1[9] = { 0, 1, 2, 4, 8, 16, 32, 64, 128 };
static const int offset_table2[9] = { 0, 1, 3, 7, 15, 31, 63, 127, 255 };
/***********************************************************************/
/**
* @name VC-1 Bitplane decoding
* @see 8.7, p56
* @{
*/
/**
* Imode types
* @{
*/
enum Imode {
IMODE_RAW,
IMODE_NORM2,
IMODE_DIFF2,
IMODE_NORM6,
IMODE_DIFF6,
IMODE_ROWSKIP,
IMODE_COLSKIP
};
/** @} */ //imode defines
/** @} */ //Bitplane group
static void vc1_put_signed_blocks_clamped(VC1Context *v)
{
MpegEncContext *s = &v->s;
int topleft_mb_pos, top_mb_pos;
int stride_y, fieldtx = 0;
int v_dist;
/* The put pixels loop is always one MB row behind the decoding loop,
* because we can only put pixels when overlap filtering is done, and
* for filtering of the bottom edge of a MB, we need the next MB row
* present as well.
* Within the row, the put pixels loop is also one MB col behind the
* decoding loop. The reason for this is again, because for filtering
* of the right MB edge, we need the next MB present. */
if (!s->first_slice_line) {
if (s->mb_x) {
topleft_mb_pos = (s->mb_y - 1) * s->mb_stride + s->mb_x - 1;
if (v->fcm == ILACE_FRAME)
fieldtx = v->fieldtx_plane[topleft_mb_pos];
stride_y = s->linesize << fieldtx;
v_dist = (16 - fieldtx) >> (fieldtx == 0);
s->dsp.put_signed_pixels_clamped(v->block[v->topleft_blk_idx][0],
s->dest[0] - 16 * s->linesize - 16,
stride_y);
s->dsp.put_signed_pixels_clamped(v->block[v->topleft_blk_idx][1],
s->dest[0] - 16 * s->linesize - 8,
stride_y);
s->dsp.put_signed_pixels_clamped(v->block[v->topleft_blk_idx][2],
s->dest[0] - v_dist * s->linesize - 16,
stride_y);
s->dsp.put_signed_pixels_clamped(v->block[v->topleft_blk_idx][3],
s->dest[0] - v_dist * s->linesize - 8,
stride_y);
s->dsp.put_signed_pixels_clamped(v->block[v->topleft_blk_idx][4],
s->dest[1] - 8 * s->uvlinesize - 8,
s->uvlinesize);
s->dsp.put_signed_pixels_clamped(v->block[v->topleft_blk_idx][5],
s->dest[2] - 8 * s->uvlinesize - 8,
s->uvlinesize);
}
if (s->mb_x == s->mb_width - 1) {
top_mb_pos = (s->mb_y - 1) * s->mb_stride + s->mb_x;
if (v->fcm == ILACE_FRAME)
fieldtx = v->fieldtx_plane[top_mb_pos];
stride_y = s->linesize << fieldtx;
v_dist = fieldtx ? 15 : 8;
s->dsp.put_signed_pixels_clamped(v->block[v->top_blk_idx][0],
s->dest[0] - 16 * s->linesize,
stride_y);
s->dsp.put_signed_pixels_clamped(v->block[v->top_blk_idx][1],
s->dest[0] - 16 * s->linesize + 8,
stride_y);
s->dsp.put_signed_pixels_clamped(v->block[v->top_blk_idx][2],
s->dest[0] - v_dist * s->linesize,
stride_y);
s->dsp.put_signed_pixels_clamped(v->block[v->top_blk_idx][3],
s->dest[0] - v_dist * s->linesize + 8,
stride_y);
s->dsp.put_signed_pixels_clamped(v->block[v->top_blk_idx][4],
s->dest[1] - 8 * s->uvlinesize,
s->uvlinesize);
s->dsp.put_signed_pixels_clamped(v->block[v->top_blk_idx][5],
s->dest[2] - 8 * s->uvlinesize,
s->uvlinesize);
}
}
#define inc_blk_idx(idx) do { \
idx++; \
if (idx >= v->n_allocated_blks) \
idx = 0; \
} while (0)
inc_blk_idx(v->topleft_blk_idx);
inc_blk_idx(v->top_blk_idx);
inc_blk_idx(v->left_blk_idx);
inc_blk_idx(v->cur_blk_idx);
}
static void vc1_loop_filter_iblk(VC1Context *v, int pq)
{
MpegEncContext *s = &v->s;
int j;
if (!s->first_slice_line) {
v->vc1dsp.vc1_v_loop_filter16(s->dest[0], s->linesize, pq);
if (s->mb_x)
v->vc1dsp.vc1_h_loop_filter16(s->dest[0] - 16 * s->linesize, s->linesize, pq);
v->vc1dsp.vc1_h_loop_filter16(s->dest[0] - 16 * s->linesize + 8, s->linesize, pq);
for (j = 0; j < 2; j++) {
v->vc1dsp.vc1_v_loop_filter8(s->dest[j + 1], s->uvlinesize, pq);
if (s->mb_x)
v->vc1dsp.vc1_h_loop_filter8(s->dest[j + 1] - 8 * s->uvlinesize, s->uvlinesize, pq);
}
}
v->vc1dsp.vc1_v_loop_filter16(s->dest[0] + 8 * s->linesize, s->linesize, pq);
if (s->mb_y == s->end_mb_y - 1) {
if (s->mb_x) {
v->vc1dsp.vc1_h_loop_filter16(s->dest[0], s->linesize, pq);
v->vc1dsp.vc1_h_loop_filter8(s->dest[1], s->uvlinesize, pq);
v->vc1dsp.vc1_h_loop_filter8(s->dest[2], s->uvlinesize, pq);
}
v->vc1dsp.vc1_h_loop_filter16(s->dest[0] + 8, s->linesize, pq);
}
}
static void vc1_loop_filter_iblk_delayed(VC1Context *v, int pq)
{
MpegEncContext *s = &v->s;
int j;
/* The loopfilter runs 1 row and 1 column behind the overlap filter, which
* means it runs two rows/cols behind the decoding loop. */
if (!s->first_slice_line) {
if (s->mb_x) {
if (s->mb_y >= s->start_mb_y + 2) {
v->vc1dsp.vc1_v_loop_filter16(s->dest[0] - 16 * s->linesize - 16, s->linesize, pq);
if (s->mb_x >= 2)
v->vc1dsp.vc1_h_loop_filter16(s->dest[0] - 32 * s->linesize - 16, s->linesize, pq);
v->vc1dsp.vc1_h_loop_filter16(s->dest[0] - 32 * s->linesize - 8, s->linesize, pq);
for (j = 0; j < 2; j++) {
v->vc1dsp.vc1_v_loop_filter8(s->dest[j + 1]
没有合适的资源?快使用搜索试试~ 我知道了~
MPlayer 源代码
共5142个文件
c:2109个
h:991个
md5:314个
5星 · 超过95%的资源 需积分: 0 1.2k 下载量 5 浏览量
2013-10-09
20:35:37
上传
评论 12
收藏 9.69MB 7Z 举报
温馨提示
MPlayer是一款开源多媒体播放器,以GNU通用公共许可证发布。此款软件可在各主流作业系统使用,例如Linux和其他类Unix系统、Windows及Mac OS X系统。 本代码经过测试可以编译通过。
资源推荐
资源详情
资源评论
收起资源包目录
MPlayer 源代码 (5142个子文件)
wavpack-channels-4.0 33B
mplayer.1 559KB
mplayer.1 392KB
mplayer.1 380KB
mplayer.1 373KB
mplayer.1 368KB
mplayer.1 366KB
mplayer.1 346KB
mplayer.1 323KB
mplayer.1 275KB
mplayer.1 240KB
COPYING.LGPLv2.1 26KB
wavpack-channels-6.1 33B
wavpack-channels-7.1 33B
wavpack-channels-5.1 33B
4xm-1 882B
4xm-2 10KB
adpcm-creative-8-2.6bit 33B
8bps 2KB
aasc 1KB
acodec-adpcm-ima_qt 3KB
acodec-adpcm-ima_wav 3KB
acodec-adpcm-ms 3KB
acodec-adpcm-swf 3KB
acodec-adpcm-yamaha 3KB
acodec-alac 3KB
acodec-aref 211B
acodec-flac 3KB
acodec-mp2 3KB
acodec-pcm-alaw 3KB
acodec-pcm-f32be 3KB
acodec-pcm-f32le 3KB
acodec-pcm-f64be 3KB
acodec-pcm-f64le 3KB
acodec-pcm-mulaw 3KB
acodec-pcm-s16be 3KB
acodec-pcm-s16le 3KB
acodec-pcm-s24be 3KB
acodec-pcm-s24le 3KB
acodec-pcm-s32be 3KB
acodec-pcm-s32le 3KB
acodec-pcm-s8 3KB
acodec-pcm-u8 3KB
adpcm-4xm 1KB
adpcm-adx 258B
adpcm-afc 711B
adpcm-creative 33B
adpcm-creative-8-2bit 33B
adpcm-creative-8-4bit 33B
adpcm-ea-1 1KB
adpcm-ea-2 8KB
adpcm-ea-maxis-xa 2KB
adpcm-ea-r1 5KB
adpcm-ea-r2 15B
adpcm-ea-r3 15B
adpcm-ima-amv 9KB
adpcm-ima-apc 33B
adpcm-ima-dk3 33B
adpcm-ima-dk4 33B
adpcm-ima-ea-eacs 3KB
adpcm-ima-ea-sead 3KB
adpcm-ima-iss 33B
adpcm-ima-oki 33B
adpcm-ima-smjpeg 20KB
adpcm-ima-ws 2KB
adpcm-ima_qt 269B
adpcm-ima_wav 270B
adpcm-ima_wav-stereo 33B
adpcm-ms 255B
adpcm-ms-mono 3KB
adpcm-swf 258B
adpcm-thp 4KB
adpcm-xa 2KB
adpcm-yamaha 267B
adpcm_ima_qt 252B
adpcm_ms-stereo 33B
adts-demux 15B
aea-demux 15B
aiff 136B
alac 243B
alaw 133B
alg-mm 2KB
alphaextract_rgb 53B
alphaextract_yuv 53B
alphamerge_rgb 53B
alphamerge_yuv 53B
Makefile.am 1016B
Makefile.am 775B
Makefile.am 366B
amv 9KB
ansi 998B
ansi256 476B
APIchanges 54KB
armovie-escape124 6KB
asf 137B
vp8dsp.asm 78KB
h264_intrapred.asm 68KB
audio_convert.asm 43KB
x86inc.asm 35KB
h264_intrapred_10bit.asm 31KB
共 5142 条
- 1
- 2
- 3
- 4
- 5
- 6
- 52
雷霄骅
- 粉丝: 4w+
- 资源: 141
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
- 5
- 6
前往页