mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
Merge remote-tracking branch 'qatar/master'
* qatar/master: lavc: always align height by 32 pixel raw: add 10bit YUV definitions nut: support 10bit YUV mpegvideo_enc: separate declarations and statements oma: make header compile standalone vp3: Reorder some functions to fix VP3 build with Theora disabled. build: fix standalone compilation of ADX encoder build: fix standalone compilation of ADPCM decoders build: fix standalone compilation of mpc7/mpc8 decoders 4xm: Use bytestream2 functions to prevent overreads bytestream: add a new set of bytestream functions with overread checking mpegts: Suppress invalid timebase warnings on DMB streams. mpegts: Fix typo in handling sections in the PMT. vc1dec: Use the right pointer type for the tmp pointer Conflicts: libavcodec/4xm.c libavcodec/utils.c libavcodec/vc1dec.c libavcodec/vp3.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
commit
3be1a4ba9a
2
configure
vendored
2
configure
vendored
@ -1423,6 +1423,8 @@ mp3adufloat_decoder_select="mpegaudiodsp"
|
||||
mp3float_decoder_select="mpegaudiodsp"
|
||||
mp3on4_decoder_select="mpegaudiodsp"
|
||||
mp3on4float_decoder_select="mpegaudiodsp"
|
||||
mpc7_decoder_select="mpegaudiodsp"
|
||||
mpc8_decoder_select="mpegaudiodsp"
|
||||
mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
|
||||
mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
|
||||
mpeg_xvmc_decoder_select="mpegvideo_decoder"
|
||||
|
@ -132,10 +132,8 @@ typedef struct FourXContext{
|
||||
AVFrame current_picture, last_picture;
|
||||
GetBitContext pre_gb; ///< ac/dc prefix
|
||||
GetBitContext gb;
|
||||
const uint8_t *bytestream;
|
||||
const uint8_t *bytestream_end;
|
||||
const uint16_t *wordstream;
|
||||
const uint16_t *wordstream_end;
|
||||
GetByteContext g;
|
||||
GetByteContext g2;
|
||||
int mv[256];
|
||||
VLC pre_vlc;
|
||||
int last_dc;
|
||||
@ -330,11 +328,11 @@ static void decode_p_block(FourXContext *f, uint16_t *dst, uint16_t *src, int lo
|
||||
assert(code>=0 && code<=6);
|
||||
|
||||
if(code == 0){
|
||||
if (f->bytestream_end - f->bytestream < 1){
|
||||
if (f->g.buffer_end - f->g.buffer < 1){
|
||||
av_log(f->avctx, AV_LOG_ERROR, "bytestream overread\n");
|
||||
return;
|
||||
}
|
||||
src += f->mv[ *f->bytestream++ ];
|
||||
src += f->mv[ *f->g.buffer++ ];
|
||||
if(start > src || src > end){
|
||||
av_log(f->avctx, AV_LOG_ERROR, "mv out of pic\n");
|
||||
return;
|
||||
@ -351,37 +349,37 @@ static void decode_p_block(FourXContext *f, uint16_t *dst, uint16_t *src, int lo
|
||||
}else if(code == 3 && f->version<2){
|
||||
mcdc(dst, src, log2w, h, stride, 1, 0);
|
||||
}else if(code == 4){
|
||||
if (f->bytestream_end - f->bytestream < 1){
|
||||
if (f->g.buffer_end - f->g.buffer < 1){
|
||||
av_log(f->avctx, AV_LOG_ERROR, "bytestream overread\n");
|
||||
return;
|
||||
}
|
||||
src += f->mv[ *f->bytestream++ ];
|
||||
src += f->mv[ *f->g.buffer++ ];
|
||||
if(start > src || src > end){
|
||||
av_log(f->avctx, AV_LOG_ERROR, "mv out of pic\n");
|
||||
return;
|
||||
}
|
||||
if (f->wordstream_end - f->wordstream < 1){
|
||||
if (f->g2.buffer_end - f->g2.buffer < 1){
|
||||
av_log(f->avctx, AV_LOG_ERROR, "wordstream overread\n");
|
||||
return;
|
||||
}
|
||||
mcdc(dst, src, log2w, h, stride, 1, av_le2ne16(*f->wordstream++));
|
||||
mcdc(dst, src, log2w, h, stride, 1, bytestream2_get_le16(&f->g2));
|
||||
}else if(code == 5){
|
||||
if (f->wordstream_end - f->wordstream < 1){
|
||||
if (f->g2.buffer_end - f->g2.buffer < 1){
|
||||
av_log(f->avctx, AV_LOG_ERROR, "wordstream overread\n");
|
||||
return;
|
||||
}
|
||||
mcdc(dst, src, log2w, h, stride, 0, av_le2ne16(*f->wordstream++));
|
||||
mcdc(dst, src, log2w, h, stride, 0, bytestream2_get_le16(&f->g2));
|
||||
}else if(code == 6){
|
||||
if (f->wordstream_end - f->wordstream < 2){
|
||||
if (f->g2.buffer_end - f->g2.buffer < 2){
|
||||
av_log(f->avctx, AV_LOG_ERROR, "wordstream overread\n");
|
||||
return;
|
||||
}
|
||||
if(log2w){
|
||||
dst[0] = av_le2ne16(*f->wordstream++);
|
||||
dst[1] = av_le2ne16(*f->wordstream++);
|
||||
dst[0] = bytestream2_get_le16(&f->g2);
|
||||
dst[1] = bytestream2_get_le16(&f->g2);
|
||||
}else{
|
||||
dst[0 ] = av_le2ne16(*f->wordstream++);
|
||||
dst[stride] = av_le2ne16(*f->wordstream++);
|
||||
dst[0 ] = bytestream2_get_le16(&f->g2);
|
||||
dst[stride] = bytestream2_get_le16(&f->g2);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -393,7 +391,7 @@ static int decode_p_frame(FourXContext *f, const uint8_t *buf, int length){
|
||||
uint16_t *src= (uint16_t*)f->last_picture.data[0];
|
||||
uint16_t *dst= (uint16_t*)f->current_picture.data[0];
|
||||
const int stride= f->current_picture.linesize[0]>>1;
|
||||
unsigned int bitstream_size, bytestream_size, wordstream_size, extra;
|
||||
unsigned int bitstream_size, bytestream_size, wordstream_size, extra, bytestream_offset, wordstream_offset;
|
||||
|
||||
if(f->version>1){
|
||||
extra=20;
|
||||
@ -425,10 +423,10 @@ static int decode_p_frame(FourXContext *f, const uint8_t *buf, int length){
|
||||
memset((uint8_t*)f->bitstream_buffer + bitstream_size, 0, FF_INPUT_BUFFER_PADDING_SIZE);
|
||||
init_get_bits(&f->gb, f->bitstream_buffer, 8*bitstream_size);
|
||||
|
||||
f->wordstream= (const uint16_t*)(buf + extra + bitstream_size);
|
||||
f->wordstream_end= f->wordstream + wordstream_size/2;
|
||||
f->bytestream= buf + extra + bitstream_size + wordstream_size;
|
||||
f->bytestream_end = f->bytestream + bytestream_size;
|
||||
wordstream_offset = extra + bitstream_size;
|
||||
bytestream_offset = extra + bitstream_size + wordstream_size;
|
||||
bytestream2_init(&f->g2, buf + wordstream_offset, length - wordstream_offset);
|
||||
bytestream2_init(&f->g, buf + bytestream_offset, length - bytestream_offset);
|
||||
|
||||
init_mv(f);
|
||||
|
||||
|
@ -525,14 +525,14 @@ OBJS-$(CONFIG_PCM_ZORK_DECODER) += pcm.o
|
||||
|
||||
OBJS-$(CONFIG_ADPCM_4XM_DECODER) += adpcm.o adpcm_data.o
|
||||
OBJS-$(CONFIG_ADPCM_ADX_DECODER) += adxdec.o adx.o
|
||||
OBJS-$(CONFIG_ADPCM_ADX_ENCODER) += adxenc.o
|
||||
OBJS-$(CONFIG_ADPCM_ADX_ENCODER) += adxenc.o adx.o
|
||||
OBJS-$(CONFIG_ADPCM_CT_DECODER) += adpcm.o adpcm_data.o
|
||||
OBJS-$(CONFIG_ADPCM_EA_DECODER) += adpcm.o
|
||||
OBJS-$(CONFIG_ADPCM_EA_MAXIS_XA_DECODER) += adpcm.o
|
||||
OBJS-$(CONFIG_ADPCM_EA_R1_DECODER) += adpcm.o
|
||||
OBJS-$(CONFIG_ADPCM_EA_R2_DECODER) += adpcm.o
|
||||
OBJS-$(CONFIG_ADPCM_EA_R3_DECODER) += adpcm.o
|
||||
OBJS-$(CONFIG_ADPCM_EA_XAS_DECODER) += adpcm.o
|
||||
OBJS-$(CONFIG_ADPCM_EA_DECODER) += adpcm.o adpcm_data.o
|
||||
OBJS-$(CONFIG_ADPCM_EA_MAXIS_XA_DECODER) += adpcm.o adpcm_data.o
|
||||
OBJS-$(CONFIG_ADPCM_EA_R1_DECODER) += adpcm.o adpcm_data.o
|
||||
OBJS-$(CONFIG_ADPCM_EA_R2_DECODER) += adpcm.o adpcm_data.o
|
||||
OBJS-$(CONFIG_ADPCM_EA_R3_DECODER) += adpcm.o adpcm_data.o
|
||||
OBJS-$(CONFIG_ADPCM_EA_XAS_DECODER) += adpcm.o adpcm_data.o
|
||||
OBJS-$(CONFIG_ADPCM_G722_DECODER) += g722.o g722dec.o
|
||||
OBJS-$(CONFIG_ADPCM_G722_ENCODER) += g722.o g722enc.o
|
||||
OBJS-$(CONFIG_ADPCM_G726_DECODER) += g726.o
|
||||
@ -551,13 +551,13 @@ OBJS-$(CONFIG_ADPCM_IMA_WAV_ENCODER) += adpcmenc.o adpcm_data.o
|
||||
OBJS-$(CONFIG_ADPCM_IMA_WS_DECODER) += adpcm.o adpcm_data.o
|
||||
OBJS-$(CONFIG_ADPCM_MS_DECODER) += adpcm.o adpcm_data.o
|
||||
OBJS-$(CONFIG_ADPCM_MS_ENCODER) += adpcmenc.o adpcm_data.o
|
||||
OBJS-$(CONFIG_ADPCM_SBPRO_2_DECODER) += adpcm.o
|
||||
OBJS-$(CONFIG_ADPCM_SBPRO_3_DECODER) += adpcm.o
|
||||
OBJS-$(CONFIG_ADPCM_SBPRO_4_DECODER) += adpcm.o
|
||||
OBJS-$(CONFIG_ADPCM_SBPRO_2_DECODER) += adpcm.o adpcm_data.o
|
||||
OBJS-$(CONFIG_ADPCM_SBPRO_3_DECODER) += adpcm.o adpcm_data.o
|
||||
OBJS-$(CONFIG_ADPCM_SBPRO_4_DECODER) += adpcm.o adpcm_data.o
|
||||
OBJS-$(CONFIG_ADPCM_SWF_DECODER) += adpcm.o adpcm_data.o
|
||||
OBJS-$(CONFIG_ADPCM_SWF_ENCODER) += adpcmenc.o adpcm_data.o
|
||||
OBJS-$(CONFIG_ADPCM_THP_DECODER) += adpcm.o
|
||||
OBJS-$(CONFIG_ADPCM_XA_DECODER) += adpcm.o
|
||||
OBJS-$(CONFIG_ADPCM_THP_DECODER) += adpcm.o adpcm_data.o
|
||||
OBJS-$(CONFIG_ADPCM_XA_DECODER) += adpcm.o adpcm_data.o
|
||||
OBJS-$(CONFIG_ADPCM_YAMAHA_DECODER) += adpcm.o adpcm_data.o
|
||||
OBJS-$(CONFIG_ADPCM_YAMAHA_ENCODER) += adpcmenc.o adpcm_data.o
|
||||
|
||||
|
@ -26,6 +26,10 @@
|
||||
#include "libavutil/common.h"
|
||||
#include "libavutil/intreadwrite.h"
|
||||
|
||||
typedef struct {
|
||||
const uint8_t *buffer, *buffer_end;
|
||||
} GetByteContext;
|
||||
|
||||
#define DEF_T(type, name, bytes, read, write) \
|
||||
static av_always_inline type bytestream_get_ ## name(const uint8_t **b){\
|
||||
(*b) += bytes;\
|
||||
@ -34,6 +38,18 @@ static av_always_inline type bytestream_get_ ## name(const uint8_t **b){\
|
||||
static av_always_inline void bytestream_put_ ##name(uint8_t **b, const type value){\
|
||||
write(*b, value);\
|
||||
(*b) += bytes;\
|
||||
}\
|
||||
static av_always_inline type bytestream2_get_ ## name(GetByteContext *g)\
|
||||
{\
|
||||
if (g->buffer_end - g->buffer < bytes)\
|
||||
return 0;\
|
||||
return bytestream_get_ ## name(&g->buffer);\
|
||||
}\
|
||||
static av_always_inline type bytestream2_peek_ ## name(GetByteContext *g)\
|
||||
{\
|
||||
if (g->buffer_end - g->buffer < bytes)\
|
||||
return 0;\
|
||||
return read(g->buffer);\
|
||||
}
|
||||
|
||||
#define DEF(name, bytes, read, write) \
|
||||
@ -55,6 +71,34 @@ DEF (byte, 1, AV_RB8 , AV_WB8 )
|
||||
#undef DEF64
|
||||
#undef DEF_T
|
||||
|
||||
static av_always_inline void bytestream2_init(GetByteContext *g,
|
||||
const uint8_t *buf, int buf_size)
|
||||
{
|
||||
g->buffer = buf;
|
||||
g->buffer_end = buf + buf_size;
|
||||
}
|
||||
|
||||
static av_always_inline unsigned int bytestream2_get_bytes_left(GetByteContext *g)
|
||||
{
|
||||
return g->buffer_end - g->buffer;
|
||||
}
|
||||
|
||||
static av_always_inline void bytestream2_skip(GetByteContext *g,
|
||||
unsigned int size)
|
||||
{
|
||||
g->buffer += FFMIN(g->buffer_end - g->buffer, size);
|
||||
}
|
||||
|
||||
static av_always_inline unsigned int bytestream2_get_buffer(GetByteContext *g,
|
||||
uint8_t *dst,
|
||||
unsigned int size)
|
||||
{
|
||||
int size2 = FFMIN(g->buffer_end - g->buffer, size);
|
||||
memcpy(dst, g->buffer, size2);
|
||||
g->buffer += size2;
|
||||
return size2;
|
||||
}
|
||||
|
||||
static av_always_inline unsigned int bytestream_get_buffer(const uint8_t **b, uint8_t *dst, unsigned int size)
|
||||
{
|
||||
memcpy(dst, *b, size);
|
||||
|
@ -1213,10 +1213,11 @@ no_output_pic:
|
||||
if (s->reordered_input_picture[0]->f.type == FF_BUFFER_TYPE_SHARED || s->avctx->rc_buffer_size) {
|
||||
// input is a shared pix, so we can't modifiy it -> alloc a new one & ensure that the shared one is reuseable
|
||||
|
||||
Picture *pic;
|
||||
int i= ff_find_unused_picture(s, 0);
|
||||
if (i < 0)
|
||||
return i;
|
||||
Picture *pic= &s->picture[i];
|
||||
pic = &s->picture[i];
|
||||
|
||||
pic->f.reference = s->reordered_input_picture[0]->f.reference;
|
||||
if(ff_alloc_picture(s, pic, 0) < 0){
|
||||
|
@ -108,6 +108,12 @@ const PixelFormatTag ff_raw_pix_fmt_tags[] = {
|
||||
{ PIX_FMT_BGR48BE, MKTAG( 48, 'B', 'G', 'R') },
|
||||
{ PIX_FMT_GRAY16LE, MKTAG('Y', '1', 0 , 16 ) },
|
||||
{ PIX_FMT_GRAY16BE, MKTAG(16 , 0 , '1', 'Y') },
|
||||
{ PIX_FMT_YUV420P10LE, MKTAG('Y', '3', 11 , 10 ) },
|
||||
{ PIX_FMT_YUV420P10BE, MKTAG(10 , 11 , '3', 'Y') },
|
||||
{ PIX_FMT_YUV422P10LE, MKTAG('Y', '3', 10 , 10 ) },
|
||||
{ PIX_FMT_YUV422P10BE, MKTAG(10 , 10 , '3', 'Y') },
|
||||
{ PIX_FMT_YUV444P10LE, MKTAG('Y', '3', 0 , 10 ) },
|
||||
{ PIX_FMT_YUV444P10BE, MKTAG(10 , 0 , '3', 'Y') },
|
||||
{ PIX_FMT_YUV420P16LE, MKTAG('Y', '3', 11 , 16 ) },
|
||||
{ PIX_FMT_YUV420P16BE, MKTAG(16 , 11 , '3', 'Y') },
|
||||
{ PIX_FMT_YUV422P16LE, MKTAG('Y', '3', 10 , 16 ) },
|
||||
|
@ -167,10 +167,8 @@ void avcodec_align_dimensions2(AVCodecContext *s, int *width, int *height,
|
||||
case PIX_FMT_GBRP9BE:
|
||||
case PIX_FMT_GBRP10LE:
|
||||
case PIX_FMT_GBRP10BE:
|
||||
w_align= 16; //FIXME check for non mpeg style codecs and use less alignment
|
||||
h_align= 16;
|
||||
if(s->codec_id == CODEC_ID_MPEG2VIDEO || s->codec_id == CODEC_ID_MJPEG || s->codec_id == CODEC_ID_AMV || s->codec_id == CODEC_ID_THP || s->codec_id == CODEC_ID_H264 || s->codec_id == CODEC_ID_PRORES)
|
||||
h_align= 32; // interlaced is rounded up to 2 MBs
|
||||
w_align = 16; //FIXME assume 16 pixel per macroblock
|
||||
h_align = 16 * 2; // interlaced needs 2 macroblocks height
|
||||
break;
|
||||
case PIX_FMT_YUV411P:
|
||||
case PIX_FMT_UYYVYY411:
|
||||
|
@ -5426,13 +5426,12 @@ static int vc1_decode_frame(AVCodecContext *avctx, void *data,
|
||||
AVFrame *pict = data;
|
||||
uint8_t *buf2 = NULL;
|
||||
const uint8_t *buf_start = buf;
|
||||
uint8_t *tmp;
|
||||
int mb_height, n_slices1=-1;
|
||||
struct {
|
||||
uint8_t *buf;
|
||||
GetBitContext gb;
|
||||
int mby_start;
|
||||
} *slices = NULL;
|
||||
} *slices = NULL, *tmp;
|
||||
|
||||
if(s->flags & CODEC_FLAG_LOW_DELAY)
|
||||
s->low_delay = 1;
|
||||
|
151
libavcodec/vp3.c
151
libavcodec/vp3.c
@ -45,9 +45,6 @@
|
||||
|
||||
#define FRAGMENT_PIXELS 8
|
||||
|
||||
static av_cold int vp3_decode_end(AVCodecContext *avctx);
|
||||
static void vp3_decode_flush(AVCodecContext *avctx);
|
||||
|
||||
//FIXME split things out into their own arrays
|
||||
typedef struct Vp3Fragment {
|
||||
int16_t dc;
|
||||
@ -256,6 +253,63 @@ typedef struct Vp3DecodeContext {
|
||||
* VP3 specific functions
|
||||
************************************************************************/
|
||||
|
||||
static void vp3_decode_flush(AVCodecContext *avctx)
|
||||
{
|
||||
Vp3DecodeContext *s = avctx->priv_data;
|
||||
|
||||
if (s->golden_frame.data[0]) {
|
||||
if (s->golden_frame.data[0] == s->last_frame.data[0])
|
||||
memset(&s->last_frame, 0, sizeof(AVFrame));
|
||||
if (s->current_frame.data[0] == s->golden_frame.data[0])
|
||||
memset(&s->current_frame, 0, sizeof(AVFrame));
|
||||
ff_thread_release_buffer(avctx, &s->golden_frame);
|
||||
}
|
||||
if (s->last_frame.data[0]) {
|
||||
if (s->current_frame.data[0] == s->last_frame.data[0])
|
||||
memset(&s->current_frame, 0, sizeof(AVFrame));
|
||||
ff_thread_release_buffer(avctx, &s->last_frame);
|
||||
}
|
||||
if (s->current_frame.data[0])
|
||||
ff_thread_release_buffer(avctx, &s->current_frame);
|
||||
}
|
||||
|
||||
static av_cold int vp3_decode_end(AVCodecContext *avctx)
|
||||
{
|
||||
Vp3DecodeContext *s = avctx->priv_data;
|
||||
int i;
|
||||
|
||||
av_free(s->superblock_coding);
|
||||
av_free(s->all_fragments);
|
||||
av_free(s->coded_fragment_list[0]);
|
||||
av_free(s->dct_tokens_base);
|
||||
av_free(s->superblock_fragments);
|
||||
av_free(s->macroblock_coding);
|
||||
av_free(s->motion_val[0]);
|
||||
av_free(s->motion_val[1]);
|
||||
av_free(s->edge_emu_buffer);
|
||||
|
||||
if (avctx->internal->is_copy)
|
||||
return 0;
|
||||
|
||||
for (i = 0; i < 16; i++) {
|
||||
free_vlc(&s->dc_vlc[i]);
|
||||
free_vlc(&s->ac_vlc_1[i]);
|
||||
free_vlc(&s->ac_vlc_2[i]);
|
||||
free_vlc(&s->ac_vlc_3[i]);
|
||||
free_vlc(&s->ac_vlc_4[i]);
|
||||
}
|
||||
|
||||
free_vlc(&s->superblock_run_length_vlc);
|
||||
free_vlc(&s->fragment_run_length_vlc);
|
||||
free_vlc(&s->mode_code_vlc);
|
||||
free_vlc(&s->motion_vector_vlc);
|
||||
|
||||
/* release all frames */
|
||||
vp3_decode_flush(avctx);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* This function sets up all of the various blocks mappings:
|
||||
* superblocks <-> fragments, macroblocks <-> fragments,
|
||||
@ -2002,43 +2056,6 @@ error:
|
||||
|
||||
static void vp3_decode_flush(AVCodecContext *avctx);
|
||||
|
||||
static av_cold int vp3_decode_end(AVCodecContext *avctx)
|
||||
{
|
||||
Vp3DecodeContext *s = avctx->priv_data;
|
||||
int i;
|
||||
|
||||
av_free(s->superblock_coding);
|
||||
av_free(s->all_fragments);
|
||||
av_free(s->coded_fragment_list[0]);
|
||||
av_free(s->dct_tokens_base);
|
||||
av_free(s->superblock_fragments);
|
||||
av_free(s->macroblock_coding);
|
||||
av_free(s->motion_val[0]);
|
||||
av_free(s->motion_val[1]);
|
||||
av_free(s->edge_emu_buffer);
|
||||
|
||||
if (avctx->internal->is_copy)
|
||||
return 0;
|
||||
|
||||
for (i = 0; i < 16; i++) {
|
||||
free_vlc(&s->dc_vlc[i]);
|
||||
free_vlc(&s->ac_vlc_1[i]);
|
||||
free_vlc(&s->ac_vlc_2[i]);
|
||||
free_vlc(&s->ac_vlc_3[i]);
|
||||
free_vlc(&s->ac_vlc_4[i]);
|
||||
}
|
||||
|
||||
free_vlc(&s->superblock_run_length_vlc);
|
||||
free_vlc(&s->fragment_run_length_vlc);
|
||||
free_vlc(&s->mode_code_vlc);
|
||||
free_vlc(&s->motion_vector_vlc);
|
||||
|
||||
/* release all frames */
|
||||
vp3_decode_flush(avctx);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int read_huffman_tree(AVCodecContext *avctx, GetBitContext *gb)
|
||||
{
|
||||
Vp3DecodeContext *s = avctx->priv_data;
|
||||
@ -2073,6 +2090,23 @@ static int read_huffman_tree(AVCodecContext *avctx, GetBitContext *gb)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int vp3_init_thread_copy(AVCodecContext *avctx)
|
||||
{
|
||||
Vp3DecodeContext *s = avctx->priv_data;
|
||||
|
||||
s->superblock_coding = NULL;
|
||||
s->all_fragments = NULL;
|
||||
s->coded_fragment_list[0] = NULL;
|
||||
s->dct_tokens_base = NULL;
|
||||
s->superblock_fragments = NULL;
|
||||
s->macroblock_coding = NULL;
|
||||
s->motion_val[0] = NULL;
|
||||
s->motion_val[1] = NULL;
|
||||
s->edge_emu_buffer = NULL;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if CONFIG_THEORA_DECODER
|
||||
static const enum PixelFormat theora_pix_fmts[4] = {
|
||||
PIX_FMT_YUV420P, PIX_FMT_NONE, PIX_FMT_YUV422P, PIX_FMT_YUV444P
|
||||
@ -2334,43 +2368,6 @@ static av_cold int theora_decode_init(AVCodecContext *avctx)
|
||||
return vp3_decode_init(avctx);
|
||||
}
|
||||
|
||||
static void vp3_decode_flush(AVCodecContext *avctx)
|
||||
{
|
||||
Vp3DecodeContext *s = avctx->priv_data;
|
||||
|
||||
if (s->golden_frame.data[0]) {
|
||||
if (s->golden_frame.data[0] == s->last_frame.data[0])
|
||||
memset(&s->last_frame, 0, sizeof(AVFrame));
|
||||
if (s->current_frame.data[0] == s->golden_frame.data[0])
|
||||
memset(&s->current_frame, 0, sizeof(AVFrame));
|
||||
ff_thread_release_buffer(avctx, &s->golden_frame);
|
||||
}
|
||||
if (s->last_frame.data[0]) {
|
||||
if (s->current_frame.data[0] == s->last_frame.data[0])
|
||||
memset(&s->current_frame, 0, sizeof(AVFrame));
|
||||
ff_thread_release_buffer(avctx, &s->last_frame);
|
||||
}
|
||||
if (s->current_frame.data[0])
|
||||
ff_thread_release_buffer(avctx, &s->current_frame);
|
||||
}
|
||||
|
||||
static int vp3_init_thread_copy(AVCodecContext *avctx)
|
||||
{
|
||||
Vp3DecodeContext *s = avctx->priv_data;
|
||||
|
||||
s->superblock_coding = NULL;
|
||||
s->all_fragments = NULL;
|
||||
s->coded_fragment_list[0] = NULL;
|
||||
s->dct_tokens_base = NULL;
|
||||
s->superblock_fragments = NULL;
|
||||
s->macroblock_coding = NULL;
|
||||
s->motion_val[0] = NULL;
|
||||
s->motion_val[1] = NULL;
|
||||
s->edge_emu_buffer = NULL;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
AVCodec ff_theora_decoder = {
|
||||
.name = "theora",
|
||||
.type = AVMEDIA_TYPE_VIDEO,
|
||||
|
@ -762,7 +762,8 @@ static int read_sl_header(PESContext *pes, SLConfigDescr *sl, const uint8_t *buf
|
||||
if (cts != AV_NOPTS_VALUE)
|
||||
pes->pts = cts;
|
||||
|
||||
avpriv_set_pts_info(pes->st, sl->timestamp_len, 1, sl->timestamp_res);
|
||||
if (sl->timestamp_len && sl->timestamp_res)
|
||||
avpriv_set_pts_info(pes->st, sl->timestamp_len, 1, sl->timestamp_res);
|
||||
|
||||
return (get_bits_count(&gb) + 7) >> 3;
|
||||
}
|
||||
@ -1496,7 +1497,7 @@ static void pmt_cb(MpegTSFilter *filter, const uint8_t *section, int section_len
|
||||
if (idx >= 0) {
|
||||
st = ts->stream->streams[idx];
|
||||
} else {
|
||||
st = avformat_new_stream(pes->stream, NULL);
|
||||
st = avformat_new_stream(ts->stream, NULL);
|
||||
st->id = pid;
|
||||
st->codec->codec_type = AVMEDIA_TYPE_DATA;
|
||||
}
|
||||
|
@ -70,6 +70,12 @@ const AVCodecTag ff_nut_video_tags[] = {
|
||||
{ CODEC_ID_RAWVIDEO, MKTAG('R', 'G', 'B', 48 ) },
|
||||
{ CODEC_ID_RAWVIDEO, MKTAG(48 , 'B', 'G', 'R') },
|
||||
{ CODEC_ID_RAWVIDEO, MKTAG(48 , 'R', 'G', 'B') },
|
||||
{ CODEC_ID_RAWVIDEO, MKTAG('Y', '3', 11 , 10 ) },
|
||||
{ CODEC_ID_RAWVIDEO, MKTAG(10 , 11 , '3', 'Y') },
|
||||
{ CODEC_ID_RAWVIDEO, MKTAG('Y', '3', 10 , 10 ) },
|
||||
{ CODEC_ID_RAWVIDEO, MKTAG(10 , 10 , '3', 'Y') },
|
||||
{ CODEC_ID_RAWVIDEO, MKTAG('Y', '3', 0 , 10 ) },
|
||||
{ CODEC_ID_RAWVIDEO, MKTAG(10 , 0 , '3', 'Y') },
|
||||
{ CODEC_ID_RAWVIDEO, MKTAG('Y', '1', 0 , 16 ) },
|
||||
{ CODEC_ID_RAWVIDEO, MKTAG(16 , 0 , '1', 'Y') },
|
||||
{ CODEC_ID_RAWVIDEO, MKTAG('Y', '3', 11 , 16 ) },
|
||||
|
@ -21,6 +21,10 @@
|
||||
#ifndef AVFORMAT_OMA_H
|
||||
#define AVFORMAT_OMA_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#include "internal.h"
|
||||
|
||||
#define EA3_HEADER_SIZE 96
|
||||
#define ID3v2_EA3_MAGIC "ea3"
|
||||
#define OMA_ENC_HEADER_SIZE 16
|
||||
@ -36,4 +40,5 @@ enum {
|
||||
extern const uint16_t ff_oma_srate_tab[6];
|
||||
|
||||
extern const AVCodecTag ff_oma_codec_tags[];
|
||||
#endif
|
||||
|
||||
#endif /* AVFORMAT_OMA_H */
|
||||
|
@ -35,23 +35,23 @@ uyvy422 adcf64516a19fce44df77082bdb16291
|
||||
yuv410p 2d9225153c83ee1132397d619d94d1b3
|
||||
yuv411p 8b298af3e43348ca1b11eb8a3252ac6c
|
||||
yuv420p eba2f135a08829387e2f698ff72a2939
|
||||
yuv420p10be ea2aee509286fa3d07a6c68fec9967a5
|
||||
yuv420p10le 645ef73e06de41c83a7bc724179d2ce3
|
||||
yuv420p10be 2f88c301feeaccd2a5fb55f54fc30be9
|
||||
yuv420p10le 93f175084af4e78f97c7710e505f3057
|
||||
yuv420p16be ba858ff4246368c28f03152487f57ef3
|
||||
yuv420p16le de239729a4fe1d4cfa3743e006654e78
|
||||
yuv420p9be 64e36fd90573f67ac2006d103972a79b
|
||||
yuv420p9le 9ed4b1dfabc53fd9e586ff6c4c43af80
|
||||
yuv422p c9bba4529821d796a6ab09f6a5fd355a
|
||||
yuv422p10be bdc13b630fd668b34c6fe1aae28dfc71
|
||||
yuv422p10le d0607c260a45c973e6639f4e449730ad
|
||||
yuv422p10be 11af7dfafe8bc025c7e3bd82b830fe8a
|
||||
yuv422p10le ec04efb76efa79bf0d02b21572371a56
|
||||
yuv422p16be 5499502e1c29534a158a1fe60e889f60
|
||||
yuv422p16le e3d61fde6978591596bc36b914386623
|
||||
yuv422p9be 29b71579946940a8c00fa844c9dff507
|
||||
yuv422p9le 062b7f9cbb972bf36b5bdb1a7623701a
|
||||
yuv440p 5a064afe2b453bb52cdb3f176b1aa1cf
|
||||
yuv444p 0a98447b78fd476aa39686da6a74fa2e
|
||||
yuv444p10be e65cbae7e4f1892c23defbc8e8052cf6
|
||||
yuv444p10le 767179dd82846cf00ee4c340c9c1ab74
|
||||
yuv444p10be 71be185a2fb7a353eb024df9bc63212d
|
||||
yuv444p10le c1c6b30a12065c7901c0a267e4861a0f
|
||||
yuv444p16be 1c6ea2c2f5e539006112ceec3d4e7d90
|
||||
yuv444p16le 20f86bc2f68d2b3f1f2b48b97b2189f4
|
||||
yuv444p9be 6ab31f4c12b533ce318ecdff83cdd054
|
||||
|
@ -36,23 +36,23 @@ uyvy422 adcf64516a19fce44df77082bdb16291
|
||||
yuv410p 2d9225153c83ee1132397d619d94d1b3
|
||||
yuv411p 8b298af3e43348ca1b11eb8a3252ac6c
|
||||
yuv420p eba2f135a08829387e2f698ff72a2939
|
||||
yuv420p10be ea2aee509286fa3d07a6c68fec9967a5
|
||||
yuv420p10le 645ef73e06de41c83a7bc724179d2ce3
|
||||
yuv420p10be 2f88c301feeaccd2a5fb55f54fc30be9
|
||||
yuv420p10le 93f175084af4e78f97c7710e505f3057
|
||||
yuv420p16be ba858ff4246368c28f03152487f57ef3
|
||||
yuv420p16le de239729a4fe1d4cfa3743e006654e78
|
||||
yuv420p9be 64e36fd90573f67ac2006d103972a79b
|
||||
yuv420p9le 9ed4b1dfabc53fd9e586ff6c4c43af80
|
||||
yuv422p c9bba4529821d796a6ab09f6a5fd355a
|
||||
yuv422p10be bdc13b630fd668b34c6fe1aae28dfc71
|
||||
yuv422p10le d0607c260a45c973e6639f4e449730ad
|
||||
yuv422p10be 11af7dfafe8bc025c7e3bd82b830fe8a
|
||||
yuv422p10le ec04efb76efa79bf0d02b21572371a56
|
||||
yuv422p16be 5499502e1c29534a158a1fe60e889f60
|
||||
yuv422p16le e3d61fde6978591596bc36b914386623
|
||||
yuv422p9be 29b71579946940a8c00fa844c9dff507
|
||||
yuv422p9le 062b7f9cbb972bf36b5bdb1a7623701a
|
||||
yuv440p 5a064afe2b453bb52cdb3f176b1aa1cf
|
||||
yuv444p 0a98447b78fd476aa39686da6a74fa2e
|
||||
yuv444p10be e65cbae7e4f1892c23defbc8e8052cf6
|
||||
yuv444p10le 767179dd82846cf00ee4c340c9c1ab74
|
||||
yuv444p10be 71be185a2fb7a353eb024df9bc63212d
|
||||
yuv444p10le c1c6b30a12065c7901c0a267e4861a0f
|
||||
yuv444p16be 1c6ea2c2f5e539006112ceec3d4e7d90
|
||||
yuv444p16le 20f86bc2f68d2b3f1f2b48b97b2189f4
|
||||
yuv444p9be 6ab31f4c12b533ce318ecdff83cdd054
|
||||
|
@ -36,23 +36,23 @@ uyvy422 adcf64516a19fce44df77082bdb16291
|
||||
yuv410p 2d9225153c83ee1132397d619d94d1b3
|
||||
yuv411p 8b298af3e43348ca1b11eb8a3252ac6c
|
||||
yuv420p eba2f135a08829387e2f698ff72a2939
|
||||
yuv420p10be ea2aee509286fa3d07a6c68fec9967a5
|
||||
yuv420p10le 645ef73e06de41c83a7bc724179d2ce3
|
||||
yuv420p10be 2f88c301feeaccd2a5fb55f54fc30be9
|
||||
yuv420p10le 93f175084af4e78f97c7710e505f3057
|
||||
yuv420p16be ba858ff4246368c28f03152487f57ef3
|
||||
yuv420p16le de239729a4fe1d4cfa3743e006654e78
|
||||
yuv420p9be 64e36fd90573f67ac2006d103972a79b
|
||||
yuv420p9le 9ed4b1dfabc53fd9e586ff6c4c43af80
|
||||
yuv422p c9bba4529821d796a6ab09f6a5fd355a
|
||||
yuv422p10be bdc13b630fd668b34c6fe1aae28dfc71
|
||||
yuv422p10le d0607c260a45c973e6639f4e449730ad
|
||||
yuv422p10be 11af7dfafe8bc025c7e3bd82b830fe8a
|
||||
yuv422p10le ec04efb76efa79bf0d02b21572371a56
|
||||
yuv422p16be 5499502e1c29534a158a1fe60e889f60
|
||||
yuv422p16le e3d61fde6978591596bc36b914386623
|
||||
yuv422p9be 29b71579946940a8c00fa844c9dff507
|
||||
yuv422p9le 062b7f9cbb972bf36b5bdb1a7623701a
|
||||
yuv440p 5a064afe2b453bb52cdb3f176b1aa1cf
|
||||
yuv444p 0a98447b78fd476aa39686da6a74fa2e
|
||||
yuv444p10be e65cbae7e4f1892c23defbc8e8052cf6
|
||||
yuv444p10le 767179dd82846cf00ee4c340c9c1ab74
|
||||
yuv444p10be 71be185a2fb7a353eb024df9bc63212d
|
||||
yuv444p10le c1c6b30a12065c7901c0a267e4861a0f
|
||||
yuv444p16be 1c6ea2c2f5e539006112ceec3d4e7d90
|
||||
yuv444p16le 20f86bc2f68d2b3f1f2b48b97b2189f4
|
||||
yuv444p9be 6ab31f4c12b533ce318ecdff83cdd054
|
||||
|
@ -36,23 +36,23 @@ uyvy422 314bd486277111a95d9369b944fa0400
|
||||
yuv410p 7df8f6d69b56a8dcb6c7ee908e5018b5
|
||||
yuv411p 1143e7c5cc28fe0922b051b17733bc4c
|
||||
yuv420p fdad2d8df8985e3d17e73c71f713cb14
|
||||
yuv420p10be 6d335e75b553da590135cf8bb999610c
|
||||
yuv420p10le d510ddbabefd03ef39ec943fcb51b709
|
||||
yuv420p10be 418039dbd82cf612db88417276aa0d1a
|
||||
yuv420p10le ff7e5321208ab995b4f95634ebdf192b
|
||||
yuv420p16be 31988e9a5d6acacaa710f67bc1172f3a
|
||||
yuv420p16le f5390ce399f88e0e4e2621ed7833b250
|
||||
yuv420p9be ec4983b7a949c0472110a7a2c58e278a
|
||||
yuv420p9le c136dce5913a722eee44ab72cff664b2
|
||||
yuv422p 918e37701ee7377d16a8a6c119c56a40
|
||||
yuv422p10be cea7ca6b0e66d6f29539885896c88603
|
||||
yuv422p10le a10c4a5837547716f13cd61918b145f9
|
||||
yuv422p10be 315654908d50718e175aae018c484732
|
||||
yuv422p10le 91bbc78a9a56f659b55abc17722dcc09
|
||||
yuv422p16be e7e34fe9264784763ab6cb406524c0f3
|
||||
yuv422p16le c435b76b08204dda6908640fb5fd4621
|
||||
yuv422p9be 82494823944912f73cebc58ad2979bbd
|
||||
yuv422p9le fc69c8a21f473916a4b4225636b97e06
|
||||
yuv440p 461503fdb9b90451020aa3b25ddf041c
|
||||
yuv444p 81b2eba962d12e8d64f003ac56f6faf2
|
||||
yuv444p10be e9d3c8e744b8b0d8187ca092fa203fc9
|
||||
yuv444p10le 02f0a336e9da062a64df1ba487e102c5
|
||||
yuv444p10be fb304d77c6d2e18df5938662a22176f0
|
||||
yuv444p10le b17136913eb066dca6be6af645b9f7e8
|
||||
yuv444p16be 0da9bed80f5542682ab286f3261cf24c
|
||||
yuv444p16le a0c5d3c7bf3f181db503cf8e450d1335
|
||||
yuv444p9be 9ac2643ce7f7e5c4e17c8c9fd8494d4a
|
||||
|
@ -36,23 +36,23 @@ uyvy422 ffbd36720c77398d9a0d03ce2625928f
|
||||
yuv410p 7bfb39d7afb49d6a6173e6b23ae321eb
|
||||
yuv411p 4a90048cc3a65fac150e53289700efe1
|
||||
yuv420p 2e6d6062e8cad37fb3ab2c433b55f382
|
||||
yuv420p10be fac8e0ae5a81861cddac97ddc4100b66
|
||||
yuv420p10le cb83ed3552113e0292e30adee774359c
|
||||
yuv420p10be 7ce787a888381dd46b0212c099ecaad9
|
||||
yuv420p10le bf22a1c543a7b3dbc556a0eb9592e179
|
||||
yuv420p16be b6d25ba55bc1831d352f379311b42b6d
|
||||
yuv420p16le 1d7ef427b6f79a02b93948738dab5442
|
||||
yuv420p9be 9865bf5c4392b56b1c4eb4f5a3fd32f9
|
||||
yuv420p9le 0f1e371a1374d3cba2205b70cc7cac90
|
||||
yuv422p d7f5cb44d9b0210d66d6a8762640ab34
|
||||
yuv422p10be 588fe319b96513c32e21d3e32b45447f
|
||||
yuv422p10le 11b57f2bd9661024153f3973b9090cdb
|
||||
yuv422p10be 0be8378c3773e1c0b394315ef4994351
|
||||
yuv422p10le 6518094fe8de6bee95af21af1e5dc1e1
|
||||
yuv422p16be 9bd8f8c961822b586fa4cf992be54acc
|
||||
yuv422p16le 9c4a1239605c7952b736ac3130163f14
|
||||
yuv422p9be 7c6f1e140b3999ee7d923854e507752a
|
||||
yuv422p9le 51f10d79c07989060dd06e767e6d7d60
|
||||
yuv440p 876385e96165acf51271b20e5d85a416
|
||||
yuv444p 9c3c667d1613b72d15bc6d851c5eb8f7
|
||||
yuv444p10be 944a4997c4edb3a8dd0f0493cfd5a1fd
|
||||
yuv444p10le 2d0947ae89ecc6a501eee6832cb27e06
|
||||
yuv444p10be ee069cc6db48975eb029d72f889a7fe6
|
||||
yuv444p10le 645b3335248113cafe3c29edb1d7f3be
|
||||
yuv444p16be de2dedfc6f12073ffead113f86e07ecf
|
||||
yuv444p16le 8e83323cf102d6c823a03ae8a7b7e033
|
||||
yuv444p9be 6ac92b7dc9ab2fc59bee99204886899a
|
||||
|
Loading…
Reference in New Issue
Block a user