Merge remote-tracking branch 'qatar/master'

* 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>
pull/3/merge
Michael Niedermayer 13 years ago
commit 8c6ebab747
  1. 2
      COPYING.LGPLv2.1
  2. 2
      doc/fate.texi
  3. 2
      doc/ffserver.conf
  4. 1
      doc/filters.texi
  5. 1
      doc/swscale.txt
  6. 1
      doc/viterbi.txt
  7. 2
      libavcodec/Makefile
  8. 2
      libavcodec/arm/vp8.h
  9. 3
      libavcodec/bfin/dsputil_bfin.c
  10. 1
      libavcodec/bfin/fdct_bfin.S
  11. 2
      libavcodec/bfin/idct_bfin.S
  12. 1
      libavcodec/bfin/mpegvideo_bfin.c
  13. 2
      libavcodec/bfin/pixels_bfin.S
  14. 2
      libavcodec/bfin/vp3_bfin.c
  15. 2
      libavcodec/bfin/vp3_idct_bfin.S
  16. 121
      libavcodec/bytestream.h
  17. 2
      libavcodec/eac3dec.c
  18. 1
      libavcodec/ppc/idct_altivec.c
  19. 6
      libavcodec/proresdec_lgpl.c
  20. 1
      libavcodec/ps2/dsputil_mmi.c
  21. 1
      libavcodec/ps2/idct_mmi.c
  22. 2
      libavcodec/ps2/mpegvideo_mmi.c
  23. 25
      libavcodec/rawenc.c
  24. 12
      libavcodec/tta.c
  25. 1
      libavcodec/x86/fdct_mmx.c
  26. 1
      libavcodec/x86/fft.c
  27. 1
      libavcodec/x86/fft_3dn2.c
  28. 1
      libavcodec/x86/fft_sse.c
  29. 1
      libavcodec/x86/idct_mmx.c
  30. 1
      libavcodec/x86/idct_mmx_xvid.c
  31. 1
      libavfilter/x86/yadif_template.c
  32. 2
      libavformat/apetag.h
  33. 48
      libavformat/mxfdec.c
  34. 7
      libavformat/wv.c
  35. 2
      libavutil/Makefile
  36. 4
      libswscale/ppc/yuv2rgb_altivec.h
  37. 2
      tests/fate/audio.mak
  38. 1
      tests/fate/prores.mak
  39. 1
      tests/fate/screen.mak
  40. 2
      tests/fate/vpx.mak

@ -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) \ #define DEF_T(type, name, bytes, read, write) \
static av_always_inline type bytestream_get_ ## name(const uint8_t **b){\ static av_always_inline type bytestream_get_ ## name(const uint8_t **b) \
(*b) += bytes;\ { \
return read(*b - bytes);\ (*b) += bytes; \
}\ return read(*b - bytes); \
static av_always_inline void bytestream_put_ ##name(uint8_t **b, const type value){\ } \
write(*b, value);\ static av_always_inline void bytestream_put_ ## name(uint8_t **b, \
(*b) += bytes;\ const type value) \
}\ { \
static av_always_inline void bytestream2_put_ ## name ## u(PutByteContext *p, const type value)\ write(*b, value); \
{\ (*b) += bytes; \
bytestream_put_ ## name(&p->buffer, value);\ } \
}\ static av_always_inline void bytestream2_put_ ## name ## u(PutByteContext *p, \
static av_always_inline void bytestream2_put_ ## name(PutByteContext *p, const type value){\ const type value) \
if (!p->eof && (p->buffer_end - p->buffer >= bytes)) {\ { \
write(p->buffer, value);\ bytestream_put_ ## name(&p->buffer, value); \
p->buffer += bytes;\ } \
} else\ static av_always_inline void bytestream2_put_ ## name(PutByteContext *p, \
p->eof = 1;\ const type value) \
}\ { \
static av_always_inline type bytestream2_get_ ## name ## u(GetByteContext *g)\ if (!p->eof && (p->buffer_end - p->buffer >= bytes)) { \
{\ write(p->buffer, value); \
return bytestream_get_ ## name(&g->buffer);\ p->buffer += bytes; \
}\ } else \
static av_always_inline type bytestream2_get_ ## name(GetByteContext *g)\ p->eof = 1; \
{\ } \
if (g->buffer_end - g->buffer < bytes)\ static av_always_inline type bytestream2_get_ ## name ## u(GetByteContext *g) \
return 0;\ { \
return bytestream2_get_ ## name ## u(g);\ return bytestream_get_ ## name(&g->buffer); \
}\ } \
static av_always_inline type bytestream2_peek_ ## name(GetByteContext *g)\ static av_always_inline type bytestream2_get_ ## name(GetByteContext *g) \
{\ { \
if (g->buffer_end - g->buffer < bytes)\ if (g->buffer_end - g->buffer < bytes) \
return 0;\ return 0; \
return read(g->buffer);\ 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), offset = av_clip(offset, -(g->buffer - g->buffer_start),
g->buffer_end - g->buffer); 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), offset = av_clip(offset, -(p->buffer - p->buffer_start),
p->buffer_end - p->buffer); 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_luma_scaled)[64];
DECLARE_ALIGNED(16, int16_t, qmat_chroma_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, static int raw_encode(AVCodecContext *avctx, AVPacket *pkt,
unsigned char *frame, int buf_size, void *data) const AVFrame *frame, int *got_packet)
{ {
int ret = avpicture_layout((AVPicture *)data, avctx->pix_fmt, avctx->width, int ret = avpicture_get_size(avctx->pix_fmt, avctx->width, avctx->height);
avctx->height, frame, buf_size);
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_long(&s->gb, 32 * s->total_frames);
skip_bits(&s->gb, 32); skip_bits_long(&s->gb, 32); // CRC32 of seektable
skip_bits(&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) /* Accept the 64k local set limit being exceeded (Avid). Don't accept
* don't accept it extending past the end of the KLV though (zzuf5.mxf) */ * 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..). * Deal with the case where for some audio atoms EditUnitByteCount is
* In those cases we should read more than one sample per call to mxf_read_packet(). * 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 || if (s->nb_streams != 1 ||
!is_pcm(s->streams[0]->codec->codec_id) || mxf->nb_index_tables != 1 || s->streams[0]->codec->codec_type != AVMEDIA_TYPE_AUDIO ||
mxf->index_tables[0].nb_segments != 1 || !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 /* TODO: We could compute this from the ratio between the audio
* for 48 kHz NTSC we could use the 1802-1802-1802-1802-1801 pattern */ * 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 /* large next_ofs didn't change or current_edit_unit wrapped
* this fixes the infinite loop on zzuf3.mxf */ * 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"); 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

Loading…
Cancel
Save