* qatar/master: (26 commits) eac3dec: replace undefined 1<<31 with INT32_MIN in noise generation yadif: specify array size outside DECLARE_ALIGNED prores: specify array size outside DECLARE_ALIGNED brackets. WavPack demuxer: set packet duration tta: use skip_bits_long() mxfdec: Ignore the last entry in Avid's index table segments mxfdec: Sanity-check SampleRate mxfdec: Handle small EditUnitByteCount mxfdec: Consider OPAtom files that do not have exactly one EC to be OP1a mxfdec: Don't crash in mxf_packet_timestamps() if current_edit_unit overflows mxfdec: Zero nb_ptses in mxf_compute_ptses_fake_index() mxfdec: Sanity check PreviousPartition mxfdec: Never seek back in local sets and KLVs mxfdec: Move the current_partition check inside mxf_read_header() mxfdec: Fix infinite loop in mxf_packet_timestamps() mxfdec: Check eof_reached in mxf_read_local_tags() mxfdec: Check for NULL component mxfdec: Make sure mxf->nb_index_tables > 0 in mxf_packet_timestamps() mxfdec: Make sure x < index_table->nb_ptses build: Add missing directories to DIRS declarations. ... Conflicts: doc/build_system.txt doc/fate.texi libavfilter/x86/yadif_template.c libavformat/mxfdec.c libavutil/Makefile tests/fate/audio.mak tests/fate/prores.mak tests/fate/screen.mak tests/fate/video.mak tests/ref/fate/bethsoft-vid tests/ref/fate/cscd tests/ref/fate/dfa4 tests/ref/fate/nuv tests/ref/fate/vp8-sign-bias tests/ref/fate/wmv8-drm tests/ref/lavf/gxf Merged-by: Michael Niedermayer <michaelni@gmx.at>tags/n0.11
@@ -500,5 +500,3 @@ necessary. Here is a sample; alter the names: | |||||
Ty Coon, President of Vice | Ty Coon, President of Vice | ||||
That's all there is to it! | That's all there is to it! | ||||
@@ -171,4 +171,4 @@ the synchronisation of the samples directory. | |||||
Example: | Example: | ||||
@example | @example | ||||
make V=1 SAMPLES=/var/fate/samples THREADS=2 fate | make V=1 SAMPLES=/var/fate/samples THREADS=2 fate | ||||
@end example | |||||
@end example |
@@ -373,5 +373,3 @@ ACL allow 192.168.0.0 192.168.255.255 | |||||
<Redirect index.html> | <Redirect index.html> | ||||
URL http://www.ffmpeg.org/ | URL http://www.ffmpeg.org/ | ||||
</Redirect> | </Redirect> | ||||
@@ -3365,4 +3365,3 @@ mainly useful as a template and to be employed in analysis / debugging | |||||
tools. | tools. | ||||
@c man end VIDEO SINKS | @c man end VIDEO SINKS | ||||
@@ -96,4 +96,3 @@ would benefit from it. | |||||
Also, as already hinted at, initFilter() accepts an optional convolutional | Also, as already hinted at, initFilter() accepts an optional convolutional | ||||
filter as input that can be used for contrast, saturation, blur, sharpening | filter as input that can be used for contrast, saturation, blur, sharpening | ||||
shift, chroma vs. luma shift, ... | shift, chroma vs. luma shift, ... | ||||
@@ -107,4 +107,3 @@ one with score 3) | |||||
Author: Michael niedermayer | Author: Michael niedermayer | ||||
Copyright LGPL | Copyright LGPL | ||||
@@ -747,7 +747,7 @@ HOSTPROGS = aac_tablegen aacps_tablegen cbrt_tablegen cos_tablegen \ | |||||
dv_tablegen motionpixels_tablegen mpegaudio_tablegen \ | dv_tablegen motionpixels_tablegen mpegaudio_tablegen \ | ||||
pcm_tablegen qdm2_tablegen sinewin_tablegen | pcm_tablegen qdm2_tablegen sinewin_tablegen | ||||
DIRS = alpha arm bfin ppc ps2 sh4 sparc x86 | |||||
DIRS = alpha arm avr32 bfin ppc ps2 sh4 sparc x86 | |||||
CLEANFILES = *_tables.c *_tables.h *_tablegen$(HOSTEXESUF) | CLEANFILES = *_tables.c *_tables.h *_tablegen$(HOSTEXESUF) | ||||
@@ -19,6 +19,8 @@ | |||||
#ifndef AVCODEC_ARM_VP8_H | #ifndef AVCODEC_ARM_VP8_H | ||||
#define AVCODEC_ARM_VP8_H | #define AVCODEC_ARM_VP8_H | ||||
#include "config.h" | |||||
#if HAVE_ARMV6 | #if HAVE_ARMV6 | ||||
#define decode_block_coeffs_internal ff_decode_block_coeffs_armv6 | #define decode_block_coeffs_internal ff_decode_block_coeffs_armv6 | ||||
int ff_decode_block_coeffs_armv6(VP56RangeCoder *rc, DCTELEM block[16], | int ff_decode_block_coeffs_armv6(VP56RangeCoder *rc, DCTELEM block[16], | ||||
@@ -270,6 +270,3 @@ void dsputil_init_bfin( DSPContext* c, AVCodecContext *avctx ) | |||||
} | } | ||||
} | } | ||||
} | } | ||||
@@ -330,4 +330,3 @@ DEFUN(fdct,mL1, | |||||
(r7:4,p5:3) = [sp++]; | (r7:4,p5:3) = [sp++]; | ||||
RTS; | RTS; | ||||
DEFUN_END(fdct) | DEFUN_END(fdct) | ||||
@@ -302,5 +302,3 @@ DEFUN(idct,mL1, | |||||
unlink; | unlink; | ||||
RTS; | RTS; | ||||
DEFUN_END(idct) | DEFUN_END(idct) | ||||
@@ -150,4 +150,3 @@ void MPV_common_init_bfin (MpegEncContext *s) | |||||
{ | { | ||||
/* s->dct_quantize= dct_quantize_bfin; */ | /* s->dct_quantize= dct_quantize_bfin; */ | ||||
} | } | ||||
@@ -737,5 +737,3 @@ DEFUN(sse16,mL1, | |||||
unlink; | unlink; | ||||
rts; | rts; | ||||
DEFUN_END(sse16) | DEFUN_END(sse16) | ||||
@@ -41,5 +41,3 @@ void ff_bfin_vp3_idct_add (uint8_t *dest, int line_size, DCTELEM *block) | |||||
ff_bfin_vp3_idct (block); | ff_bfin_vp3_idct (block); | ||||
ff_bfin_add_pixels_clamped (block, dest, line_size); | ff_bfin_add_pixels_clamped (block, dest, line_size); | ||||
} | } | ||||
@@ -278,5 +278,3 @@ DEFUN(vp3_idct,mL1, | |||||
unlink; | unlink; | ||||
RTS; | RTS; | ||||
DEFUN_END(vp3_idct) | DEFUN_END(vp3_idct) | ||||
@@ -24,6 +24,7 @@ | |||||
#define AVCODEC_BYTESTREAM_H | #define AVCODEC_BYTESTREAM_H | ||||
#include <string.h> | #include <string.h> | ||||
#include "libavutil/common.h" | #include "libavutil/common.h" | ||||
#include "libavutil/intreadwrite.h" | #include "libavutil/intreadwrite.h" | ||||
@@ -36,46 +37,52 @@ typedef struct { | |||||
int eof; | int eof; | ||||
} PutByteContext; | } PutByteContext; | ||||
#define DEF_T(type, name, bytes, read, write) \ | |||||
static av_always_inline type bytestream_get_ ## name(const uint8_t **b){\ | |||||
(*b) += bytes;\ | |||||
return read(*b - bytes);\ | |||||
}\ | |||||
static av_always_inline void bytestream_put_ ##name(uint8_t **b, const type value){\ | |||||
write(*b, value);\ | |||||
(*b) += bytes;\ | |||||
}\ | |||||
static av_always_inline void bytestream2_put_ ## name ## u(PutByteContext *p, const type value)\ | |||||
{\ | |||||
bytestream_put_ ## name(&p->buffer, value);\ | |||||
}\ | |||||
static av_always_inline void bytestream2_put_ ## name(PutByteContext *p, const type value){\ | |||||
if (!p->eof && (p->buffer_end - p->buffer >= bytes)) {\ | |||||
write(p->buffer, value);\ | |||||
p->buffer += bytes;\ | |||||
} else\ | |||||
p->eof = 1;\ | |||||
}\ | |||||
static av_always_inline type bytestream2_get_ ## name ## u(GetByteContext *g)\ | |||||
{\ | |||||
return bytestream_get_ ## name(&g->buffer);\ | |||||
}\ | |||||
static av_always_inline type bytestream2_get_ ## name(GetByteContext *g)\ | |||||
{\ | |||||
if (g->buffer_end - g->buffer < bytes)\ | |||||
return 0;\ | |||||
return bytestream2_get_ ## name ## u(g);\ | |||||
}\ | |||||
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_T(type, name, bytes, read, write) \ | |||||
static av_always_inline type bytestream_get_ ## name(const uint8_t **b) \ | |||||
{ \ | |||||
(*b) += bytes; \ | |||||
return read(*b - bytes); \ | |||||
} \ | |||||
static av_always_inline void bytestream_put_ ## name(uint8_t **b, \ | |||||
const type value) \ | |||||
{ \ | |||||
write(*b, value); \ | |||||
(*b) += bytes; \ | |||||
} \ | |||||
static av_always_inline void bytestream2_put_ ## name ## u(PutByteContext *p, \ | |||||
const type value) \ | |||||
{ \ | |||||
bytestream_put_ ## name(&p->buffer, value); \ | |||||
} \ | |||||
static av_always_inline void bytestream2_put_ ## name(PutByteContext *p, \ | |||||
const type value) \ | |||||
{ \ | |||||
if (!p->eof && (p->buffer_end - p->buffer >= bytes)) { \ | |||||
write(p->buffer, value); \ | |||||
p->buffer += bytes; \ | |||||
} else \ | |||||
p->eof = 1; \ | |||||
} \ | |||||
static av_always_inline type bytestream2_get_ ## name ## u(GetByteContext *g) \ | |||||
{ \ | |||||
return bytestream_get_ ## name(&g->buffer); \ | |||||
} \ | |||||
static av_always_inline type bytestream2_get_ ## name(GetByteContext *g) \ | |||||
{ \ | |||||
if (g->buffer_end - g->buffer < bytes) \ | |||||
return 0; \ | |||||
return bytestream2_get_ ## name ## u(g); \ | |||||
} \ | |||||
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) \ | |||||
#define DEF(name, bytes, read, write) \ | |||||
DEF_T(unsigned int, name, bytes, read, write) | DEF_T(unsigned int, name, bytes, read, write) | ||||
#define DEF64(name, bytes, read, write) \ | |||||
#define DEF64(name, bytes, read, write) \ | |||||
DEF_T(uint64_t, name, bytes, read, write) | DEF_T(uint64_t, name, bytes, read, write) | ||||
DEF64(le64, 8, AV_RL64, AV_WL64) | DEF64(le64, 8, AV_RL64, AV_WL64) | ||||
@@ -129,15 +136,17 @@ DEF (byte, 1, AV_RB8 , AV_WB8 ) | |||||
#endif | #endif | ||||
static av_always_inline void bytestream2_init(GetByteContext *g, | static av_always_inline void bytestream2_init(GetByteContext *g, | ||||
const uint8_t *buf, int buf_size) | |||||
const uint8_t *buf, | |||||
int buf_size) | |||||
{ | { | ||||
g->buffer = buf; | |||||
g->buffer = buf; | |||||
g->buffer_start = buf; | g->buffer_start = buf; | ||||
g->buffer_end = buf + buf_size; | |||||
g->buffer_end = buf + buf_size; | |||||
} | } | ||||
static av_always_inline void bytestream2_init_writer(PutByteContext *p, | static av_always_inline void bytestream2_init_writer(PutByteContext *p, | ||||
uint8_t *buf, int buf_size) | |||||
uint8_t *buf, | |||||
int buf_size) | |||||
{ | { | ||||
p->buffer = buf; | p->buffer = buf; | ||||
p->buffer_start = buf; | p->buffer_start = buf; | ||||
@@ -183,21 +192,22 @@ static av_always_inline int bytestream2_tell_p(PutByteContext *p) | |||||
return (int)(p->buffer - p->buffer_start); | return (int)(p->buffer - p->buffer_start); | ||||
} | } | ||||
static av_always_inline int bytestream2_seek(GetByteContext *g, int offset, | |||||
static av_always_inline int bytestream2_seek(GetByteContext *g, | |||||
int offset, | |||||
int whence) | int whence) | ||||
{ | { | ||||
switch (whence) { | switch (whence) { | ||||
case SEEK_CUR: | case SEEK_CUR: | ||||
offset = av_clip(offset, -(g->buffer - g->buffer_start), | |||||
g->buffer_end - g->buffer); | |||||
offset = av_clip(offset, -(g->buffer - g->buffer_start), | |||||
g->buffer_end - g->buffer); | |||||
g->buffer += offset; | g->buffer += offset; | ||||
break; | break; | ||||
case SEEK_END: | case SEEK_END: | ||||
offset = av_clip(offset, -(g->buffer_end - g->buffer_start), 0); | |||||
offset = av_clip(offset, -(g->buffer_end - g->buffer_start), 0); | |||||
g->buffer = g->buffer_end + offset; | g->buffer = g->buffer_end + offset; | ||||
break; | break; | ||||
case SEEK_SET: | case SEEK_SET: | ||||
offset = av_clip(offset, 0, g->buffer_end - g->buffer_start); | |||||
offset = av_clip(offset, 0, g->buffer_end - g->buffer_start); | |||||
g->buffer = g->buffer_start + offset; | g->buffer = g->buffer_start + offset; | ||||
break; | break; | ||||
default: | default: | ||||
@@ -206,7 +216,8 @@ static av_always_inline int bytestream2_seek(GetByteContext *g, int offset, | |||||
return bytestream2_tell(g); | return bytestream2_tell(g); | ||||
} | } | ||||
static av_always_inline int bytestream2_seek_p(PutByteContext *p, int offset, | |||||
static av_always_inline int bytestream2_seek_p(PutByteContext *p, | |||||
int offset, | |||||
int whence) | int whence) | ||||
{ | { | ||||
p->eof = 0; | p->eof = 0; | ||||
@@ -214,20 +225,20 @@ static av_always_inline int bytestream2_seek_p(PutByteContext *p, int offset, | |||||
case SEEK_CUR: | case SEEK_CUR: | ||||
if (p->buffer_end - p->buffer < offset) | if (p->buffer_end - p->buffer < offset) | ||||
p->eof = 1; | p->eof = 1; | ||||
offset = av_clip(offset, -(p->buffer - p->buffer_start), | |||||
p->buffer_end - p->buffer); | |||||
offset = av_clip(offset, -(p->buffer - p->buffer_start), | |||||
p->buffer_end - p->buffer); | |||||
p->buffer += offset; | p->buffer += offset; | ||||
break; | break; | ||||
case SEEK_END: | case SEEK_END: | ||||
if (offset > 0) | if (offset > 0) | ||||
p->eof = 1; | p->eof = 1; | ||||
offset = av_clip(offset, -(p->buffer_end - p->buffer_start), 0); | |||||
offset = av_clip(offset, -(p->buffer_end - p->buffer_start), 0); | |||||
p->buffer = p->buffer_end + offset; | p->buffer = p->buffer_end + offset; | ||||
break; | break; | ||||
case SEEK_SET: | case SEEK_SET: | ||||
if (p->buffer_end - p->buffer_start < offset) | if (p->buffer_end - p->buffer_start < offset) | ||||
p->eof = 1; | p->eof = 1; | ||||
offset = av_clip(offset, 0, p->buffer_end - p->buffer_start); | |||||
offset = av_clip(offset, 0, p->buffer_end - p->buffer_start); | |||||
p->buffer = p->buffer_start + offset; | p->buffer = p->buffer_start + offset; | ||||
break; | break; | ||||
default: | default: | ||||
@@ -280,14 +291,18 @@ static av_always_inline unsigned int bytestream2_get_eof(PutByteContext *p) | |||||
return p->eof; | return p->eof; | ||||
} | } | ||||
static av_always_inline unsigned int bytestream_get_buffer(const uint8_t **b, uint8_t *dst, unsigned int size) | |||||
static av_always_inline unsigned int bytestream_get_buffer(const uint8_t **b, | |||||
uint8_t *dst, | |||||
unsigned int size) | |||||
{ | { | ||||
memcpy(dst, *b, size); | memcpy(dst, *b, size); | ||||
(*b) += size; | (*b) += size; | ||||
return size; | return size; | ||||
} | } | ||||
static av_always_inline void bytestream_put_buffer(uint8_t **b, const uint8_t *src, unsigned int size) | |||||
static av_always_inline void bytestream_put_buffer(uint8_t **b, | |||||
const uint8_t *src, | |||||
unsigned int size) | |||||
{ | { | ||||
memcpy(*b, src, size); | memcpy(*b, src, size); | ||||
(*b) += size; | (*b) += size; | ||||
@@ -140,7 +140,7 @@ void ff_eac3_apply_spectral_extension(AC3DecodeContext *s) | |||||
each band. */ | each band. */ | ||||
bin = s->spx_src_start_freq; | bin = s->spx_src_start_freq; | ||||
for (bnd = 0; bnd < s->num_spx_bands; bnd++) { | for (bnd = 0; bnd < s->num_spx_bands; bnd++) { | ||||
float nscale = s->spx_noise_blend[ch][bnd] * rms_energy[bnd] * (1.0f/(1<<31)); | |||||
float nscale = s->spx_noise_blend[ch][bnd] * rms_energy[bnd] * (1.0f / INT32_MIN); | |||||
float sscale = s->spx_signal_blend[ch][bnd]; | float sscale = s->spx_signal_blend[ch][bnd]; | ||||
for (i = 0; i < s->spx_band_sizes[bnd]; i++) { | for (i = 0; i < s->spx_band_sizes[bnd]; i++) { | ||||
float noise = nscale * (int32_t)av_lfg_get(&s->dith_state); | float noise = nscale * (int32_t)av_lfg_get(&s->dith_state); | ||||
@@ -215,4 +215,3 @@ void idct_add_altivec(uint8_t* dest, int stride, int16_t *blk) | |||||
ADD (dest, vx6, perm0) dest += stride; | ADD (dest, vx6, perm0) dest += stride; | ||||
ADD (dest, vx7, perm1) | ADD (dest, vx7, perm1) | ||||
} | } | ||||
@@ -42,7 +42,7 @@ typedef struct { | |||||
int slice_num; | int slice_num; | ||||
int x_pos, y_pos; | int x_pos, y_pos; | ||||
int slice_width; | int slice_width; | ||||
DECLARE_ALIGNED(16, DCTELEM, blocks[8 * 4 * 64]); | |||||
DECLARE_ALIGNED(16, DCTELEM, blocks)[8 * 4 * 64]; | |||||
} ProresThreadData; | } ProresThreadData; | ||||
typedef struct { | typedef struct { | ||||
@@ -57,8 +57,8 @@ typedef struct { | |||||
uint8_t qmat_chroma[64]; ///< dequantization matrix for chroma | uint8_t qmat_chroma[64]; ///< dequantization matrix for chroma | ||||
int qmat_changed; ///< 1 - global quantization matrices changed | int qmat_changed; ///< 1 - global quantization matrices changed | ||||
int prev_slice_sf; ///< scalefactor of the previous decoded slice | int prev_slice_sf; ///< scalefactor of the previous decoded slice | ||||
DECLARE_ALIGNED(16, int16_t, qmat_luma_scaled[64]); | |||||
DECLARE_ALIGNED(16, int16_t, qmat_chroma_scaled[64]); | |||||
DECLARE_ALIGNED(16, int16_t, qmat_luma_scaled)[64]; | |||||
DECLARE_ALIGNED(16, int16_t, qmat_chroma_scaled)[64]; | |||||
int total_slices; ///< total number of slices in a picture | int total_slices; ///< total number of slices in a picture | ||||
ProresThreadData *slice_data; | ProresThreadData *slice_data; | ||||
int pic_num; | int pic_num; | ||||
@@ -164,4 +164,3 @@ void dsputil_init_mmi(DSPContext* c, AVCodecContext *avctx) | |||||
c->idct_permutation_type= FF_LIBMPEG2_IDCT_PERM; | c->idct_permutation_type= FF_LIBMPEG2_IDCT_PERM; | ||||
} | } | ||||
} | } | ||||
@@ -359,4 +359,3 @@ void ff_mmi_idct_add(uint8_t *dest, int line_size, DCTELEM *block) | |||||
//let savedtemp regs be saved | //let savedtemp regs be saved | ||||
__asm__ volatile(" ":::"$16", "$17", "$18", "$19", "$20", "$21", "$22", "$23"); | __asm__ volatile(" ":::"$16", "$17", "$18", "$19", "$20", "$21", "$22", "$23"); | ||||
} | } | ||||
@@ -85,5 +85,3 @@ void MPV_common_init_mmi(MpegEncContext *s) | |||||
s->dct_unquantize_h263_intra = | s->dct_unquantize_h263_intra = | ||||
s->dct_unquantize_h263_inter = dct_unquantize_h263_mmi; | s->dct_unquantize_h263_inter = dct_unquantize_h263_mmi; | ||||
} | } | ||||
@@ -26,6 +26,7 @@ | |||||
#include "avcodec.h" | #include "avcodec.h" | ||||
#include "raw.h" | #include "raw.h" | ||||
#include "internal.h" | |||||
#include "libavutil/pixdesc.h" | #include "libavutil/pixdesc.h" | ||||
#include "libavutil/intreadwrite.h" | #include "libavutil/intreadwrite.h" | ||||
@@ -40,19 +41,29 @@ static av_cold int raw_init_encoder(AVCodecContext *avctx) | |||||
return 0; | return 0; | ||||
} | } | ||||
static int raw_encode(AVCodecContext *avctx, | |||||
unsigned char *frame, int buf_size, void *data) | |||||
static int raw_encode(AVCodecContext *avctx, AVPacket *pkt, | |||||
const AVFrame *frame, int *got_packet) | |||||
{ | { | ||||
int ret = avpicture_layout((AVPicture *)data, avctx->pix_fmt, avctx->width, | |||||
avctx->height, frame, buf_size); | |||||
int ret = avpicture_get_size(avctx->pix_fmt, avctx->width, avctx->height); | |||||
if (ret < 0) | |||||
return ret; | |||||
if ((ret = ff_alloc_packet(pkt, ret)) < 0) | |||||
return ret; | |||||
if ((ret = avpicture_layout((const AVPicture *)frame, avctx->pix_fmt, avctx->width, | |||||
avctx->height, pkt->data, pkt->size)) < 0) | |||||
return ret; | |||||
if(avctx->codec_tag == AV_RL32("yuv2") && ret > 0 && | if(avctx->codec_tag == AV_RL32("yuv2") && ret > 0 && | ||||
avctx->pix_fmt == PIX_FMT_YUYV422) { | avctx->pix_fmt == PIX_FMT_YUYV422) { | ||||
int x; | int x; | ||||
for(x = 1; x < avctx->height*avctx->width*2; x += 2) | for(x = 1; x < avctx->height*avctx->width*2; x += 2) | ||||
frame[x] ^= 0x80; | |||||
pkt->data[x] ^= 0x80; | |||||
} | } | ||||
return ret; | |||||
pkt->flags |= AV_PKT_FLAG_KEY; | |||||
*got_packet = 1; | |||||
return 0; | |||||
} | } | ||||
AVCodec ff_rawvideo_encoder = { | AVCodec ff_rawvideo_encoder = { | ||||
@@ -61,6 +72,6 @@ AVCodec ff_rawvideo_encoder = { | |||||
.id = CODEC_ID_RAWVIDEO, | .id = CODEC_ID_RAWVIDEO, | ||||
.priv_data_size = sizeof(AVFrame), | .priv_data_size = sizeof(AVFrame), | ||||
.init = raw_init_encoder, | .init = raw_init_encoder, | ||||
.encode = raw_encode, | |||||
.encode2 = raw_encode, | |||||
.long_name = NULL_IF_CONFIG_SMALL("raw video"), | .long_name = NULL_IF_CONFIG_SMALL("raw video"), | ||||
}; | }; |
@@ -201,7 +201,6 @@ static const int64_t tta_channel_layouts[7] = { | |||||
static av_cold int tta_decode_init(AVCodecContext * avctx) | static av_cold int tta_decode_init(AVCodecContext * avctx) | ||||
{ | { | ||||
TTAContext *s = avctx->priv_data; | TTAContext *s = avctx->priv_data; | ||||
int i; | |||||
s->avctx = avctx; | s->avctx = avctx; | ||||
@@ -213,7 +212,7 @@ static av_cold int tta_decode_init(AVCodecContext * avctx) | |||||
if (show_bits_long(&s->gb, 32) == AV_RL32("TTA1")) | if (show_bits_long(&s->gb, 32) == AV_RL32("TTA1")) | ||||
{ | { | ||||
/* signature */ | /* signature */ | ||||
skip_bits(&s->gb, 32); | |||||
skip_bits_long(&s->gb, 32); | |||||
s->format = get_bits(&s->gb, 16); | s->format = get_bits(&s->gb, 16); | ||||
if (s->format > 2) { | if (s->format > 2) { | ||||
@@ -231,7 +230,7 @@ static av_cold int tta_decode_init(AVCodecContext * avctx) | |||||
s->bps = (avctx->bits_per_coded_sample + 7) / 8; | s->bps = (avctx->bits_per_coded_sample + 7) / 8; | ||||
avctx->sample_rate = get_bits_long(&s->gb, 32); | avctx->sample_rate = get_bits_long(&s->gb, 32); | ||||
s->data_length = get_bits_long(&s->gb, 32); | s->data_length = get_bits_long(&s->gb, 32); | ||||
skip_bits(&s->gb, 32); // CRC32 of header | |||||
skip_bits_long(&s->gb, 32); // CRC32 of header | |||||
if (s->channels == 0) { | if (s->channels == 0) { | ||||
av_log(s->avctx, AV_LOG_ERROR, "Invalid number of channels\n"); | av_log(s->avctx, AV_LOG_ERROR, "Invalid number of channels\n"); | ||||
@@ -272,9 +271,8 @@ static av_cold int tta_decode_init(AVCodecContext * avctx) | |||||
s->data_length, s->frame_length, s->last_frame_length, s->total_frames); | s->data_length, s->frame_length, s->last_frame_length, s->total_frames); | ||||
// FIXME: seek table | // FIXME: seek table | ||||
for (i = 0; i < s->total_frames; i++) | |||||
skip_bits(&s->gb, 32); | |||||
skip_bits(&s->gb, 32); // CRC32 of seektable | |||||
skip_bits_long(&s->gb, 32 * s->total_frames); | |||||
skip_bits_long(&s->gb, 32); // CRC32 of seektable | |||||
if(s->frame_length >= UINT_MAX / (s->channels * sizeof(int32_t))){ | if(s->frame_length >= UINT_MAX / (s->channels * sizeof(int32_t))){ | ||||
av_log(avctx, AV_LOG_ERROR, "frame_length too large\n"); | av_log(avctx, AV_LOG_ERROR, "frame_length too large\n"); | ||||
@@ -413,7 +411,7 @@ static int tta_decode_frame(AVCodecContext *avctx, void *data, | |||||
if (get_bits_left(&s->gb) < 32) | if (get_bits_left(&s->gb) < 32) | ||||
return -1; | return -1; | ||||
skip_bits(&s->gb, 32); // frame crc | |||||
skip_bits_long(&s->gb, 32); // frame crc | |||||
// convert to output buffer | // convert to output buffer | ||||
switch(s->bps) { | switch(s->bps) { | ||||
@@ -579,4 +579,3 @@ void ff_fdct_sse2(int16_t *block) | |||||
fdct_col_sse2(block, block1, 0); | fdct_col_sse2(block, block1, 0); | ||||
fdct_row_sse2(block1, block); | fdct_row_sse2(block1, block); | ||||
} | } | ||||
@@ -67,4 +67,3 @@ av_cold void ff_dct_init_mmx(DCTContext *s) | |||||
#endif | #endif | ||||
} | } | ||||
#endif | #endif | ||||
@@ -171,4 +171,3 @@ void ff_imdct_calc_3dn2(FFTContext *s, FFTSample *output, const FFTSample *input | |||||
); | ); | ||||
__asm__ volatile("femms"); | __asm__ volatile("femms"); | ||||
} | } | ||||
@@ -108,4 +108,3 @@ void ff_imdct_calc_sse(FFTContext *s, FFTSample *output, const FFTSample *input) | |||||
XMM_CLOBBERS_ONLY("%xmm0", "%xmm1", "%xmm7") | XMM_CLOBBERS_ONLY("%xmm0", "%xmm1", "%xmm7") | ||||
); | ); | ||||
} | } | ||||
@@ -626,4 +626,3 @@ declare_idct (ff_mmxext_idct, mmxext_table, | |||||
declare_idct (ff_mmx_idct, mmx_table, | declare_idct (ff_mmx_idct, mmx_table, | ||||
mmx_row_head, mmx_row, mmx_row_tail, mmx_row_mid) | mmx_row_head, mmx_row, mmx_row_tail, mmx_row_mid) | ||||
@@ -523,4 +523,3 @@ __asm__ volatile( | |||||
DCT_8_INV_COL(8(%0), 8(%0)) | DCT_8_INV_COL(8(%0), 8(%0)) | ||||
:: "r"(block), "r"(rounder_0), "r"(tab_i_04_xmm), "r"(tg_1_16)); | :: "r"(block), "r"(rounder_0), "r"(tab_i_04_xmm), "r"(tg_1_16)); | ||||
} | } | ||||
@@ -261,4 +261,3 @@ void RENAME(ff_yadif_filter_line)(uint8_t *dst, | |||||
#undef CHECK1 | #undef CHECK1 | ||||
#undef CHECK2 | #undef CHECK2 | ||||
#undef FILTER | #undef FILTER | ||||
@@ -30,4 +30,4 @@ | |||||
*/ | */ | ||||
void ff_ape_parse_tag(AVFormatContext *s); | void ff_ape_parse_tag(AVFormatContext *s); | ||||
#endif /* AVFORMAT_ID3V2_H */ | |||||
#endif /* AVFORMAT_APETAG_H */ |
@@ -490,7 +490,8 @@ static int mxf_read_partition_pack(void *arg, AVIOContext *pb, int tag, int size | |||||
/* sanity check PreviousPartition if set */ | /* sanity check PreviousPartition if set */ | ||||
if (partition->previous_partition && | if (partition->previous_partition && | ||||
mxf->run_in + partition->previous_partition >= klv_offset) { | mxf->run_in + partition->previous_partition >= klv_offset) { | ||||
av_log(mxf->fc, AV_LOG_ERROR, "PreviousPartition points to this partition or forward\n"); | |||||
av_log(mxf->fc, AV_LOG_ERROR, | |||||
"PreviousPartition points to this partition or forward\n"); | |||||
return AVERROR_INVALIDDATA; | return AVERROR_INVALIDDATA; | ||||
} | } | ||||
@@ -1107,7 +1108,6 @@ static int mxf_compute_ptses_fake_index(MXFContext *mxf, MXFIndexTable *index_ta | |||||
if (s->nb_index_entries == 2 * s->index_duration + 1) { | if (s->nb_index_entries == 2 * s->index_duration + 1) { | ||||
index_delta = 2; /* Avid index */ | index_delta = 2; /* Avid index */ | ||||
/* ignore the last entry - it's the size of the essence container */ | /* ignore the last entry - it's the size of the essence container */ | ||||
n--; | n--; | ||||
} | } | ||||
@@ -1117,7 +1117,8 @@ static int mxf_compute_ptses_fake_index(MXFContext *mxf, MXFIndexTable *index_ta | |||||
int index = x + offset; | int index = x + offset; | ||||
if (x >= index_table->nb_ptses) { | if (x >= index_table->nb_ptses) { | ||||
av_log(mxf->fc, AV_LOG_ERROR, "x >= nb_ptses - IndexEntryCount %i < IndexDuration %"PRId64"?\n", | |||||
av_log(mxf->fc, AV_LOG_ERROR, | |||||
"x >= nb_ptses - IndexEntryCount %i < IndexDuration %"PRId64"?\n", | |||||
s->nb_index_entries, s->index_duration); | s->nb_index_entries, s->index_duration); | ||||
break; | break; | ||||
} | } | ||||
@@ -1401,8 +1402,10 @@ static int mxf_parse_structural_metadata(MXFContext *mxf) | |||||
st->codec->codec_id = container_ul->id; | st->codec->codec_id = container_ul->id; | ||||
st->codec->channels = descriptor->channels; | st->codec->channels = descriptor->channels; | ||||
st->codec->bits_per_coded_sample = descriptor->bits_per_sample; | st->codec->bits_per_coded_sample = descriptor->bits_per_sample; | ||||
if (descriptor->sample_rate.den > 0) | if (descriptor->sample_rate.den > 0) | ||||
st->codec->sample_rate = descriptor->sample_rate.num / descriptor->sample_rate.den; | |||||
st->codec->sample_rate = descriptor->sample_rate.num / descriptor->sample_rate.den; | |||||
/* TODO: implement CODEC_ID_RAWAUDIO */ | /* TODO: implement CODEC_ID_RAWAUDIO */ | ||||
if (st->codec->codec_id == CODEC_ID_PCM_S16LE) { | if (st->codec->codec_id == CODEC_ID_PCM_S16LE) { | ||||
if (descriptor->bits_per_sample > 16 && descriptor->bits_per_sample <= 24) | if (descriptor->bits_per_sample > 16 && descriptor->bits_per_sample <= 24) | ||||
@@ -1496,14 +1499,15 @@ static int mxf_read_local_tags(MXFContext *mxf, KLVPacket *klv, MXFMetadataReadF | |||||
else if ((ret = read_child(ctx, pb, tag, size, uid, -1)) < 0) | else if ((ret = read_child(ctx, pb, tag, size, uid, -1)) < 0) | ||||
return ret; | return ret; | ||||
/* accept the 64k local set limit being exceeded (Avid) | |||||
* don't accept it extending past the end of the KLV though (zzuf5.mxf) */ | |||||
/* Accept the 64k local set limit being exceeded (Avid). Don't accept | |||||
* it extending past the end of the KLV though (zzuf5.mxf). */ | |||||
if (avio_tell(pb) > klv_end) { | if (avio_tell(pb) > klv_end) { | ||||
av_log(mxf->fc, AV_LOG_ERROR, "local tag %#04x extends past end of local set @ %#"PRIx64"\n", | |||||
av_log(mxf->fc, AV_LOG_ERROR, | |||||
"local tag %#04x extends past end of local set @ %#"PRIx64"\n", | |||||
tag, klv->offset); | tag, klv->offset); | ||||
return AVERROR_INVALIDDATA; | return AVERROR_INVALIDDATA; | ||||
} else if (avio_tell(pb) <= next) /* only seek forward, else this can loop for a long time */ | } else if (avio_tell(pb) <= next) /* only seek forward, else this can loop for a long time */ | ||||
avio_seek(pb, next, SEEK_SET); | |||||
avio_seek(pb, next, SEEK_SET); | |||||
} | } | ||||
if (ctx_size) ctx->type = type; | if (ctx_size) ctx->type = type; | ||||
return ctx_size ? mxf_add_metadata_set(mxf, ctx) : 0; | return ctx_size ? mxf_add_metadata_set(mxf, ctx) : 0; | ||||
@@ -1628,8 +1632,9 @@ static int is_pcm(enum CodecID codec_id) | |||||
} | } | ||||
/** | /** | ||||
* Deals with the case where for some audio atoms EditUnitByteCount is very small (2, 4..). | |||||
* In those cases we should read more than one sample per call to mxf_read_packet(). | |||||
* Deal with the case where for some audio atoms EditUnitByteCount is | |||||
* very small (2, 4..). In those cases we should read more than one | |||||
* sample per call to mxf_read_packet(). | |||||
*/ | */ | ||||
static void mxf_handle_small_eubc(AVFormatContext *s) | static void mxf_handle_small_eubc(AVFormatContext *s) | ||||
{ | { | ||||
@@ -1641,15 +1646,18 @@ static void mxf_handle_small_eubc(AVFormatContext *s) | |||||
return; | return; | ||||
/* expect PCM with exactly one index table segment and a small (< 32) EUBC */ | /* expect PCM with exactly one index table segment and a small (< 32) EUBC */ | ||||
if (s->nb_streams != 1 || s->streams[0]->codec->codec_type != AVMEDIA_TYPE_AUDIO || | |||||
!is_pcm(s->streams[0]->codec->codec_id) || mxf->nb_index_tables != 1 || | |||||
mxf->index_tables[0].nb_segments != 1 || | |||||
if (s->nb_streams != 1 || | |||||
s->streams[0]->codec->codec_type != AVMEDIA_TYPE_AUDIO || | |||||
!is_pcm(s->streams[0]->codec->codec_id) || | |||||
mxf->nb_index_tables != 1 || | |||||
mxf->index_tables[0].nb_segments != 1 || | |||||
mxf->index_tables[0].segments[0]->edit_unit_byte_count >= 32) | mxf->index_tables[0].segments[0]->edit_unit_byte_count >= 32) | ||||
return; | return; | ||||
/* arbitrarily default to 48 kHz PAL audio frame size */ | /* arbitrarily default to 48 kHz PAL audio frame size */ | ||||
/* TODO: we could compute this from the ratio between the audio and video edit rates | |||||
* for 48 kHz NTSC we could use the 1802-1802-1802-1802-1801 pattern */ | |||||
/* TODO: We could compute this from the ratio between the audio | |||||
* and video edit rates for 48 kHz NTSC we could use the | |||||
* 1802-1802-1802-1802-1801 pattern. */ | |||||
mxf->edit_units_per_packet = 1920; | mxf->edit_units_per_packet = 1920; | ||||
} | } | ||||
@@ -1799,7 +1807,8 @@ static void mxf_packet_timestamps(MXFContext *mxf, AVPacket *pkt) | |||||
int64_t last_ofs = -1, next_ofs; | int64_t last_ofs = -1, next_ofs; | ||||
MXFIndexTable *t = &mxf->index_tables[0]; | MXFIndexTable *t = &mxf->index_tables[0]; | ||||
/* this is called from the OP1a demuxing logic, which means there may be no index tables */ | |||||
/* this is called from the OP1a demuxing logic, which means there | |||||
* may be no index tables */ | |||||
if (mxf->nb_index_tables <= 0) | if (mxf->nb_index_tables <= 0) | ||||
return; | return; | ||||
@@ -1809,9 +1818,10 @@ static void mxf_packet_timestamps(MXFContext *mxf, AVPacket *pkt) | |||||
break; | break; | ||||
if (next_ofs <= last_ofs) { | if (next_ofs <= last_ofs) { | ||||
/* large next_ofs didn't change or current_edit_unit wrapped around | |||||
* this fixes the infinite loop on zzuf3.mxf */ | |||||
av_log(mxf->fc, AV_LOG_ERROR, "next_ofs didn't change. not deriving packet timestamps\n"); | |||||
/* large next_ofs didn't change or current_edit_unit wrapped | |||||
* around this fixes the infinite loop on zzuf3.mxf */ | |||||
av_log(mxf->fc, AV_LOG_ERROR, | |||||
"next_ofs didn't change. not deriving packet timestamps\n"); | |||||
return; | return; | ||||
} | } | ||||
@@ -251,6 +251,7 @@ static int wv_read_packet(AVFormatContext *s, | |||||
int ret; | int ret; | ||||
int size, ver, off; | int size, ver, off; | ||||
int64_t pos; | int64_t pos; | ||||
uint32_t block_samples; | |||||
if (url_feof(s->pb)) | if (url_feof(s->pb)) | ||||
return AVERROR(EIO); | return AVERROR(EIO); | ||||
@@ -316,6 +317,12 @@ static int wv_read_packet(AVFormatContext *s, | |||||
pkt->stream_index = 0; | pkt->stream_index = 0; | ||||
wc->block_parsed = 1; | wc->block_parsed = 1; | ||||
pkt->pts = wc->soff; | pkt->pts = wc->soff; | ||||
block_samples = AV_RN32(wc->extra); | |||||
if (block_samples > INT32_MAX) | |||||
av_log(s, AV_LOG_WARNING, "Too many samples in block: %"PRIu32"\n", block_samples); | |||||
else | |||||
pkt->duration = block_samples; | |||||
av_add_index_entry(s->streams[0], pos, pkt->pts, 0, 0, AVINDEX_KEYFRAME); | av_add_index_entry(s->streams[0], pos, pkt->pts, 0, 0, AVINDEX_KEYFRAME); | ||||
return 0; | return 0; | ||||
} | } | ||||
@@ -88,7 +88,7 @@ TESTPROGS-$(HAVE_LZO1X_999_COMPRESS) += lzo | |||||
TOOLS = ffeval | TOOLS = ffeval | ||||
DIRS = arm bfin sh4 x86 | |||||
DIRS = arm avr32 bfin mips ppc sh4 tomi x86 | |||||
ARCH_HEADERS = bswap.h intmath.h intreadwrite.h timer.h | ARCH_HEADERS = bswap.h intmath.h intreadwrite.h timer.h | ||||
@@ -24,6 +24,10 @@ | |||||
#ifndef SWSCALE_PPC_YUV2RGB_ALTIVEC_H | #ifndef SWSCALE_PPC_YUV2RGB_ALTIVEC_H | ||||
#define SWSCALE_PPC_YUV2RGB_ALTIVEC_H | #define SWSCALE_PPC_YUV2RGB_ALTIVEC_H | ||||
#include <stdint.h> | |||||
#include "libswscale/swscale_internal.h" | |||||
#define YUV2PACKEDX_HEADER(suffix) \ | #define YUV2PACKEDX_HEADER(suffix) \ | ||||
void ff_yuv2 ## suffix ## _X_altivec(SwsContext *c, \ | void ff_yuv2 ## suffix ## _X_altivec(SwsContext *c, \ | ||||
const int16_t *lumFilter, \ | const int16_t *lumFilter, \ | ||||
@@ -32,4 +32,4 @@ FATE_AUDIO += fate-ws_snd | |||||
fate-ws_snd: CMD = md5 -i $(SAMPLES)/vqa/ws_snd.vqa -f s16le | fate-ws_snd: CMD = md5 -i $(SAMPLES)/vqa/ws_snd.vqa -f s16le | ||||
FATE_TESTS += $(FATE_AUDIO) | FATE_TESTS += $(FATE_AUDIO) | ||||
fate-audio: $(FATE_AUDIO) | |||||
fate-audio: $(FATE_AUDIO) |
@@ -12,4 +12,3 @@ fate-prores-422_hq: CMD = framecrc -flags +bitexact -i $(SAMPLES)/prores/Sequ | |||||
fate-prores-422_lt: CMD = framecrc -flags +bitexact -i $(SAMPLES)/prores/Sequence_1-Apple_ProRes_422_LT.mov -pix_fmt yuv422p10le | fate-prores-422_lt: CMD = framecrc -flags +bitexact -i $(SAMPLES)/prores/Sequence_1-Apple_ProRes_422_LT.mov -pix_fmt yuv422p10le | ||||
fate-prores-422_proxy: CMD = framecrc -flags +bitexact -i $(SAMPLES)/prores/Sequence_1-Apple_ProRes_422_Proxy.mov -pix_fmt yuv422p10le | fate-prores-422_proxy: CMD = framecrc -flags +bitexact -i $(SAMPLES)/prores/Sequence_1-Apple_ProRes_422_Proxy.mov -pix_fmt yuv422p10le | ||||
fate-prores-alpha: CMD = framecrc -flags +bitexact -i $(SAMPLES)/prores/Sequence_1-Apple_ProRes_with_Alpha.mov -pix_fmt yuv444p10le | fate-prores-alpha: CMD = framecrc -flags +bitexact -i $(SAMPLES)/prores/Sequence_1-Apple_ProRes_with_Alpha.mov -pix_fmt yuv444p10le | ||||
@@ -1,3 +1,4 @@ | |||||
# FIXME dropped frames in this test because of coarse timebase | |||||
FATE_SCREEN += fate-cscd | FATE_SCREEN += fate-cscd | ||||
fate-cscd: CMD = framecrc -i $(SAMPLES)/CSCD/sample_video.avi -an -pix_fmt rgb24 | fate-cscd: CMD = framecrc -i $(SAMPLES)/CSCD/sample_video.avi -an -pix_fmt rgb24 | ||||
@@ -33,6 +33,8 @@ endef | |||||
define FATE_VP8_FULL | define FATE_VP8_FULL | ||||
$(foreach N,$(VP8_SUITE),$(eval $(call FATE_VP8_SUITE,$(N),$(1),$(2)))) | $(foreach N,$(VP8_SUITE),$(eval $(call FATE_VP8_SUITE,$(N),$(1),$(2)))) | ||||
# FIXME this file contains two frames with identical timestamps, | |||||
# so avconv drops one of them | |||||
FATE_VP8 += fate-vp8-sign-bias$(1) | FATE_VP8 += fate-vp8-sign-bias$(1) | ||||
fate-vp8-sign-bias$(1): CMD = framemd5 $(2) -i $(SAMPLES)/vp8/sintel-signbias.ivf | fate-vp8-sign-bias$(1): CMD = framemd5 $(2) -i $(SAMPLES)/vp8/sintel-signbias.ivf | ||||
fate-vp8-sign-bias$(1): REF = $(SRC_PATH)/tests/ref/fate/vp8-sign-bias | fate-vp8-sign-bias$(1): REF = $(SRC_PATH)/tests/ref/fate/vp8-sign-bias | ||||