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: (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>
This commit is contained in:
commit
8c6ebab747
@ -500,5 +500,3 @@ necessary. Here is a sample; alter the names:
|
||||
Ty Coon, President of Vice
|
||||
|
||||
That's all there is to it!
|
||||
|
||||
|
||||
|
@ -373,5 +373,3 @@ ACL allow 192.168.0.0 192.168.255.255
|
||||
<Redirect index.html>
|
||||
URL http://www.ffmpeg.org/
|
||||
</Redirect>
|
||||
|
||||
|
||||
|
@ -3365,4 +3365,3 @@ mainly useful as a template and to be employed in analysis / debugging
|
||||
tools.
|
||||
|
||||
@c man end VIDEO SINKS
|
||||
|
||||
|
@ -96,4 +96,3 @@ would benefit from it.
|
||||
Also, as already hinted at, initFilter() accepts an optional convolutional
|
||||
filter as input that can be used for contrast, saturation, blur, sharpening
|
||||
shift, chroma vs. luma shift, ...
|
||||
|
||||
|
@ -107,4 +107,3 @@ one with score 3)
|
||||
|
||||
Author: Michael niedermayer
|
||||
Copyright LGPL
|
||||
|
||||
|
@ -747,7 +747,7 @@ HOSTPROGS = aac_tablegen aacps_tablegen cbrt_tablegen cos_tablegen \
|
||||
dv_tablegen motionpixels_tablegen mpegaudio_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)
|
||||
|
||||
|
@ -19,6 +19,8 @@
|
||||
#ifndef AVCODEC_ARM_VP8_H
|
||||
#define AVCODEC_ARM_VP8_H
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#if HAVE_ARMV6
|
||||
#define decode_block_coeffs_internal ff_decode_block_coeffs_armv6
|
||||
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++];
|
||||
RTS;
|
||||
DEFUN_END(fdct)
|
||||
|
||||
|
@ -302,5 +302,3 @@ DEFUN(idct,mL1,
|
||||
unlink;
|
||||
RTS;
|
||||
DEFUN_END(idct)
|
||||
|
||||
|
||||
|
@ -150,4 +150,3 @@ void MPV_common_init_bfin (MpegEncContext *s)
|
||||
{
|
||||
/* s->dct_quantize= dct_quantize_bfin; */
|
||||
}
|
||||
|
||||
|
@ -737,5 +737,3 @@ DEFUN(sse16,mL1,
|
||||
unlink;
|
||||
rts;
|
||||
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_add_pixels_clamped (block, dest, line_size);
|
||||
}
|
||||
|
||||
|
||||
|
@ -278,5 +278,3 @@ DEFUN(vp3_idct,mL1,
|
||||
unlink;
|
||||
RTS;
|
||||
DEFUN_END(vp3_idct)
|
||||
|
||||
|
||||
|
@ -24,6 +24,7 @@
|
||||
#define AVCODEC_BYTESTREAM_H
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include "libavutil/common.h"
|
||||
#include "libavutil/intreadwrite.h"
|
||||
|
||||
@ -37,19 +38,25 @@ typedef struct {
|
||||
} PutByteContext;
|
||||
|
||||
#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); \
|
||||
} \
|
||||
static av_always_inline void bytestream_put_ ##name(uint8_t **b, const type value){\
|
||||
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)\
|
||||
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){\
|
||||
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; \
|
||||
@ -129,7 +136,8 @@ DEF (byte, 1, AV_RB8 , AV_WB8 )
|
||||
#endif
|
||||
|
||||
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_start = buf;
|
||||
@ -137,7 +145,8 @@ static av_always_inline void bytestream2_init(GetByteContext *g,
|
||||
}
|
||||
|
||||
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_start = buf;
|
||||
@ -183,7 +192,8 @@ static av_always_inline int bytestream2_tell_p(PutByteContext *p)
|
||||
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)
|
||||
{
|
||||
switch (whence) {
|
||||
@ -206,7 +216,8 @@ static av_always_inline int bytestream2_seek(GetByteContext *g, int offset,
|
||||
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)
|
||||
{
|
||||
p->eof = 0;
|
||||
@ -280,14 +291,18 @@ static av_always_inline unsigned int bytestream2_get_eof(PutByteContext *p)
|
||||
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);
|
||||
(*b) += 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);
|
||||
(*b) += size;
|
||||
|
@ -140,7 +140,7 @@ void ff_eac3_apply_spectral_extension(AC3DecodeContext *s)
|
||||
each band. */
|
||||
bin = s->spx_src_start_freq;
|
||||
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];
|
||||
for (i = 0; i < s->spx_band_sizes[bnd]; i++) {
|
||||
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, vx7, perm1)
|
||||
}
|
||||
|
||||
|
@ -42,7 +42,7 @@ typedef struct {
|
||||
int slice_num;
|
||||
int x_pos, y_pos;
|
||||
int slice_width;
|
||||
DECLARE_ALIGNED(16, DCTELEM, blocks[8 * 4 * 64]);
|
||||
DECLARE_ALIGNED(16, DCTELEM, blocks)[8 * 4 * 64];
|
||||
} ProresThreadData;
|
||||
|
||||
typedef struct {
|
||||
@ -57,8 +57,8 @@ typedef struct {
|
||||
uint8_t qmat_chroma[64]; ///< dequantization matrix for chroma
|
||||
int qmat_changed; ///< 1 - global quantization matrices changed
|
||||
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
|
||||
ProresThreadData *slice_data;
|
||||
int pic_num;
|
||||
|
@ -164,4 +164,3 @@ void dsputil_init_mmi(DSPContext* c, AVCodecContext *avctx)
|
||||
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
|
||||
__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_inter = dct_unquantize_h263_mmi;
|
||||
}
|
||||
|
||||
|
||||
|
@ -26,6 +26,7 @@
|
||||
|
||||
#include "avcodec.h"
|
||||
#include "raw.h"
|
||||
#include "internal.h"
|
||||
#include "libavutil/pixdesc.h"
|
||||
#include "libavutil/intreadwrite.h"
|
||||
|
||||
@ -40,19 +41,29 @@ static av_cold int raw_init_encoder(AVCodecContext *avctx)
|
||||
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 &&
|
||||
avctx->pix_fmt == PIX_FMT_YUYV422) {
|
||||
int x;
|
||||
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 = {
|
||||
@ -61,6 +72,6 @@ AVCodec ff_rawvideo_encoder = {
|
||||
.id = CODEC_ID_RAWVIDEO,
|
||||
.priv_data_size = sizeof(AVFrame),
|
||||
.init = raw_init_encoder,
|
||||
.encode = raw_encode,
|
||||
.encode2 = raw_encode,
|
||||
.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)
|
||||
{
|
||||
TTAContext *s = avctx->priv_data;
|
||||
int i;
|
||||
|
||||
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"))
|
||||
{
|
||||
/* signature */
|
||||
skip_bits(&s->gb, 32);
|
||||
skip_bits_long(&s->gb, 32);
|
||||
|
||||
s->format = get_bits(&s->gb, 16);
|
||||
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;
|
||||
avctx->sample_rate = 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) {
|
||||
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);
|
||||
|
||||
// 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))){
|
||||
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)
|
||||
return -1;
|
||||
skip_bits(&s->gb, 32); // frame crc
|
||||
skip_bits_long(&s->gb, 32); // frame crc
|
||||
|
||||
// convert to output buffer
|
||||
switch(s->bps) {
|
||||
|
@ -579,4 +579,3 @@ void ff_fdct_sse2(int16_t *block)
|
||||
fdct_col_sse2(block, block1, 0);
|
||||
fdct_row_sse2(block1, block);
|
||||
}
|
||||
|
||||
|
@ -67,4 +67,3 @@ av_cold void ff_dct_init_mmx(DCTContext *s)
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -171,4 +171,3 @@ void ff_imdct_calc_3dn2(FFTContext *s, FFTSample *output, const FFTSample *input
|
||||
);
|
||||
__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")
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -626,4 +626,3 @@ declare_idct (ff_mmxext_idct, mmxext_table,
|
||||
|
||||
declare_idct (ff_mmx_idct, mmx_table,
|
||||
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))
|
||||
:: "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 CHECK2
|
||||
#undef FILTER
|
||||
|
||||
|
@ -30,4 +30,4 @@
|
||||
*/
|
||||
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 */
|
||||
if (partition->previous_partition &&
|
||||
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;
|
||||
}
|
||||
|
||||
@ -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) {
|
||||
index_delta = 2; /* Avid index */
|
||||
|
||||
/* ignore the last entry - it's the size of the essence container */
|
||||
n--;
|
||||
}
|
||||
@ -1117,7 +1117,8 @@ static int mxf_compute_ptses_fake_index(MXFContext *mxf, MXFIndexTable *index_ta
|
||||
int index = x + offset;
|
||||
|
||||
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);
|
||||
break;
|
||||
}
|
||||
@ -1401,8 +1402,10 @@ static int mxf_parse_structural_metadata(MXFContext *mxf)
|
||||
st->codec->codec_id = container_ul->id;
|
||||
st->codec->channels = descriptor->channels;
|
||||
st->codec->bits_per_coded_sample = descriptor->bits_per_sample;
|
||||
|
||||
if (descriptor->sample_rate.den > 0)
|
||||
st->codec->sample_rate = descriptor->sample_rate.num / descriptor->sample_rate.den;
|
||||
|
||||
/* TODO: implement CODEC_ID_RAWAUDIO */
|
||||
if (st->codec->codec_id == CODEC_ID_PCM_S16LE) {
|
||||
if (descriptor->bits_per_sample > 16 && descriptor->bits_per_sample <= 24)
|
||||
@ -1496,10 +1499,11 @@ static int mxf_read_local_tags(MXFContext *mxf, KLVPacket *klv, MXFMetadataReadF
|
||||
else if ((ret = read_child(ctx, pb, tag, size, uid, -1)) < 0)
|
||||
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) {
|
||||
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);
|
||||
return AVERROR_INVALIDDATA;
|
||||
} else if (avio_tell(pb) <= next) /* only seek forward, else this can loop for a long time */
|
||||
@ -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)
|
||||
{
|
||||
@ -1641,15 +1646,18 @@ static void mxf_handle_small_eubc(AVFormatContext *s)
|
||||
return;
|
||||
|
||||
/* 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 ||
|
||||
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)
|
||||
return;
|
||||
|
||||
/* 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;
|
||||
}
|
||||
|
||||
@ -1799,7 +1807,8 @@ static void mxf_packet_timestamps(MXFContext *mxf, AVPacket *pkt)
|
||||
int64_t last_ofs = -1, next_ofs;
|
||||
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)
|
||||
return;
|
||||
|
||||
@ -1809,9 +1818,10 @@ static void mxf_packet_timestamps(MXFContext *mxf, AVPacket *pkt)
|
||||
break;
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -251,6 +251,7 @@ static int wv_read_packet(AVFormatContext *s,
|
||||
int ret;
|
||||
int size, ver, off;
|
||||
int64_t pos;
|
||||
uint32_t block_samples;
|
||||
|
||||
if (url_feof(s->pb))
|
||||
return AVERROR(EIO);
|
||||
@ -316,6 +317,12 @@ static int wv_read_packet(AVFormatContext *s,
|
||||
pkt->stream_index = 0;
|
||||
wc->block_parsed = 1;
|
||||
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);
|
||||
return 0;
|
||||
}
|
||||
|
@ -88,7 +88,7 @@ TESTPROGS-$(HAVE_LZO1X_999_COMPRESS) += lzo
|
||||
|
||||
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
|
||||
|
||||
|
@ -24,6 +24,10 @@
|
||||
#ifndef SWSCALE_PPC_YUV2RGB_ALTIVEC_H
|
||||
#define SWSCALE_PPC_YUV2RGB_ALTIVEC_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#include "libswscale/swscale_internal.h"
|
||||
|
||||
#define YUV2PACKEDX_HEADER(suffix) \
|
||||
void ff_yuv2 ## suffix ## _X_altivec(SwsContext *c, \
|
||||
const int16_t *lumFilter, \
|
||||
|
@ -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_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
|
||||
|
||||
|
@ -1,3 +1,4 @@
|
||||
# FIXME dropped frames in this test because of coarse timebase
|
||||
FATE_SCREEN += fate-cscd
|
||||
fate-cscd: CMD = framecrc -i $(SAMPLES)/CSCD/sample_video.avi -an -pix_fmt rgb24
|
||||
|
||||
|
@ -33,6 +33,8 @@ endef
|
||||
define FATE_VP8_FULL
|
||||
$(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-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
|
||||
|
Loading…
Reference in New Issue
Block a user