mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
prores: change license to LGPL, merge some parts.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
b87d882578
commit
bebaf4ea1f
@ -313,7 +313,7 @@ OBJS-$(CONFIG_PNG_DECODER) += png.o pngdec.o
|
|||||||
OBJS-$(CONFIG_PNG_ENCODER) += png.o pngenc.o
|
OBJS-$(CONFIG_PNG_ENCODER) += png.o pngenc.o
|
||||||
OBJS-$(CONFIG_PPM_DECODER) += pnmdec.o pnm.o
|
OBJS-$(CONFIG_PPM_DECODER) += pnmdec.o pnm.o
|
||||||
OBJS-$(CONFIG_PPM_ENCODER) += pnmenc.o pnm.o
|
OBJS-$(CONFIG_PPM_ENCODER) += pnmenc.o pnm.o
|
||||||
OBJS-$(CONFIG_PRORES_GPL_DECODER) += proresdec_gpl.o
|
OBJS-$(CONFIG_PRORES_DECODER) += proresdec.o
|
||||||
OBJS-$(CONFIG_PRORES_LGPL_DECODER) += proresdec_lgpl.o proresdsp.o
|
OBJS-$(CONFIG_PRORES_LGPL_DECODER) += proresdec_lgpl.o proresdsp.o
|
||||||
OBJS-$(CONFIG_PTX_DECODER) += ptx.o
|
OBJS-$(CONFIG_PTX_DECODER) += ptx.o
|
||||||
OBJS-$(CONFIG_QCELP_DECODER) += qcelpdec.o celp_math.o \
|
OBJS-$(CONFIG_QCELP_DECODER) += qcelpdec.o celp_math.o \
|
||||||
|
@ -172,7 +172,7 @@ void avcodec_register_all(void)
|
|||||||
REGISTER_DECODER (PICTOR, pictor);
|
REGISTER_DECODER (PICTOR, pictor);
|
||||||
REGISTER_ENCDEC (PNG, png);
|
REGISTER_ENCDEC (PNG, png);
|
||||||
REGISTER_ENCDEC (PPM, ppm);
|
REGISTER_ENCDEC (PPM, ppm);
|
||||||
REGISTER_DECODER (PRORES_GPL, prores_gpl);
|
REGISTER_DECODER (PRORES, prores);
|
||||||
REGISTER_DECODER (PRORES_LGPL, prores_lgpl);
|
REGISTER_DECODER (PRORES_LGPL, prores_lgpl);
|
||||||
REGISTER_DECODER (PTX, ptx);
|
REGISTER_DECODER (PTX, ptx);
|
||||||
REGISTER_DECODER (QDRAW, qdraw);
|
REGISTER_DECODER (QDRAW, qdraw);
|
||||||
|
@ -5,16 +5,16 @@
|
|||||||
* This file is part of FFmpeg.
|
* This file is part of FFmpeg.
|
||||||
*
|
*
|
||||||
* FFmpeg is free software; you can redistribute it and/or
|
* FFmpeg is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
* License as published by the Free Software Foundation;
|
* License as published by the Free Software Foundation; either
|
||||||
* version 2 of the License.
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
*
|
*
|
||||||
* FFmpeg is distributed in the hope that it will be useful,
|
* FFmpeg is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
* General Public License for more details.
|
* Lesser General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
* License along with FFmpeg; if not, write to the Free Software
|
* License along with FFmpeg; if not, write to the Free Software
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
*/
|
*/
|
||||||
@ -30,33 +30,8 @@
|
|||||||
|
|
||||||
#include "avcodec.h"
|
#include "avcodec.h"
|
||||||
#include "get_bits.h"
|
#include "get_bits.h"
|
||||||
#include "dsputil.h"
|
|
||||||
#include "simple_idct.h"
|
#include "simple_idct.h"
|
||||||
|
#include "proresdec.h"
|
||||||
typedef struct {
|
|
||||||
const uint8_t *data;
|
|
||||||
unsigned mb_x;
|
|
||||||
unsigned mb_y;
|
|
||||||
unsigned mb_count;
|
|
||||||
unsigned data_size;
|
|
||||||
} SliceContext;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
AVFrame frame;
|
|
||||||
DSPContext dsp;
|
|
||||||
int frame_type; ///< 0 = progressive, 1 = tff, 2 = bff
|
|
||||||
uint8_t qmat_luma[64];
|
|
||||||
uint8_t qmat_chroma[64];
|
|
||||||
SliceContext *slices;
|
|
||||||
int slice_count; ///< number of slices in the current picture
|
|
||||||
unsigned mb_width; ///< width of the current picture in mb
|
|
||||||
unsigned mb_height; ///< height of the current picture in mb
|
|
||||||
uint8_t progressive_scan[64];
|
|
||||||
uint8_t interlaced_scan[64];
|
|
||||||
const uint8_t *scan;
|
|
||||||
int first_field;
|
|
||||||
void (*idct_put)(DCTELEM *, uint8_t *restrict, int);
|
|
||||||
} ProresContext;
|
|
||||||
|
|
||||||
static void permute(uint8_t *dst, const uint8_t *src, const uint8_t permutation[64])
|
static void permute(uint8_t *dst, const uint8_t *src, const uint8_t permutation[64])
|
||||||
{
|
{
|
||||||
@ -65,27 +40,6 @@ static void permute(uint8_t *dst, const uint8_t *src, const uint8_t permutation[
|
|||||||
dst[i] = permutation[src[i]];
|
dst[i] = permutation[src[i]];
|
||||||
}
|
}
|
||||||
|
|
||||||
static av_always_inline void put_pixels(const DCTELEM *block, uint8_t *restrict pixels, int stride)
|
|
||||||
{
|
|
||||||
int16_t *p = (int16_t*)pixels;
|
|
||||||
int i, j;
|
|
||||||
|
|
||||||
stride >>= 1;
|
|
||||||
for(i = 0; i < 8; i++) {
|
|
||||||
for (j = 0; j < 8; j++) {
|
|
||||||
p[j] = av_clip(block[j], 4, 1019);
|
|
||||||
}
|
|
||||||
p += stride;
|
|
||||||
block += 8;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void idct_put(DCTELEM *block, uint8_t *restrict pixels, int stride)
|
|
||||||
{
|
|
||||||
ff_simple_idct_10(block);
|
|
||||||
put_pixels(block, pixels, stride);
|
|
||||||
}
|
|
||||||
|
|
||||||
static const uint8_t progressive_scan[64] = {
|
static const uint8_t progressive_scan[64] = {
|
||||||
0, 1, 8, 9, 2, 3, 10, 11,
|
0, 1, 8, 9, 2, 3, 10, 11,
|
||||||
16, 17, 24, 25, 18, 19, 26, 27,
|
16, 17, 24, 25, 18, 19, 26, 27,
|
||||||
@ -111,18 +65,22 @@ static const uint8_t interlaced_scan[64] = {
|
|||||||
static av_cold int decode_init(AVCodecContext *avctx)
|
static av_cold int decode_init(AVCodecContext *avctx)
|
||||||
{
|
{
|
||||||
ProresContext *ctx = avctx->priv_data;
|
ProresContext *ctx = avctx->priv_data;
|
||||||
|
uint8_t idct_permutation[64];
|
||||||
|
|
||||||
avctx->bits_per_raw_sample = 10;
|
avctx->bits_per_raw_sample = 10;
|
||||||
|
|
||||||
dsputil_init(&ctx->dsp, avctx);
|
dsputil_init(&ctx->dsp, avctx);
|
||||||
|
ff_proresdsp_init(&ctx->prodsp);
|
||||||
|
|
||||||
avctx->coded_frame = &ctx->frame;
|
avctx->coded_frame = &ctx->frame;
|
||||||
ctx->frame.type = FF_I_TYPE;
|
ctx->frame.type = FF_I_TYPE;
|
||||||
ctx->frame.key_frame = 1;
|
ctx->frame.key_frame = 1;
|
||||||
|
|
||||||
ctx->idct_put = idct_put;
|
ff_init_scantable_permutation(idct_permutation,
|
||||||
memcpy(ctx->progressive_scan, progressive_scan, sizeof(progressive_scan));
|
ctx->prodsp.idct_permutation_type);
|
||||||
memcpy(ctx->interlaced_scan, interlaced_scan, sizeof(interlaced_scan));
|
|
||||||
|
permute(ctx->progressive_scan, progressive_scan, idct_permutation);
|
||||||
|
permute(ctx->interlaced_scan, interlaced_scan, idct_permutation);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -133,7 +91,6 @@ static int decode_frame_header(ProresContext *ctx, const uint8_t *buf,
|
|||||||
int hdr_size, width, height, flags;
|
int hdr_size, width, height, flags;
|
||||||
int version;
|
int version;
|
||||||
const uint8_t *ptr;
|
const uint8_t *ptr;
|
||||||
const uint8_t *scan;
|
|
||||||
|
|
||||||
hdr_size = AV_RB16(buf);
|
hdr_size = AV_RB16(buf);
|
||||||
av_dlog(avctx, "header size %d\n", hdr_size);
|
av_dlog(avctx, "header size %d\n", hdr_size);
|
||||||
@ -162,10 +119,8 @@ static int decode_frame_header(ProresContext *ctx, const uint8_t *buf,
|
|||||||
av_dlog(avctx, "frame type %d\n", ctx->frame_type);
|
av_dlog(avctx, "frame type %d\n", ctx->frame_type);
|
||||||
|
|
||||||
if (ctx->frame_type == 0) {
|
if (ctx->frame_type == 0) {
|
||||||
scan = progressive_scan;
|
|
||||||
ctx->scan = ctx->progressive_scan; // permuted
|
ctx->scan = ctx->progressive_scan; // permuted
|
||||||
} else {
|
} else {
|
||||||
scan = interlaced_scan;
|
|
||||||
ctx->scan = ctx->interlaced_scan; // permuted
|
ctx->scan = ctx->interlaced_scan; // permuted
|
||||||
ctx->frame.interlaced_frame = 1;
|
ctx->frame.interlaced_frame = 1;
|
||||||
ctx->frame.top_field_first = ctx->frame_type == 1;
|
ctx->frame.top_field_first = ctx->frame_type == 1;
|
||||||
@ -178,14 +133,14 @@ static int decode_frame_header(ProresContext *ctx, const uint8_t *buf,
|
|||||||
av_dlog(avctx, "flags %x\n", flags);
|
av_dlog(avctx, "flags %x\n", flags);
|
||||||
|
|
||||||
if (flags & 2) {
|
if (flags & 2) {
|
||||||
permute(ctx->qmat_luma, scan, ptr);
|
permute(ctx->qmat_luma, ctx->prodsp.idct_permutation, ptr);
|
||||||
ptr += 64;
|
ptr += 64;
|
||||||
} else {
|
} else {
|
||||||
memset(ctx->qmat_luma, 4, 64);
|
memset(ctx->qmat_luma, 4, 64);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flags & 1) {
|
if (flags & 1) {
|
||||||
permute(ctx->qmat_chroma, scan, ptr);
|
permute(ctx->qmat_chroma, ctx->prodsp.idct_permutation, ptr);
|
||||||
} else {
|
} else {
|
||||||
memset(ctx->qmat_chroma, 4, 64);
|
memset(ctx->qmat_chroma, 4, 64);
|
||||||
}
|
}
|
||||||
@ -331,7 +286,7 @@ static int decode_picture_header(AVCodecContext *avctx, const uint8_t *buf, cons
|
|||||||
static const uint8_t dc_codebook[7] = { 0x04, 0x28, 0x28, 0x4D, 0x4D, 0x70, 0x70};
|
static const uint8_t dc_codebook[7] = { 0x04, 0x28, 0x28, 0x4D, 0x4D, 0x70, 0x70};
|
||||||
|
|
||||||
static av_always_inline void decode_dc_coeffs(GetBitContext *gb, DCTELEM *out,
|
static av_always_inline void decode_dc_coeffs(GetBitContext *gb, DCTELEM *out,
|
||||||
int blocks_per_slice, const int *qmat)
|
int blocks_per_slice)
|
||||||
{
|
{
|
||||||
DCTELEM prev_dc;
|
DCTELEM prev_dc;
|
||||||
int code, i, sign;
|
int code, i, sign;
|
||||||
@ -340,7 +295,7 @@ static av_always_inline void decode_dc_coeffs(GetBitContext *gb, DCTELEM *out,
|
|||||||
|
|
||||||
DECODE_CODEWORD(code, FIRST_DC_CB);
|
DECODE_CODEWORD(code, FIRST_DC_CB);
|
||||||
prev_dc = TOSIGNED(code);
|
prev_dc = TOSIGNED(code);
|
||||||
out[0] = 4096 + ((prev_dc * qmat[0]) >> 2);
|
out[0] = prev_dc;
|
||||||
|
|
||||||
out += 64; // dc coeff for the next block
|
out += 64; // dc coeff for the next block
|
||||||
|
|
||||||
@ -351,7 +306,7 @@ static av_always_inline void decode_dc_coeffs(GetBitContext *gb, DCTELEM *out,
|
|||||||
if(code) sign ^= -(code & 1);
|
if(code) sign ^= -(code & 1);
|
||||||
else sign = 0;
|
else sign = 0;
|
||||||
prev_dc += (((code + 1) >> 1) ^ sign) - sign;
|
prev_dc += (((code + 1) >> 1) ^ sign) - sign;
|
||||||
out[0] = 4096 + ((prev_dc * qmat[0]) >> 2);
|
out[0] = prev_dc;
|
||||||
}
|
}
|
||||||
CLOSE_READER(re, gb);
|
CLOSE_READER(re, gb);
|
||||||
}
|
}
|
||||||
@ -361,8 +316,7 @@ static const uint8_t run_to_cb[16] = { 0x06, 0x06, 0x05, 0x05, 0x04, 0x29, 0x29,
|
|||||||
static const uint8_t lev_to_cb[10] = { 0x04, 0x0A, 0x05, 0x06, 0x04, 0x28, 0x28, 0x28, 0x28, 0x4C };
|
static const uint8_t lev_to_cb[10] = { 0x04, 0x0A, 0x05, 0x06, 0x04, 0x28, 0x28, 0x28, 0x28, 0x4C };
|
||||||
|
|
||||||
static av_always_inline void decode_ac_coeffs(AVCodecContext *avctx, GetBitContext *gb,
|
static av_always_inline void decode_ac_coeffs(AVCodecContext *avctx, GetBitContext *gb,
|
||||||
DCTELEM *out, int blocks_per_slice,
|
DCTELEM *out, int blocks_per_slice)
|
||||||
const int *qmat)
|
|
||||||
{
|
{
|
||||||
ProresContext *ctx = avctx->priv_data;
|
ProresContext *ctx = avctx->priv_data;
|
||||||
int block_mask, sign;
|
int block_mask, sign;
|
||||||
@ -397,7 +351,7 @@ static av_always_inline void decode_ac_coeffs(AVCodecContext *avctx, GetBitConte
|
|||||||
|
|
||||||
sign = SHOW_SBITS(re, gb, 1);
|
sign = SHOW_SBITS(re, gb, 1);
|
||||||
SKIP_BITS(re, gb, 1);
|
SKIP_BITS(re, gb, 1);
|
||||||
out[((pos & block_mask) << 6) + ctx->scan[i]] = (((level ^ sign) - sign) * qmat[i]) >> 2;
|
out[((pos & block_mask) << 6) + ctx->scan[i]] = ((level ^ sign) - sign);
|
||||||
}
|
}
|
||||||
|
|
||||||
CLOSE_READER(re, gb);
|
CLOSE_READER(re, gb);
|
||||||
@ -406,7 +360,7 @@ static av_always_inline void decode_ac_coeffs(AVCodecContext *avctx, GetBitConte
|
|||||||
static void decode_slice_luma(AVCodecContext *avctx, SliceContext *slice,
|
static void decode_slice_luma(AVCodecContext *avctx, SliceContext *slice,
|
||||||
uint8_t *dst, int dst_stride,
|
uint8_t *dst, int dst_stride,
|
||||||
const uint8_t *buf, unsigned buf_size,
|
const uint8_t *buf, unsigned buf_size,
|
||||||
const int *qmat)
|
const int16_t *qmat)
|
||||||
{
|
{
|
||||||
ProresContext *ctx = avctx->priv_data;
|
ProresContext *ctx = avctx->priv_data;
|
||||||
LOCAL_ALIGNED_16(DCTELEM, blocks, [8*4*64]);
|
LOCAL_ALIGNED_16(DCTELEM, blocks, [8*4*64]);
|
||||||
@ -419,26 +373,24 @@ static void decode_slice_luma(AVCodecContext *avctx, SliceContext *slice,
|
|||||||
|
|
||||||
init_get_bits(&gb, buf, buf_size << 3);
|
init_get_bits(&gb, buf, buf_size << 3);
|
||||||
|
|
||||||
decode_dc_coeffs(&gb, blocks, blocks_per_slice, qmat);
|
decode_dc_coeffs(&gb, blocks, blocks_per_slice);
|
||||||
decode_ac_coeffs(avctx, &gb, blocks, blocks_per_slice, qmat);
|
decode_ac_coeffs(avctx, &gb, blocks, blocks_per_slice);
|
||||||
|
|
||||||
block = blocks;
|
block = blocks;
|
||||||
|
|
||||||
for (i = 0; i < slice->mb_count; i++) {
|
for (i = 0; i < slice->mb_count; i++) {
|
||||||
ctx->idct_put(block+(0<<6), dst, dst_stride);
|
ctx->prodsp.idct_put(dst, dst_stride, block+(0<<6), qmat);
|
||||||
ctx->idct_put(block+(1<<6), dst+16, dst_stride);
|
ctx->prodsp.idct_put(dst+16, dst_stride, block+(1<<6), qmat);
|
||||||
ctx->idct_put(block+(2<<6), dst+8*dst_stride, dst_stride);
|
ctx->prodsp.idct_put(dst+8*dst_stride, dst_stride, block+(2<<6), qmat);
|
||||||
ctx->idct_put(block+(3<<6), dst+8*dst_stride+16, dst_stride);
|
ctx->prodsp.idct_put(dst+8*dst_stride+16, dst_stride, block+(3<<6), qmat);
|
||||||
block += 4*64;
|
block += 4*64;
|
||||||
dst += 32;
|
dst += 32;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void decode_slice_chroma(AVCodecContext *avctx, SliceContext *slice,
|
static void decode_slice_chroma(AVCodecContext *avctx, SliceContext *slice,
|
||||||
uint8_t *dst, int dst_stride,
|
uint8_t *dst, int dst_stride,
|
||||||
const uint8_t *buf, unsigned buf_size,
|
const uint8_t *buf, unsigned buf_size,
|
||||||
const int *qmat, int log2_blocks_per_mb)
|
const int16_t *qmat, int log2_blocks_per_mb)
|
||||||
{
|
{
|
||||||
ProresContext *ctx = avctx->priv_data;
|
ProresContext *ctx = avctx->priv_data;
|
||||||
LOCAL_ALIGNED_16(DCTELEM, blocks, [8*4*64]);
|
LOCAL_ALIGNED_16(DCTELEM, blocks, [8*4*64]);
|
||||||
@ -451,14 +403,14 @@ static void decode_slice_chroma(AVCodecContext *avctx, SliceContext *slice,
|
|||||||
|
|
||||||
init_get_bits(&gb, buf, buf_size << 3);
|
init_get_bits(&gb, buf, buf_size << 3);
|
||||||
|
|
||||||
decode_dc_coeffs(&gb, blocks, blocks_per_slice, qmat);
|
decode_dc_coeffs(&gb, blocks, blocks_per_slice);
|
||||||
decode_ac_coeffs(avctx, &gb, blocks, blocks_per_slice, qmat);
|
decode_ac_coeffs(avctx, &gb, blocks, blocks_per_slice);
|
||||||
|
|
||||||
block = blocks;
|
block = blocks;
|
||||||
for (i = 0; i < slice->mb_count; i++) {
|
for (i = 0; i < slice->mb_count; i++) {
|
||||||
for (j = 0; j < log2_blocks_per_mb; j++) {
|
for (j = 0; j < log2_blocks_per_mb; j++) {
|
||||||
ctx->idct_put(block+(0<<6), dst, dst_stride);
|
ctx->prodsp.idct_put(dst, dst_stride, block+(0<<6), qmat);
|
||||||
ctx->idct_put(block+(1<<6), dst+8*dst_stride, dst_stride);
|
ctx->prodsp.idct_put(dst+8*dst_stride, dst_stride, block+(1<<6), qmat);
|
||||||
block += 2*64;
|
block += 2*64;
|
||||||
dst += 16;
|
dst += 16;
|
||||||
}
|
}
|
||||||
@ -475,8 +427,8 @@ static int decode_slice_thread(AVCodecContext *avctx, void *arg, int jobnr, int
|
|||||||
int luma_stride, chroma_stride;
|
int luma_stride, chroma_stride;
|
||||||
int y_data_size, u_data_size, v_data_size;
|
int y_data_size, u_data_size, v_data_size;
|
||||||
uint8_t *dest_y, *dest_u, *dest_v;
|
uint8_t *dest_y, *dest_u, *dest_v;
|
||||||
int qmat_luma_scaled[64];
|
int16_t qmat_luma_scaled[64];
|
||||||
int qmat_chroma_scaled[64];
|
int16_t qmat_chroma_scaled[64];
|
||||||
int mb_x_shift;
|
int mb_x_shift;
|
||||||
|
|
||||||
//av_log(avctx, AV_LOG_INFO, "slice %d mb width %d mb x %d y %d\n",
|
//av_log(avctx, AV_LOG_INFO, "slice %d mb width %d mb x %d y %d\n",
|
||||||
@ -499,7 +451,7 @@ static int decode_slice_thread(AVCodecContext *avctx, void *arg, int jobnr, int
|
|||||||
buf += hdr_size;
|
buf += hdr_size;
|
||||||
|
|
||||||
for (i = 0; i < 64; i++) {
|
for (i = 0; i < 64; i++) {
|
||||||
qmat_luma_scaled[i] = ctx->qmat_luma[i] * qscale;
|
qmat_luma_scaled [i] = ctx->qmat_luma [i] * qscale;
|
||||||
qmat_chroma_scaled[i] = ctx->qmat_chroma[i] * qscale;
|
qmat_chroma_scaled[i] = ctx->qmat_chroma[i] * qscale;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -628,8 +580,8 @@ static av_cold int decode_close(AVCodecContext *avctx)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
AVCodec ff_prores_gpl_decoder = {
|
AVCodec ff_prores_decoder = {
|
||||||
.name = "prores_gpl",
|
.name = "prores",
|
||||||
.type = AVMEDIA_TYPE_VIDEO,
|
.type = AVMEDIA_TYPE_VIDEO,
|
||||||
.id = CODEC_ID_PRORES,
|
.id = CODEC_ID_PRORES,
|
||||||
.priv_data_size = sizeof(ProresContext),
|
.priv_data_size = sizeof(ProresContext),
|
53
libavcodec/proresdec.h
Normal file
53
libavcodec/proresdec.h
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2010-2011 Maxim Poliakovski
|
||||||
|
* Copyright (c) 2010-2011 Elvis Presley
|
||||||
|
*
|
||||||
|
* This file is part of FFmpeg.
|
||||||
|
*
|
||||||
|
* FFmpeg is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public
|
||||||
|
* License as published by the Free Software Foundation;
|
||||||
|
* version 2 of the License.
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
* General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU 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
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef AVCODEC_PRORESDEC_H
|
||||||
|
#define AVCODEC_PRORESDEC_H
|
||||||
|
|
||||||
|
#include "dsputil.h"
|
||||||
|
#include "proresdsp.h"
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
const uint8_t *data;
|
||||||
|
unsigned mb_x;
|
||||||
|
unsigned mb_y;
|
||||||
|
unsigned mb_count;
|
||||||
|
unsigned data_size;
|
||||||
|
} SliceContext;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
DSPContext dsp;
|
||||||
|
ProresDSPContext prodsp;
|
||||||
|
AVFrame frame;
|
||||||
|
int frame_type; ///< 0 = progressive, 1 = tff, 2 = bff
|
||||||
|
uint8_t qmat_luma[64];
|
||||||
|
uint8_t qmat_chroma[64];
|
||||||
|
SliceContext *slices;
|
||||||
|
int slice_count; ///< number of slices in the current picture
|
||||||
|
unsigned mb_width; ///< width of the current picture in mb
|
||||||
|
unsigned mb_height; ///< height of the current picture in mb
|
||||||
|
uint8_t progressive_scan[64];
|
||||||
|
uint8_t interlaced_scan[64];
|
||||||
|
const uint8_t *scan;
|
||||||
|
int first_field;
|
||||||
|
} ProresContext;
|
||||||
|
|
||||||
|
#endif /* AVCODEC_PRORESDEC_H */
|
@ -36,6 +36,8 @@ MMX-OBJS-$(CONFIG_GPL) += x86/idct_mmx.o
|
|||||||
MMX-OBJS-$(CONFIG_LPC) += x86/lpc_mmx.o
|
MMX-OBJS-$(CONFIG_LPC) += x86/lpc_mmx.o
|
||||||
YASM-OBJS-$(CONFIG_PRORES_LGPL_DECODER) += x86/proresdsp.o
|
YASM-OBJS-$(CONFIG_PRORES_LGPL_DECODER) += x86/proresdsp.o
|
||||||
MMX-OBJS-$(CONFIG_PRORES_LGPL_DECODER) += x86/proresdsp-init.o
|
MMX-OBJS-$(CONFIG_PRORES_LGPL_DECODER) += x86/proresdsp-init.o
|
||||||
|
YASM-OBJS-$(CONFIG_PRORES_DECODER) += x86/proresdsp.o
|
||||||
|
MMX-OBJS-$(CONFIG_PRORES_DECODER) += x86/proresdsp-init.o
|
||||||
MMX-OBJS-$(CONFIG_DWT) += x86/snowdsp_mmx.o
|
MMX-OBJS-$(CONFIG_DWT) += x86/snowdsp_mmx.o
|
||||||
MMX-OBJS-$(CONFIG_VC1_DECODER) += x86/vc1dsp_mmx.o
|
MMX-OBJS-$(CONFIG_VC1_DECODER) += x86/vc1dsp_mmx.o
|
||||||
YASM-OBJS-$(CONFIG_VP3_DECODER) += x86/vp3dsp.o
|
YASM-OBJS-$(CONFIG_VP3_DECODER) += x86/vp3dsp.o
|
||||||
|
Loading…
Reference in New Issue
Block a user