Commit 61930bd0 authored by Michael Niedermayer's avatar Michael Niedermayer

Merge remote-tracking branch 'qatar/master'

* qatar/master: (27 commits)
  libxvid: Give more suitable names to libxvid-related files.
  libxvid: Separate libxvid encoder from libxvid rate control code.
  jpeglsdec: Remove write-only variable in ff_jpegls_decode_lse().
  fate: cosmetics: lowercase some comments
  fate: Give more consistent names to some RealVideo/RealAudio tests.
  lavfi: add avfilter_get_audio_buffer_ref_from_arrays().
  lavfi: add extended_data to AVFilterBuffer.
  lavc: check that extended_data is properly set in avcodec_encode_audio2().
  lavc: pad last audio frame with silence when needed.
  samplefmt: add a function for filling a buffer with silence.
  samplefmt: add a function for copying audio samples.
  lavr: do not try to copy to uninitialized output audio data.
  lavr: make avresample_read() with NULL output discard samples.
  fate: split idroq audio and video into separate tests
  fate: improve dependencies
  fate: add convenient shorthands for ea-vp6, libavcodec, libavutil tests
  fate: split some combined tests into separate audio and video tests
  fate: fix dependencies for probe tests
  mips: intreadwrite: fix inline asm for gcc 4.8
  mips: intreadwrite: remove unnecessary inline asm
  ...

Conflicts:
	cmdutils.h
	configure
	doc/APIchanges
	doc/filters.texi
	ffmpeg.c
	ffplay.c
	libavcodec/internal.h
	libavcodec/jpeglsdec.c
	libavcodec/libschroedingerdec.c
	libavcodec/libxvid.c
	libavcodec/libxvid_rc.c
	libavcodec/utils.c
	libavcodec/version.h
	libavfilter/avfilter.c
	libavfilter/avfilter.h
	libavfilter/buffersink.h
	tests/Makefile
	tests/fate/aac.mak
	tests/fate/audio.mak
	tests/fate/demux.mak
	tests/fate/ea.mak
	tests/fate/image.mak
	tests/fate/libavutil.mak
	tests/fate/lossless-audio.mak
	tests/fate/lossless-video.mak
	tests/fate/microsoft.mak
	tests/fate/qt.mak
	tests/fate/real.mak
	tests/fate/screen.mak
	tests/fate/video.mak
	tests/fate/voice.mak
	tests/fate/vqf.mak
	tests/ref/fate/ea-mad
	tests/ref/fate/ea-tqi
Merged-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parents 35894ebb c8b4a399
......@@ -370,7 +370,6 @@ int cmdutils_read_file(const char *filename, char **bufptr, size_t *size);
FILE *get_preset_file(char *filename, size_t filename_size,
const char *preset_name, int is_path, const char *codec_name);
/**
* Do all the necessary cleanup and abort.
* This function is implemented in the avtools, not cmdutils.
......
......@@ -1217,6 +1217,7 @@ HAVE_LIST="
memalign
mkstemp
mmap
netinet_sctp_h
PeekNamedPipe
poll_h
posix_memalign
......@@ -1662,6 +1663,7 @@ mmst_protocol_deps="network"
rtmp_protocol_deps="!librtmp_protocol"
rtmp_protocol_select="tcp_protocol"
rtp_protocol_select="udp_protocol"
sctp_protocol_deps="network netinet_sctp_h"
tcp_protocol_deps="network"
tls_protocol_deps_any="openssl gnutls"
tls_protocol_select="tcp_protocol"
......@@ -1707,7 +1709,7 @@ ffplay_select="buffersink_filter rdft"
ffprobe_deps="avcodec avformat"
ffserver_deps="avformat ffm_muxer fork rtp_protocol rtsp_demuxer"
ffserver_extralibs='$ldl'
ffmpeg_deps="avcodec avfilter avformat swscale swresample"
ffmpeg_deps="avcodec avfilter avformat swscale swresample format_filter"
ffmpeg_select="buffersink_filter"
doc_deps="texi2html"
......@@ -3060,6 +3062,7 @@ if enabled network; then
check_type netinet/in.h "struct sockaddr_in6"
check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
check_header netinet/sctp.h
# Prefer arpa/inet.h over winsock2
if check_header arpa/inet.h ; then
check_func closesocket
......
......@@ -24,6 +24,12 @@ API changes, most recent first:
2012-03-26 - a67d9cf - lavfi 2.66.100
Add avfilter_fill_frame_from_{audio_,}buffer_ref() functions.
2012-xx-xx - xxxxxxx - lavc 54.13.1
For audio formats with fixed frame size, the last frame
no longer needs to be padded with silence, libavcodec
will handle this internally (effectively all encoders
behave as if they had CODEC_CAP_SMALL_LAST_FRAME set).
2012-xx-xx - xxxxxxx - lavr 0.0.1
Change AV_MIX_COEFF_TYPE_Q6 to AV_MIX_COEFF_TYPE_Q8.
......
......@@ -938,7 +938,7 @@ frame rate or decrease the frame size.
@item
If your computer is not fast enough, you can speed up the
compression at the expense of the compression ratio. You can use
'-me zero' to speed up motion estimation, and '-intra' to disable
'-me zero' to speed up motion estimation, and '-g 0' to disable
motion estimation completely (you have only I-frames, which means it
is about as good as JPEG compression).
......
......@@ -704,21 +704,34 @@ static enum PixelFormat choose_pixel_fmt(AVStream *st, AVCodec *codec, enum Pixe
return target;
}
static const enum PixelFormat *choose_pixel_fmts(OutputStream *ost)
static char *choose_pixel_fmts(OutputStream *ost)
{
if (ost->st->codec->pix_fmt != PIX_FMT_NONE) {
ost->pix_fmts[0] = choose_pixel_fmt(ost->st, ost->enc, ost->st->codec->pix_fmt);
return ost->pix_fmts;
return av_strdup(av_get_pix_fmt_name(choose_pixel_fmt(ost->st, ost->enc, ost->st->codec->pix_fmt)));
} else if (ost->enc->pix_fmts) {
const enum PixelFormat *p;
AVIOContext *s = NULL;
uint8_t *ret;
int len;
if (avio_open_dyn_buf(&s) < 0)
exit_program(1);
p = ost->enc->pix_fmts;
if (ost->st->codec->strict_std_compliance <= FF_COMPLIANCE_UNOFFICIAL) {
if (ost->st->codec->codec_id == CODEC_ID_MJPEG) {
return (const enum PixelFormat[]) { PIX_FMT_YUVJ420P, PIX_FMT_YUVJ422P, PIX_FMT_YUV420P, PIX_FMT_YUV422P, PIX_FMT_NONE };
p = (const enum PixelFormat[]) { PIX_FMT_YUVJ420P, PIX_FMT_YUVJ422P, PIX_FMT_YUV420P, PIX_FMT_YUV422P, PIX_FMT_NONE };
} else if (ost->st->codec->codec_id == CODEC_ID_LJPEG) {
return (const enum PixelFormat[]) { PIX_FMT_YUVJ420P, PIX_FMT_YUVJ422P, PIX_FMT_YUVJ444P, PIX_FMT_YUV420P,
p = (const enum PixelFormat[]) { PIX_FMT_YUVJ420P, PIX_FMT_YUVJ422P, PIX_FMT_YUVJ444P, PIX_FMT_YUV420P,
PIX_FMT_YUV422P, PIX_FMT_YUV444P, PIX_FMT_BGRA, PIX_FMT_NONE };
}
}
return ost->enc->pix_fmts;
for (; *p != PIX_FMT_NONE; p++)
avio_printf(s, "%s:", av_get_pix_fmt_name(*p));
len = avio_close_dyn_buf(s, &ret);
ret[len - 1] = 0;
return ret;
} else
return NULL;
}
......@@ -727,10 +740,10 @@ static int configure_video_filters(FilterGraph *fg)
{
InputStream *ist = fg->inputs[0]->ist;
OutputStream *ost = fg->outputs[0]->ost;
AVFilterContext *last_filter, *filter;
AVFilterContext *in_filter, *out_filter, *filter;
AVCodecContext *codec = ost->st->codec;
enum PixelFormat *pix_fmts = choose_pixel_fmts(ost);
AVBufferSinkParams *buffersink_params = av_buffersink_params_alloc();
char *pix_fmts;
AVRational sample_aspect_ratio;
char args[255];
int ret;
......@@ -756,18 +769,20 @@ static int configure_video_filters(FilterGraph *fg)
return ret;
#if FF_API_OLD_VSINK_API
ret = avfilter_graph_create_filter(&fg->outputs[0]->filter, avfilter_get_by_name("buffersink"),
"out", NULL, pix_fmts, fg->graph);
ret = avfilter_graph_create_filter(&fg->outputs[0]->filter,
avfilter_get_by_name("buffersink"),
"out", NULL, NULL, fg->graph);
#else
buffersink_params->pixel_fmts = pix_fmts;
ret = avfilter_graph_create_filter(&fg->outputs[0]->filter, avfilter_get_by_name("buffersink"),
ret = avfilter_graph_create_filter(&fg->outputs[0]->filter,
avfilter_get_by_name("buffersink"),
"out", NULL, buffersink_params, fg->graph);
#endif
av_freep(&buffersink_params);
if (ret < 0)
return ret;
last_filter = fg->inputs[0]->filter;
in_filter = fg->inputs[0]->filter;
out_filter = fg->outputs[0]->filter;
if (codec->width || codec->height) {
snprintf(args, 255, "%d:%d:flags=0x%X",
......@@ -777,9 +792,22 @@ static int configure_video_filters(FilterGraph *fg)
if ((ret = avfilter_graph_create_filter(&filter, avfilter_get_by_name("scale"),
NULL, args, NULL, fg->graph)) < 0)
return ret;
if ((ret = avfilter_link(last_filter, 0, filter, 0)) < 0)
if ((ret = avfilter_link(in_filter, 0, filter, 0)) < 0)
return ret;
last_filter = filter;
in_filter = filter;
}
if ((pix_fmts = choose_pixel_fmts(ost))) {
if ((ret = avfilter_graph_create_filter(&filter,
avfilter_get_by_name("format"),
"format", pix_fmts, NULL,
fg->graph)) < 0)
return ret;
if ((ret = avfilter_link(filter, 0, out_filter, 0)) < 0)
return ret;
out_filter = filter;
av_freep(&pix_fmts);
}
snprintf(args, sizeof(args), "flags=0x%X", (unsigned)ost->sws_flags);
......@@ -790,12 +818,12 @@ static int configure_video_filters(FilterGraph *fg)
AVFilterInOut *inputs = avfilter_inout_alloc();
outputs->name = av_strdup("in");
outputs->filter_ctx = last_filter;
outputs->filter_ctx = in_filter;
outputs->pad_idx = 0;
outputs->next = NULL;
inputs->name = av_strdup("out");
inputs->filter_ctx = fg->outputs[0]->filter;
inputs->filter_ctx = out_filter;
inputs->pad_idx = 0;
inputs->next = NULL;
......@@ -803,7 +831,7 @@ static int configure_video_filters(FilterGraph *fg)
return ret;
av_freep(&ost->avfilter);
} else {
if ((ret = avfilter_link(last_filter, 0, fg->outputs[0]->filter, 0)) < 0)
if ((ret = avfilter_link(in_filter, 0, out_filter, 0)) < 0)
return ret;
}
......@@ -919,19 +947,20 @@ static void init_input_filter(FilterGraph *fg, AVFilterInOut *in)
static int configure_output_filter(FilterGraph *fg, OutputFilter *ofilter, AVFilterInOut *out)
{
char *pix_fmts;
AVCodecContext *codec = ofilter->ost->st->codec;
AVFilterContext *last_filter = out->filter_ctx;
int pad_idx = out->pad_idx;
int ret;
enum PixelFormat *pix_fmts = choose_pixel_fmts(ofilter->ost);
AVBufferSinkParams *buffersink_params = av_buffersink_params_alloc();
#if FF_API_OLD_VSINK_API
ret = avfilter_graph_create_filter(&ofilter->filter, avfilter_get_by_name("buffersink"),
"out", NULL, pix_fmts, fg->graph);
ret = avfilter_graph_create_filter(&ofilter->filter,
avfilter_get_by_name("buffersink"),
"out", NULL, NULL, fg->graph);
#else
buffersink_params->pixel_fmts = pix_fmts;
ret = avfilter_graph_create_filter(&ofilter->filter, avfilter_get_by_name("buffersink"),
ret = avfilter_graph_create_filter(&ofilter->filter,
avfilter_get_by_name("buffersink"),
"out", NULL, buffersink_params, fg->graph);
#endif
av_freep(&buffersink_params);
......@@ -941,18 +970,37 @@ static int configure_output_filter(FilterGraph *fg, OutputFilter *ofilter, AVFil
if (codec->width || codec->height) {
char args[255];
AVFilterContext *filter;
snprintf(args, sizeof(args), "%d:%d:flags=0x%X",
codec->width,
codec->height,
(unsigned)ofilter->ost->sws_flags);
if ((ret = avfilter_graph_create_filter(&last_filter, avfilter_get_by_name("scale"),
if ((ret = avfilter_graph_create_filter(&filter, avfilter_get_by_name("scale"),
NULL, args, NULL, fg->graph)) < 0)
return ret;
if ((ret = avfilter_link(out->filter_ctx, out->pad_idx, last_filter, 0)) < 0)
if ((ret = avfilter_link(last_filter, pad_idx, filter, 0)) < 0)
return ret;
last_filter = filter;
pad_idx = 0;
}
if ((pix_fmts = choose_pixel_fmts(ofilter->ost))) {
AVFilterContext *filter;
if ((ret = avfilter_graph_create_filter(&filter,
avfilter_get_by_name("format"),
"format", pix_fmts, NULL,
fg->graph)) < 0)
return ret;
if ((ret = avfilter_link(last_filter, pad_idx, filter, 0)) < 0)
return ret;
last_filter = filter;
pad_idx = 0;
av_freep(&pix_fmts);
}
if ((ret = avfilter_link(last_filter, pad_idx, ofilter->filter, 0)) < 0)
return ret;
......@@ -2299,14 +2347,6 @@ static void flush_encoders(void)
av_fifo_generic_read(ost->fifo, audio_buf, fifo_bytes, NULL);
/* pad last frame with silence if needed */
if (!(enc->codec->capabilities & CODEC_CAP_SMALL_LAST_FRAME)) {
frame_bytes = enc->frame_size * enc->channels *
av_get_bytes_per_sample(enc->sample_fmt);
if (allocated_audio_buf_size < frame_bytes)
exit_program(1);
generate_silence(audio_buf+fifo_bytes, enc->sample_fmt, frame_bytes - fifo_bytes);
}
encode_audio_frame(os, ost, audio_buf, frame_bytes);
} else {
/* flush encoder with NULL frames until it is done
......
......@@ -1747,7 +1747,7 @@ static int configure_video_filters(AVFilterGraph *graph, VideoState *is, const c
char sws_flags_str[128];
int ret;
AVBufferSinkParams *buffersink_params = av_buffersink_params_alloc();
AVFilterContext *filt_src = NULL, *filt_out = NULL;
AVFilterContext *filt_src = NULL, *filt_out = NULL, *filt_format;;
snprintf(sws_flags_str, sizeof(sws_flags_str), "flags=%d", sws_flags);
graph->scale_sws_opts = av_strdup(sws_flags_str);
......@@ -1756,17 +1756,27 @@ static int configure_video_filters(AVFilterGraph *graph, VideoState *is, const c
return ret;
#if FF_API_OLD_VSINK_API
ret = avfilter_graph_create_filter(&filt_out, avfilter_get_by_name("buffersink"), "out",
NULL, pix_fmts, graph);
ret = avfilter_graph_create_filter(&filt_out,
avfilter_get_by_name("buffersink"),
"out", NULL, pix_fmts, graph);
#else
buffersink_params->pixel_fmts = pix_fmts;
ret = avfilter_graph_create_filter(&filt_out, avfilter_get_by_name("buffersink"), "out",
NULL, buffersink_params, graph);
ret = avfilter_graph_create_filter(&filt_out,
avfilter_get_by_name("buffersink"),
"out", NULL, buffersink_params, graph);
#endif
av_freep(&buffersink_params);
if (ret < 0)
return ret;
if ((ret = avfilter_graph_create_filter(&filt_format,
avfilter_get_by_name("format"),
"format", "yuv420p", NULL, graph)) < 0)
return ret;
if ((ret = avfilter_link(filt_format, 0, filt_out, 0)) < 0)
return ret;
if (vfilters) {
AVFilterInOut *outputs = avfilter_inout_alloc();
AVFilterInOut *inputs = avfilter_inout_alloc();
......@@ -1777,14 +1787,14 @@ static int configure_video_filters(AVFilterGraph *graph, VideoState *is, const c
outputs->next = NULL;
inputs->name = av_strdup("out");
inputs->filter_ctx = filt_out;
inputs->filter_ctx = filt_format;
inputs->pad_idx = 0;
inputs->next = NULL;
if ((ret = avfilter_graph_parse(graph, vfilters, &inputs, &outputs, NULL)) < 0)
return ret;
} else {
if ((ret = avfilter_link(filt_src, 0, filt_out, 0)) < 0)
if ((ret = avfilter_link(filt_src, 0, filt_format, 0)) < 0)
return ret;
}
......@@ -1843,8 +1853,11 @@ static int video_thread(void *arg)
if (picref) {
avfilter_fill_frame_from_video_buffer_ref(frame, picref);
pts_int = picref->pts;
tb = filt_out->inputs[0]->time_base;
pos = picref->pos;
frame->opaque = picref;
ret = 1;
}
if (ret >= 0 && av_cmp_q(tb, is->video_st->time_base)) {
......
......@@ -46,6 +46,7 @@ OBJS-$(CONFIG_GOLOMB) += golomb.o
OBJS-$(CONFIG_H264DSP) += h264dsp.o h264idct.o
OBJS-$(CONFIG_H264PRED) += h264pred.o
OBJS-$(CONFIG_HUFFMAN) += huffman.o
OBJS-$(CONFIG_LIBXVID) += libxvid_rc.o
OBJS-$(CONFIG_LPC) += lpc.o
OBJS-$(CONFIG_LSP) += lsp.o
OBJS-$(CONFIG_MDCT) += mdct_fixed.o mdct_float.o
......@@ -677,7 +678,7 @@ OBJS-$(CONFIG_LIBVPX_DECODER) += libvpxdec.o
OBJS-$(CONFIG_LIBVPX_ENCODER) += libvpxenc.o
OBJS-$(CONFIG_LIBX264_ENCODER) += libx264.o
OBJS-$(CONFIG_LIBXAVS_ENCODER) += libxavs.o
OBJS-$(CONFIG_LIBXVID) += libxvidff.o libxvid_rc.o
OBJS-$(CONFIG_LIBXVID_ENCODER) += libxvid.o
# parsers
OBJS-$(CONFIG_AAC_PARSER) += aac_parser.o aac_ac3_parser.o \
......
......@@ -4044,15 +4044,11 @@ int attribute_deprecated avcodec_encode_audio(AVCodecContext *avctx,
* @param[in] frame AVFrame containing the raw audio data to be encoded.
* May be NULL when flushing an encoder that has the
* CODEC_CAP_DELAY capability set.
* There are 2 codec capabilities that affect the allowed
* values of frame->nb_samples.
* If CODEC_CAP_SMALL_LAST_FRAME is set, then only the final
* frame may be smaller than avctx->frame_size, and all other
* frames must be equal to avctx->frame_size.
* If CODEC_CAP_VARIABLE_FRAME_SIZE is set, then each frame
* can have any number of samples.
* If neither is set, frame->nb_samples must be equal to
* avctx->frame_size for all frames.
* If it is not set, frame->nb_samples must be equal to
* avctx->frame_size for all frames except the last.
* The final frame may be smaller than avctx->frame_size.
* @param[out] got_packet_ptr This field is set to 1 by libavcodec if the
* output packet is non-empty, and to 0 if it is
* empty. If the function returns an error, the
......
......@@ -71,6 +71,12 @@ typedef struct AVCodecInternal {
int sample_count;
#endif
/**
* An audio frame with less than required samples has been submitted and
* padded with silence. Reject all subsequent frames.
*/
int last_audio_frame;
/**
* temporary buffer used for encoders to store their bitstream
*/
......
......@@ -51,10 +51,9 @@
*/
int ff_jpegls_decode_lse(MJpegDecodeContext *s)
{
int av_unused(len), id;
int id;
/* XXX: verify len field validity */
len = get_bits(&s->gb, 16);
skip_bits(&s->gb, 16); /* length: FIXME: verify field validity */
id = get_bits(&s->gb, 8);
switch(id){
......
......@@ -28,6 +28,7 @@
*/
#include "libavutil/imgutils.h"
#include "libavutil/intreadwrite.h"
#include "avcodec.h"
#include "libschroedinger.h"
......@@ -39,6 +40,12 @@
#include <schroedinger/schrodebug.h>
#include <schroedinger/schrovideoformat.h>
/** SchroFrame and Pts relation */
typedef struct LibSchroFrameContext {
SchroFrame *frame;
int64_t pts;
} LibSchroFrameContext;
/** libschroedinger decoder private data */
typedef struct SchroDecoderParams {
/** Schroedinger video format */
......@@ -60,7 +67,7 @@ typedef struct SchroDecoderParams {
int eos_pulled;
/** decoded picture */
AVPicture dec_pic;
AVFrame dec_frame;
} SchroDecoderParams;
typedef struct SchroParseUnitContext {
......@@ -171,8 +178,8 @@ static void libschroedinger_handle_first_access_unit(AVCodecContext *avccontext)
p_schro_params->format = schro_decoder_get_video_format(decoder);
/* Tell FFmpeg about sequence details. */
if (av_image_check_size(p_schro_params->format->width, p_schro_params->format->height,
0, avccontext) < 0) {
if (av_image_check_size(p_schro_params->format->width,
p_schro_params->format->height, 0, avccontext) < 0) {
av_log(avccontext, AV_LOG_ERROR, "invalid dimensions (%dx%d)\n",
p_schro_params->format->width, p_schro_params->format->height);
avccontext->height = avccontext->width = 0;
......@@ -192,12 +199,6 @@ static void libschroedinger_handle_first_access_unit(AVCodecContext *avccontext)
avccontext->time_base.den = p_schro_params->format->frame_rate_numerator;
avccontext->time_base.num = p_schro_params->format->frame_rate_denominator;
if (!p_schro_params->dec_pic.data[0])
avpicture_alloc(&p_schro_params->dec_pic,
avccontext->pix_fmt,
avccontext->width,
avccontext->height);
}
static int libschroedinger_decode_frame(AVCodecContext *avccontext,
......@@ -206,16 +207,18 @@ static int libschroedinger_decode_frame(AVCodecContext *avccontext,
{
const uint8_t *buf = avpkt->data;
int buf_size = avpkt->size;
int64_t pts = avpkt->pts;
SchroTag *tag;
SchroDecoderParams *p_schro_params = avccontext->priv_data;
SchroDecoder *decoder = p_schro_params->decoder;
AVPicture *picture = data;
SchroBuffer *enc_buf;
SchroFrame* frame;
int state;
int go = 1;
int outer = 1;
SchroParseUnitContext parse_ctx;
LibSchroFrameContext *framewithpts = NULL;
*data_size = 0;
......@@ -230,6 +233,13 @@ static int libschroedinger_decode_frame(AVCodecContext *avccontext,
/* Loop through all the individual parse units in the input buffer */
do {
if ((enc_buf = find_next_parse_unit(&parse_ctx))) {
/* Set Schrotag with the pts to be recovered after decoding*/
enc_buf->tag = schro_tag_new(av_malloc(sizeof(int64_t)), av_free);
if (!enc_buf->tag->value) {
av_log(avccontext, AV_LOG_ERROR, "Unable to allocate SchroTag\n");
return AVERROR(ENOMEM);
}
AV_WN(64, enc_buf->tag->value, pts);
/* Push buffer into decoder. */
if (SCHRO_PARSE_CODE_IS_PICTURE(enc_buf->data[4]) &&
SCHRO_PARSE_CODE_NUM_REFS(enc_buf->data[4]) > 0)
......@@ -263,11 +273,21 @@ static int libschroedinger_decode_frame(AVCodecContext *avccontext,
case SCHRO_DECODER_OK:
/* Pull a frame out of the decoder. */
tag = schro_decoder_get_picture_tag(decoder);
frame = schro_decoder_pull(decoder);
if (frame)
if (frame) {
/* Add relation between schroframe and pts. */
framewithpts = av_malloc(sizeof(LibSchroFrameContext));
if (!framewithpts) {
av_log(avccontext, AV_LOG_ERROR, "Unable to allocate FrameWithPts\n");
return AVERROR(ENOMEM);
}
framewithpts->frame = frame;
framewithpts->pts = AV_RN64(tag->value);
ff_schro_queue_push_back(&p_schro_params->dec_frame_queue,
frame);
framewithpts);
}
break;
case SCHRO_DECODER_EOS:
go = 0;
......@@ -284,30 +304,46 @@ static int libschroedinger_decode_frame(AVCodecContext *avccontext,
} while (outer);
/* Grab next frame to be returned from the top of the queue. */
frame = ff_schro_queue_pop(&p_schro_params->dec_frame_queue);
framewithpts = ff_schro_queue_pop(&p_schro_params->dec_frame_queue);
if (framewithpts && framewithpts->frame) {
if (p_schro_params->dec_frame.data[0])
avccontext->release_buffer(avccontext, &p_schro_params->dec_frame);
if (avccontext->get_buffer(avccontext, &p_schro_params->dec_frame) < 0) {
av_log(avccontext, AV_LOG_ERROR, "Unable to allocate buffer\n");
return AVERROR(ENOMEM);
}
if (frame) {
memcpy(p_schro_params->dec_pic.data[0],
frame->components[0].data,
frame->components[0].length);
memcpy(p_schro_params->dec_frame.data[0],
framewithpts->frame->components[0].data,
framewithpts->frame->components[0].length);
memcpy(p_schro_params->dec_pic.data[1],
frame->components[1].data,
frame->components[1].length);
memcpy(p_schro_params->dec_frame.data[1],
framewithpts->frame->components[1].data,
framewithpts->frame->components[1].length);
memcpy(p_schro_params->dec_pic.data[2],
frame->components[2].data,
frame->components[2].length);
memcpy(p_schro_params->dec_frame.data[2],
framewithpts->frame->components[2].data,
framewithpts->frame->components[2].length);
/* Fill picture with current buffer data from Schroedinger. */
avpicture_fill(picture, p_schro_params->dec_pic.data[0],
avccontext->pix_fmt,
avccontext->width, avccontext->height);
/* Fill frame with current buffer data from Schroedinger. */
p_schro_params->dec_frame.format = -1; /* Unknown -1 */
p_schro_params->dec_frame.width = framewithpts->frame->width;
p_schro_params->dec_frame.height = framewithpts->frame->height;
p_schro_params->dec_frame.pkt_pts = framewithpts->pts;
p_schro_params->dec_frame.linesize[0] = framewithpts->frame->components[0].stride;
p_schro_params->dec_frame.linesize[1] = framewithpts->frame->components[1].stride;
p_schro_params->dec_frame.linesize[2] = framewithpts->frame->components[2].stride;
*data_size = sizeof(AVPicture);
*(AVFrame*)data = p_schro_params->dec_frame;
*data_size = sizeof(AVFrame);
/* Now free the frame resources. */
libschroedinger_decode_frame_free(frame);
libschroedinger_decode_frame_free(framewithpts->frame);
av_free(framewithpts);
} else {
data = NULL;
*data_size = 0;
}
return buf_size;
}
......@@ -320,7 +356,8 @@ static av_cold int libschroedinger_decode_close(AVCodecContext *avccontext)
schro_decoder_free(p_schro_params->decoder);
av_freep(&p_schro_params->format);
avpicture_free(&p_schro_params->dec_pic);
if (p_schro_params->dec_frame.data[0])
avccontext->release_buffer(avccontext, &p_schro_params->dec_frame);
/* Free data in the output frame queue. */
ff_schro_queue_free(&p_schro_params->dec_frame_queue,
......
......@@ -33,7 +33,7 @@
#include "libavutil/cpu.h"
#include "libavutil/intreadwrite.h"
#include "libavutil/mathematics.h"
#include "libxvid_internal.h"
#include "libxvid.h"
#include "mpegvideo.h"
/**
......@@ -82,7 +82,6 @@ struct xvid_ff_pass1 {
* rate-control plugin.
*/
/**
* Initialize the two-pass plugin and context.
*
......
......@@ -18,8 +18,8 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef AVCODEC_LIBXVID_INTERNAL_H
#define AVCODEC_LIBXVID_INTERNAL_H
#ifndef AVCODEC_LIBXVID_H
#define AVCODEC_LIBXVID_H
/**
* @file
......@@ -29,4 +29,4 @@
int ff_tempfile(const char *prefix, char **filename);
#endif /* AVCODEC_LIBXVID_INTERNAL_H */
#endif /* AVCODEC_LIBXVID_H */
......@@ -20,11 +20,12 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "config.h"
#include <xvid.h>
#include <unistd.h>
#include "libavutil/file.h"
#include "avcodec.h"
#include "libxvid_internal.h"
#include "libxvid.h"
//#include "dsputil.h"
#include "mpegvideo.h"
......
......@@ -22,6 +22,12 @@
#ifndef AVCODEC_OPTIONS_TABLE
#define AVCODEC_OPTIONS_TABLE
#include <float.h>
#include <limits.h>
#include "libavutil/opt.h"
#include "avcodec.h"
#define OFFSET(x) offsetof(AVCodecContext,x)
#define DEFAULT 0 //should be NAN but it does not work as it is not a constant in glibc as required by ANSI/ISO C
//these names are too long to be readable
......
......@@ -1001,11 +1001,59 @@ int ff_alloc_packet(AVPacket *avpkt, int size)
return ff_alloc_packet2(NULL, avpkt, size);
}
/**
* Pad last frame with silence.
*/
static int pad_last_frame(AVCodecContext *s, AVFrame **dst, const AVFrame *src)
{
AVFrame *frame = NULL;
uint8_t *buf = NULL;
int ret;
if (!(frame = avcodec_alloc_frame()))
return AVERROR(ENOMEM);
*frame = *src;
if ((ret = av_samples_get_buffer_size(&frame->linesize[0], s->channels,
s->frame_size, s->sample_fmt, 0)) < 0)
goto fail;
if (!(buf = av_malloc(ret))) {
ret = AVERROR(ENOMEM);
goto fail;
}
frame->nb_samples = s->frame_size;
if ((ret = avcodec_fill_audio_frame(frame, s->channels, s->sample_fmt,
buf, ret, 0)) < 0)
goto fail;
if ((ret = av_samples_copy(frame->extended_data, src->extended_data, 0, 0,
src->nb_samples, s->channels, s->sample_fmt)) < 0)
goto fail;
if ((ret = av_samples_set_silence(frame->extended_data, src->nb_samples,
frame->nb_samples - src->nb_samples,
s->channels, s->sample_fmt)) < 0)
goto fail;
*dst = frame;
return 0;
fail:
if (frame->extended_data != frame->data)
av_freep(&frame->extended_data);
av_freep(&buf);
av_freep(&frame);
return ret;
}
int attribute_align_arg avcodec_encode_audio2(AVCodecContext *avctx,
AVPacket *avpkt,
const AVFrame *frame,
int *got_packet_ptr)
{
AVFrame tmp;
AVFrame *padded_frame = NULL;
int ret;
AVPacket user_pkt = *avpkt;
int needs_realloc = !user_pkt.data;
......@@ -1018,12 +1066,38 @@ int attribute_align_arg avcodec_encode_audio2(AVCodecContext *avctx,
return 0;
}
/* ensure that extended_data is properly set */
if (frame && !frame->extended_data) {
if (av_sample_fmt_is_planar(avctx->sample_fmt) &&
avctx->channels > AV_NUM_DATA_POINTERS) {
av_log(avctx, AV_LOG_ERROR, "Encoding to a planar sample format, "
"with more than %d channels, but extended_data is not set.\n",
AV_NUM_DATA_POINTERS);
return AVERROR(EINVAL);
}
av_log(avctx, AV_LOG_WARNING, "extended_data is not set.\n");
tmp = *frame;
tmp.extended_data = tmp.data;
frame = &tmp;
}
/* check for valid frame size */
if (frame) {
if (avctx->codec->capabilities & CODEC_CAP_SMALL_LAST_FRAME) {
if (frame->nb_samples > avctx->frame_size)
return AVERROR(EINVAL);
} else if (!(avctx->codec->capabilities & CODEC_CAP_VARIABLE_FRAME_SIZE)) {
if (frame->nb_samples < avctx->frame_size &&
!avctx->internal->last_audio_frame) {
ret = pad_last_frame(avctx, &padded_frame, frame);
if (ret < 0)
return ret;
frame = padded_frame;
avctx->internal->last_audio_frame = 1;
}
if (frame->nb_samples != avctx->frame_size)
return AVERROR(EINVAL);
}
......@@ -1084,6 +1158,13 @@ int attribute_align_arg avcodec_encode_audio2(AVCodecContext *avctx,
here to simplify things */
avpkt->flags |= AV_PKT_FLAG_KEY;
if (padded_frame) {
av_freep(&padded_frame->data[0]);
if (padded_frame->extended_data != padded_frame->data)
av_freep(&padded_frame->extended_data);
av_freep(&padded_frame);
}
return ret;
}
......
......@@ -28,7 +28,7 @@
#define LIBAVCODEC_VERSION_MAJOR 54
#define LIBAVCODEC_VERSION_MINOR 21
#define LIBAVCODEC_VERSION_MICRO 100
#define LIBAVCODEC_VERSION_MICRO 101
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
LIBAVCODEC_VERSION_MINOR, \
......
......@@ -23,6 +23,7 @@ HEADERS = asrc_abuffer.h \
OBJS = allfilters.o \
avfilter.o \
avfiltergraph.o \
buffersink.o \
defaults.o \
drawutils.o \
formats.o \
......
......@@ -128,6 +128,10 @@ void avfilter_register_all(void)
extern AVFilter avfilter_vsrc_buffer;
avfilter_register(&avfilter_vsrc_buffer);
}
{
extern AVFilter avfilter_vsink_buffer;
avfilter_register(&avfilter_vsink_buffer);
}
{
extern AVFilter avfilter_vf_scale;
avfilter_register(&avfilter_vf_scale);
......
......@@ -51,6 +51,50 @@ int avfilter_copy_frame_props(AVFilterBufferRef *dst, const AVFrame *src)
return 0;
}
int avfilter_copy_buf_props(AVFrame *dst, const AVFilterBufferRef *src)
{
int planes, nb_channels;
memcpy(dst->data, src->data, sizeof(dst->data));
memcpy(dst->linesize, src->linesize, sizeof(dst->linesize));
dst->pts = src->pts;
dst->format = src->format;
switch (src->type) {
case AVMEDIA_TYPE_VIDEO:
dst->width = src->video->w;
dst->height = src->video->h;
dst->sample_aspect_ratio = src->video->sample_aspect_ratio;
dst->interlaced_frame = src->video->interlaced;
dst->top_field_first = src->video->top_field_first;
dst->key_frame = src->video->key_frame;
dst->pict_type = src->video->pict_type;
break;
case AVMEDIA_TYPE_AUDIO:
nb_channels = av_get_channel_layout_nb_channels(src->audio->channel_layout);
planes = av_sample_fmt_is_planar(src->format) ? nb_channels : 1;
if (planes > FF_ARRAY_ELEMS(dst->data)) {
dst->extended_data = av_mallocz(planes * sizeof(*dst->extended_data));
if (!dst->extended_data)
return AVERROR(ENOMEM);
memcpy(dst->extended_data, src->extended_data,
planes * sizeof(dst->extended_data));
} else
dst->extended_data = dst->data;
dst->sample_rate = src->audio->sample_rate;
dst->channel_layout = src->audio->channel_layout;
dst->nb_samples = src->audio->nb_samples;
break;
default:
return AVERROR(EINVAL);
}
return 0;
}
AVFilterBufferRef *avfilter_get_video_buffer_ref_from_frame(const AVFrame *frame,
int perms)
{
......
......@@ -35,9 +35,19 @@
/**
* Copy the frame properties of src to dst, without copying the actual
* image data.
*
* @return 0 on success, a negative number on error.
*/
int avfilter_copy_frame_props(AVFilterBufferRef *dst, const AVFrame *src);
/**
* Copy the frame properties and data pointers of src to dst, without copying
* the actual data.
*
* @return 0 on success, a negative number on error.
*/
int avfilter_copy_buf_props(AVFrame *dst, const AVFilterBufferRef *src);
/**
* Create and return a picref reference from the data and properties
* contained in frame.
......
......@@ -68,6 +68,7 @@ AVFilterBufferRef *avfilter_ref_buffer(AVFilterBufferRef *ref, int pmask)
return NULL;
}
*ret->video = *ref->video;
ret->extended_data = ret->data;
} else if (ref->type == AVMEDIA_TYPE_AUDIO) {
ret->audio = av_malloc(sizeof(AVFilterBufferRefAudioProps));
if (!ret->audio) {
......@@ -75,6 +76,19 @@ AVFilterBufferRef *avfilter_ref_buffer(AVFilterBufferRef *ref, int pmask)
return NULL;
}
*ret->audio = *ref->audio;
if (ref->extended_data != ref->data) {
int nb_channels = av_get_channel_layout_nb_channels(ref->audio->channel_layout);
if (!(ret->extended_data = av_malloc(sizeof(*ret->extended_data) *
nb_channels))) {
av_freep(&ret->audio);
av_freep(&ret);
return NULL;
}
memcpy(ret->extended_data, ref->extended_data,
sizeof(*ret->extended_data) * nb_channels);
} else
ret->extended_data = ret->data;
}
ret->perms &= pmask;
ret->buf->refcount ++;
......@@ -155,6 +169,8 @@ void avfilter_unref_buffer(AVFilterBufferRef *ref)
}
ref->buf->free(ref->buf);
}
if (ref->extended_data != ref->data)
av_freep(&ref->extended_data);
av_freep(&ref->video);
av_freep(&ref->audio);
av_free(ref);
......@@ -472,6 +488,9 @@ avfilter_get_video_buffer_ref_from_arrays(uint8_t * const data[4], const int lin
memcpy(picref->data, pic->data, sizeof(picref->data));
memcpy(picref->linesize, pic->linesize, sizeof(picref->linesize));
pic-> extended_data = pic->data;
picref->extended_data = picref->data;
return picref;
fail:
......@@ -541,6 +560,74 @@ fail:
return NULL;
}
AVFilterBufferRef *avfilter_get_audio_buffer_ref_from_arrays_alt(uint8_t **data,
int linesize, int perms,
int nb_samples,
enum AVSampleFormat sample_fmt,
uint64_t channel_layout)
{
int planes;
AVFilterBuffer *samples = av_mallocz(sizeof(*samples));
AVFilterBufferRef *samplesref = av_mallocz(sizeof(*samplesref));
if (!samples || !samplesref)
goto fail;
samplesref->buf = samples;
samplesref->buf->free = ff_avfilter_default_free_buffer;
if (!(samplesref->audio = av_mallocz(sizeof(*samplesref->audio))))
goto fail;
samplesref->audio->nb_samples = nb_samples;
samplesref->audio->channel_layout = channel_layout;
samplesref->audio->planar = av_sample_fmt_is_planar(sample_fmt);
planes = samplesref->audio->planar ? av_get_channel_layout_nb_channels(channel_layout) : 1;
/* make sure the buffer gets read permission or it's useless for output */
samplesref->perms = perms | AV_PERM_READ;
samples->refcount = 1;
samplesref->type = AVMEDIA_TYPE_AUDIO;
samplesref->format = sample_fmt;
memcpy(samples->data, data,
FFMIN(FF_ARRAY_ELEMS(samples->data), planes)*sizeof(samples->data[0]));
memcpy(samplesref->data, samples->data, sizeof(samples->data));
samples->linesize[0] = samplesref->linesize[0] = linesize;
if (planes > FF_ARRAY_ELEMS(samples->data)) {
samples-> extended_data = av_mallocz(sizeof(*samples->extended_data) *
planes);
samplesref->extended_data = av_mallocz(sizeof(*samplesref->extended_data) *
planes);
if (!samples->extended_data || !samplesref->extended_data)
goto fail;
memcpy(samples-> extended_data, data, sizeof(*data)*planes);
memcpy(samplesref->extended_data, data, sizeof(*data)*planes);
} else {
samples->extended_data = samples->data;
samplesref->extended_data = samplesref->data;
}
return samplesref;
fail:
if (samples && samples->extended_data != samples->data)
av_freep(&samples->extended_data);
if (samplesref) {
av_freep(&samplesref->audio);
if (samplesref->extended_data != samplesref->data)
av_freep(&samplesref->extended_data);
}
av_freep(&samplesref);
av_freep(&samples);
return NULL;
}
int avfilter_request_frame(AVFilterLink *link)
{
FF_DPRINTF_START(NULL, request_frame); ff_dlog_link(NULL, link, 1);
......
......@@ -84,6 +84,22 @@ typedef struct AVFilterBuffer {
int format; ///< media format
int w, h; ///< width and height of the allocated buffer
/**
* pointers to the data planes/channels.
*
* For video, this should simply point to data[].
*
* For planar audio, each channel has a separate data pointer, and
* linesize[0] contains the size of each channel buffer.
* For packed audio, there is just one data pointer, and linesize[0]
* contains the total size of the buffer for all channels.
*
* Note: Both data and extended_data will always be set, but for planar
* audio with more channels that can fit in data, extended_data must be used
* in order to access all channels.
*/
uint8_t **extended_data;
} AVFilterBuffer;
#define AV_PERM_READ 0x01 ///< can read from the buffer
......@@ -150,6 +166,22 @@ typedef struct AVFilterBufferRef {
enum AVMediaType type; ///< media type of buffer data
AVFilterBufferRefVideoProps *video; ///< video buffer specific properties
AVFilterBufferRefAudioProps *audio; ///< audio buffer specific properties
/**
* pointers to the data planes/channels.
*
* For video, this should simply point to data[].
*
* For planar audio, each channel has a separate data pointer, and
* linesize[0] contains the size of each channel buffer.
* For packed audio, there is just one data pointer, and linesize[0]
* contains the total size of the buffer for all channels.
*
* Note: Both data and extended_data will always be set, but for planar
* audio with more channels that can fit in data, extended_data must be used
* in order to access all channels.
*/
uint8_t **extended_data;
} AVFilterBufferRef;
/**
......@@ -783,10 +815,31 @@ AVFilterBufferRef *avfilter_get_audio_buffer(AVFilterLink *link, int perms,
* @param channel_layout the channel layout of the buffer
* @param planar audio data layout - planar or packed
*/
AVFilterBufferRef *
avfilter_get_audio_buffer_ref_from_arrays(uint8_t *data[8], int linesize[8], int perms,
int nb_samples, enum AVSampleFormat sample_fmt,
uint64_t channel_layout, int planar);
AVFilterBufferRef *avfilter_get_audio_buffer_ref_from_arrays(uint8_t *data[8],
int linesize[8],
int perms,
int nb_samples,
enum AVSampleFormat sample_fmt,
uint64_t channel_layout,
int planar);
/**
* Create an audio buffer reference wrapped around an already
* allocated samples buffer.
*
* @param data pointers to the samples plane buffers
* @param linesize linesize for the samples plane buffers
* @param perms the required access permissions
* @param nb_samples number of samples per channel
* @param sample_fmt the format of each sample in the buffer to allocate
* @param channel_layout the channel layout of the buffer
*/
AVFilterBufferRef *avfilter_get_audio_buffer_ref_from_arrays_alt(uint8_t **data,
int linesize,
int perms,
int nb_samples,
enum AVSampleFormat sample_fmt,
uint64_t channel_layout);
/**
* Request an input frame from the filter at the other end of the link.
*
......
/*
* Copyright (c) 2011 Stefano Sabatini
*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/**
* @file
* buffer sink
*/
#include "libavutil/fifo.h"
#include "avfilter.h"
#include "buffersink.h"
typedef struct {
AVFifoBuffer *fifo; ///< FIFO buffer of video frame references
} BufferSinkContext;
#define FIFO_INIT_SIZE 8
static av_cold void uninit(AVFilterContext *ctx)
{
BufferSinkContext *sink = ctx->priv;
while (sink->fifo && av_fifo_size(sink->fifo)) {
AVFilterBufferRef *buf;
av_fifo_generic_read(sink->fifo, &buf, sizeof(buf), NULL);
avfilter_unref_buffer(buf);
}
av_fifo_free(sink->fifo);
}
static av_cold int init(AVFilterContext *ctx, const char *args, void *opaque)
{
BufferSinkContext *sink = ctx->priv;
if (!(sink->fifo = av_fifo_alloc(FIFO_INIT_SIZE*sizeof(AVFilterBufferRef*)))) {
av_log(ctx, AV_LOG_ERROR, "Failed to allocate fifo\n");
return AVERROR(ENOMEM);
}
return 0;
}
static void end_frame(AVFilterLink *link)
{
AVFilterContext *ctx = link->dst;
BufferSinkContext *sink = ctx->priv;
if (av_fifo_space(sink->fifo) < sizeof(AVFilterBufferRef *) &&
(av_fifo_realloc2(sink->fifo, av_fifo_size(sink->fifo) * 2) < 0)) {
av_log(ctx, AV_LOG_ERROR, "Error reallocating the FIFO.\n");
return;
}
av_fifo_generic_write(sink->fifo, &link->cur_buf, sizeof(link->cur_buf), NULL);
link->cur_buf = NULL;
}
int av_buffersink_read(AVFilterContext *ctx, AVFilterBufferRef **buf)
{
BufferSinkContext *sink = ctx->priv;
AVFilterLink *link = ctx->inputs[0];
int ret;
if (!buf) {
if (av_fifo_size(sink->fifo))
return av_fifo_size(sink->fifo)/sizeof(*buf);
else
return avfilter_poll_frame(ctx->inputs[0]);
}
if (!av_fifo_size(sink->fifo) &&
(ret = avfilter_request_frame(link)) < 0)
return ret;
if (!av_fifo_size(sink->fifo))
return AVERROR(EINVAL);
av_fifo_generic_read(sink->fifo, buf, sizeof(*buf), NULL);
return 0;
}
AVFilter avfilter_vsink_buffer = {
.name = "buffersink_old",
.description = NULL_IF_CONFIG_SMALL("Buffer video frames, and make them available to the end of the filter graph."),
.priv_size = sizeof(BufferSinkContext),
.init = init,
.uninit = uninit,
.inputs = (AVFilterPad[]) {{ .name = "default",
.type = AVMEDIA_TYPE_VIDEO,
.end_frame = end_frame,
.min_perms = AV_PERM_READ, },
{ .name = NULL }},
.outputs = (AVFilterPad[]) {{ .name = NULL }},
};
......@@ -98,4 +98,18 @@ int av_vsink_buffer_get_video_buffer_ref(AVFilterContext *buffer_sink,
AVFilterBufferRef **picref, int flags);
#endif
/**
* Get a buffer with filtered data from sink and put it in buf.
*
* @param sink pointer to a context of a buffersink AVFilter.
* @param buf pointer to the buffer will be written here if buf is non-NULL. buf
* must be freed by the caller using avfilter_unref_buffer().
* Buf may also be NULL to query whether a buffer is ready to be
* output.
*
* @return >= 0 in case of success, a negative AVERROR code in case of
* failure.
*/
int av_buffersink_read(AVFilterContext *sink, AVFilterBufferRef **buf);
#endif /* AVFILTER_BUFFERSINK_H */
......@@ -28,6 +28,8 @@
void ff_avfilter_default_free_buffer(AVFilterBuffer *ptr)
{
if (ptr->extended_data != ptr->data)
av_freep(&ptr->extended_data);
av_free(ptr->data[0]);
av_free(ptr);
}
......
......@@ -374,6 +374,7 @@ OBJS-$(CONFIG_MD5_PROTOCOL) += md5proto.o
OBJS-$(CONFIG_PIPE_PROTOCOL) += file.o
OBJS-$(CONFIG_RTMP_PROTOCOL) += rtmpproto.o rtmppkt.o
OBJS-$(CONFIG_RTP_PROTOCOL) += rtpproto.o
OBJS-$(CONFIG_SCTP_PROTOCOL) += sctp.o
OBJS-$(CONFIG_TCP_PROTOCOL) += tcp.o
OBJS-$(CONFIG_TLS_PROTOCOL) += tls.o
OBJS-$(CONFIG_UDP_PROTOCOL) += udp.o
......
......@@ -278,6 +278,7 @@ void av_register_all(void)
REGISTER_PROTOCOL (PIPE, pipe);
REGISTER_PROTOCOL (RTMP, rtmp);
REGISTER_PROTOCOL (RTP, rtp);
REGISTER_PROTOCOL (SCTP, sctp);
REGISTER_PROTOCOL (TCP, tcp);
REGISTER_PROTOCOL (TLS, tls);
REGISTER_PROTOCOL (UDP, udp);
......
......@@ -21,6 +21,11 @@
#ifndef AVFORMAT_OPTIONS_TABLE
#define AVFORMAT_OPTIONS_TABLE
#include <limits.h>
#include "libavutil/opt.h"
#include "avformat.h"
#define OFFSET(x) offsetof(AVFormatContext,x)
#define DEFAULT 0 //should be NAN but it does not work as it is not a constant in glibc as required by ANSI/ISO C
//these names are too long to be readable
......
......@@ -870,6 +870,9 @@ void ff_rtsp_parse_line(RTSPMessageHeader *reply, const char *buf,
} else if (av_stristart(p, "x-Accept-Dynamic-Rate:", &p) && rt) {
p += strspn(p, SPACE_CHARS);
rt->accept_dynamic_rate = atoi(p);
} else if (av_stristart(p, "Content-Type:", &p)) {
p += strspn(p, SPACE_CHARS);
av_strlcpy(reply->content_type, p, sizeof(reply->content_type));
}
}
......
......@@ -171,6 +171,11 @@ typedef struct RTSPMessageHeader {
* returned
*/
char reason[256];
/**
* Content type header
*/
char content_type[64];
} RTSPMessageHeader;
/**
......
/*
* SCTP protocol
* Copyright (c) 2012 Luca Barbato
*
* This file is part of Libav.
*
* Libav is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* Libav is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with Libav; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/**
* @file
*
* sctp url_protocol
*
* url syntax: sctp://host:port[?option=val...]
* option: 'listen' : listen for an incoming connection
* 'max_streams=n' : set the maximum number of streams
* 'reuse=1' : enable reusing the socket [TBD]
*
* by setting the maximum number of streams the protocol will use the
* first two bytes of the incoming/outgoing buffer to store the
* stream number of the packet being read/written.
* @see sctp_read
* @see sctp_write
*/
#include <netinet/in.h>
#include <netinet/sctp.h>
#include <sys/time.h>
#include <unistd.h>
#include "config.h"
#if HAVE_POLL_H
#include <poll.h>
#endif
#include "libavutil/intreadwrite.h"
#include "libavutil/parseutils.h"
#include "avformat.h"
#include "internal.h"
#include "network.h"
#include "os_support.h"
#include "url.h"
/*
* The sctp_recvmsg and sctp_sendmsg functions are part of the user
* library that offers support
* for the SCTP kernel Implementation. The main purpose of this
* code is to provide the SCTP Socket API mappings for user
* application to interface with the SCTP in kernel.
*
* This implementation is based on the Socket API Extensions for SCTP
* defined in <draft-ietf-tsvwg-sctpsocket-10.txt>
*
* Copyright (c) 2003 International Business Machines, Corp.
*
* Written or modified by:
* Ryan Layer <rmlayer@us.ibm.com>
*/
static int ff_sctp_recvmsg(int s, void *msg, size_t len, struct sockaddr *from,
socklen_t *fromlen, struct sctp_sndrcvinfo *sinfo,
int *msg_flags)
{
int recvb;
struct iovec iov;
char incmsg[CMSG_SPACE(sizeof(struct sctp_sndrcvinfo))];
struct msghdr inmsg = { 0 };
struct cmsghdr *cmsg = NULL;
iov.iov_base = msg;
iov.iov_len = len;
inmsg.msg_name = from;
inmsg.msg_namelen = fromlen ? *fromlen : 0;
inmsg.msg_iov = &iov;
inmsg.msg_iovlen = 1;
inmsg.msg_control = incmsg;
inmsg.msg_controllen = sizeof(incmsg);
if ((recvb = recvmsg(s, &inmsg, msg_flags ? *msg_flags : 0)) < 0)
return recvb;
if (fromlen)
*fromlen = inmsg.msg_namelen;
if (msg_flags)
*msg_flags = inmsg.msg_flags;
for (cmsg = CMSG_FIRSTHDR(&inmsg); cmsg != NULL;
cmsg = CMSG_NXTHDR(&inmsg, cmsg)) {
if ((IPPROTO_SCTP == cmsg->cmsg_level) &&
(SCTP_SNDRCV == cmsg->cmsg_type))
break;
}
/* Copy sinfo. */
if (cmsg)
memcpy(sinfo, CMSG_DATA(cmsg), sizeof(struct sctp_sndrcvinfo));
return recvb;
}
static int ff_sctp_send(int s, const void *msg, size_t len,
const struct sctp_sndrcvinfo *sinfo, int flags)
{
struct msghdr outmsg;
struct iovec iov;
outmsg.msg_name = NULL;
outmsg.msg_namelen = 0;
outmsg.msg_iov = &iov;
iov.iov_base = msg;
iov.iov_len = len;
outmsg.msg_iovlen = 1;
outmsg.msg_controllen = 0;
if (sinfo) {
char outcmsg[CMSG_SPACE(sizeof(struct sctp_sndrcvinfo))];
struct cmsghdr *cmsg;
outmsg.msg_control = outcmsg;
outmsg.msg_controllen = sizeof(outcmsg);
outmsg.msg_flags = 0;
cmsg = CMSG_FIRSTHDR(&outmsg);
cmsg->cmsg_level = IPPROTO_SCTP;
cmsg->cmsg_type = SCTP_SNDRCV;
cmsg->cmsg_len = CMSG_LEN(sizeof(struct sctp_sndrcvinfo));
outmsg.msg_controllen = cmsg->cmsg_len;
memcpy(CMSG_DATA(cmsg), sinfo, sizeof(struct sctp_sndrcvinfo));
}
return sendmsg(s, &outmsg, flags);
}
typedef struct SCTPContext {
int fd;
int max_streams;
struct sockaddr_storage dest_addr;
socklen_t dest_addr_len;
} SCTPContext;
static int sctp_open(URLContext *h, const char *uri, int flags)
{
struct addrinfo *ai, *cur_ai;
struct addrinfo hints = { 0 };
struct sctp_event_subscribe event = { 0 };
struct sctp_initmsg initparams = { 0 };
int port;
int fd = -1;
SCTPContext *s = h->priv_data;
const char *p;
char buf[256];
int ret, listen_socket = 0;
char hostname[1024], proto[1024], path[1024];
char portstr[10];
av_url_split(proto, sizeof(proto), NULL, 0, hostname, sizeof(hostname),
&port, path, sizeof(path), uri);
if (strcmp(proto,"sctp") || port <= 0 || port >= 65536)
return AVERROR(EINVAL);
s->max_streams = 0;
p = strchr(uri, '?');
if (p) {
if (av_find_info_tag(buf, sizeof(buf), "listen", p))
listen_socket = 1;
if (av_find_info_tag(buf, sizeof(buf), "max_streams", p))
s->max_streams = strtol(buf, NULL, 10);
}
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
snprintf(portstr, sizeof(portstr), "%d", port);
ret = getaddrinfo(hostname, portstr, &hints, &ai);
if (ret) {
av_log(h, AV_LOG_ERROR, "Failed to resolve hostname %s: %s\n",
hostname, gai_strerror(ret));
return AVERROR(EIO);
}
cur_ai = ai;
fd = socket(cur_ai->ai_family, SOCK_STREAM, IPPROTO_SCTP);
if (fd < 0)
goto fail;
s->dest_addr_len = sizeof(s->dest_addr);
if (listen_socket) {
int fd1;
ret = bind(fd, cur_ai->ai_addr, cur_ai->ai_addrlen);
listen(fd, 100);
fd1 = accept(fd, NULL, NULL);
closesocket(fd);
fd = fd1;
} else
ret = connect(fd, cur_ai->ai_addr, cur_ai->ai_addrlen);
ff_socket_nonblock(fd, 1);
event.sctp_data_io_event = 1;
/* TODO: Subscribe to more event types and handle them */
if (setsockopt(fd, IPPROTO_SCTP, SCTP_EVENTS, &event,
sizeof(event)) != 0) {
av_log(h, AV_LOG_ERROR,
"SCTP ERROR: Unable to subscribe to events\n");
goto fail;
}
if (s->max_streams) {
initparams.sinit_max_instreams = s->max_streams;
initparams.sinit_num_ostreams = s->max_streams;
if (setsockopt(fd, SOL_SCTP, SCTP_INITMSG, &initparams,
sizeof(initparams)) < 0)
av_log(h, AV_LOG_ERROR,
"SCTP ERROR: Unable to initialize socket max streams %d\n",
s->max_streams);
}
h->priv_data = s;
h->is_streamed = 1;
s->fd = fd;
freeaddrinfo(ai);
return 0;
fail:
ret = AVERROR(EIO);
freeaddrinfo(ai);
return ret;
}
static int sctp_wait_fd(int fd, int write)
{
int ev = write ? POLLOUT : POLLIN;
struct pollfd p = { .fd = fd, .events = ev, .revents = 0 };
int ret;
ret = poll(&p, 1, 100);
return ret < 0 ? ff_neterrno() : p.revents & ev ? 0 : AVERROR(EAGAIN);
}
static int sctp_read(URLContext *h, uint8_t *buf, int size)
{
SCTPContext *s = h->priv_data;
int ret;
if (!(h->flags & AVIO_FLAG_NONBLOCK)) {
ret = sctp_wait_fd(s->fd, 0);
if (ret < 0)
return ret;
}
if (s->max_streams) {
/*StreamId is introduced as a 2byte code into the stream*/
struct sctp_sndrcvinfo info = { 0 };
ret = ff_sctp_recvmsg(s->fd, buf + 2, size - 2, NULL, 0, &info, 0);
AV_WB16(buf, info.sinfo_stream);
ret = ret < 0 ? ret : ret + 2;
} else
ret = recv(s->fd, buf, size, 0);
return ret < 0 ? ff_neterrno() : ret;
}
static int sctp_write(URLContext *h, const uint8_t *buf, int size)
{
SCTPContext *s = h->priv_data;
int ret;
if (!(h->flags & AVIO_FLAG_NONBLOCK)) {
ret = sctp_wait_fd(s->fd, 1);
if (ret < 0)
return ret;
}
if (s->max_streams) {
/*StreamId is introduced as a 2byte code into the stream*/
struct sctp_sndrcvinfo info = { 0 };
info.sinfo_stream = AV_RB16(buf);
if (info.sinfo_stream > s->max_streams)
abort();
ret = ff_sctp_send(s->fd, buf + 2, size - 2, &info, MSG_EOR);
} else
ret = send(s->fd, buf, size, 0);
return ret < 0 ? ff_neterrno() : ret;
}
static int sctp_close(URLContext *h)
{
SCTPContext *s = h->priv_data;
closesocket(s->fd);
return 0;
}
static int sctp_get_file_handle(URLContext *h)
{
SCTPContext *s = h->priv_data;
return s->fd;
}
URLProtocol ff_sctp_protocol = {
.name = "sctp",
.url_open = sctp_open,
.url_read = sctp_read,
.url_write = sctp_write,
.url_close = sctp_close,
.url_get_file_handle = sctp_get_file_handle,
.priv_data_size = sizeof(SCTPContext),
.flags = URL_PROTOCOL_FLAG_NETWORK,
};
......@@ -274,7 +274,8 @@ int avresample_available(AVAudioResampleContext *avr);
* @see avresample_convert()
*
* @param avr audio resample context
* @param output output data pointers
* @param output output data pointers. May be NULL, in which case
* nb_samples of data is discarded from output FIFO.
* @param nb_samples number of samples to read from the FIFO
* @return the number of samples written to output
*/
......
......@@ -375,7 +375,8 @@ int avresample_convert(AVAudioResampleContext *avr, void **output,
}
}
return handle_buffered_output(avr, &output_buffer, current_buffer);
return handle_buffered_output(avr, output ? &output_buffer : NULL,
current_buffer);
}
int avresample_available(AVAudioResampleContext *avr)
......@@ -385,6 +386,8 @@ int avresample_available(AVAudioResampleContext *avr)
int avresample_read(AVAudioResampleContext *avr, void **output, int nb_samples)
{
if (!output)
return av_audio_fifo_drain(avr->out_fifo, nb_samples);
return av_audio_fifo_read(avr->out_fifo, output, nb_samples);
}
......
......@@ -21,7 +21,7 @@
#define LIBAVRESAMPLE_VERSION_MAJOR 0
#define LIBAVRESAMPLE_VERSION_MINOR 0
#define LIBAVRESAMPLE_VERSION_MICRO 1
#define LIBAVRESAMPLE_VERSION_MICRO 2
#define LIBAVRESAMPLE_VERSION_INT AV_VERSION_INT(LIBAVRESAMPLE_VERSION_MAJOR, \
LIBAVRESAMPLE_VERSION_MINOR, \
......
......@@ -24,75 +24,23 @@
#include <stdint.h>
#include "config.h"
#if HAVE_INLINE_ASM
#if ARCH_MIPS64 && HAVE_INLINE_ASM
#define AV_RN32 AV_RN32
static av_always_inline uint32_t AV_RN32(const void *p)
{
struct __attribute__((packed)) u32 { uint32_t v; };
const uint8_t *q = p;
const struct u32 *pl = (const struct u32 *)(q + 3 * !HAVE_BIGENDIAN);
const struct u32 *pr = (const struct u32 *)(q + 3 * HAVE_BIGENDIAN);
uint32_t v;
__asm__ ("lwl %0, %1 \n\t"
"lwr %0, %2 \n\t"
: "=&r"(v)
: "m"(*(const uint32_t *)((const uint8_t *)p+3*!HAVE_BIGENDIAN)),
"m"(*(const uint32_t *)((const uint8_t *)p+3*HAVE_BIGENDIAN)));
: "m"(*pl), "m"(*pr));
return v;
}
#define AV_WN32 AV_WN32
static av_always_inline void AV_WN32(void *p, uint32_t v)
{
__asm__ ("swl %2, %0 \n\t"
"swr %2, %1 \n\t"
: "=m"(*(uint32_t *)((uint8_t *)p+3*!HAVE_BIGENDIAN)),
"=m"(*(uint32_t *)((uint8_t *)p+3*HAVE_BIGENDIAN))
: "r"(v));
}
#if ARCH_MIPS64
#define AV_RN64 AV_RN64
static av_always_inline uint64_t AV_RN64(const void *p)
{
uint64_t v;
__asm__ ("ldl %0, %1 \n\t"
"ldr %0, %2 \n\t"
: "=&r"(v)
: "m"(*(const uint64_t *)((const uint8_t *)p+7*!HAVE_BIGENDIAN)),
"m"(*(const uint64_t *)((const uint8_t *)p+7*HAVE_BIGENDIAN)));
return v;
}
#define AV_WN64 AV_WN64
static av_always_inline void AV_WN64(void *p, uint64_t v)
{
__asm__ ("sdl %2, %0 \n\t"
"sdr %2, %1 \n\t"
: "=m"(*(uint64_t *)((uint8_t *)p+7*!HAVE_BIGENDIAN)),
"=m"(*(uint64_t *)((uint8_t *)p+7*HAVE_BIGENDIAN))
: "r"(v));
}
#else
#define AV_RN64 AV_RN64
static av_always_inline uint64_t AV_RN64(const void *p)
{
union { uint64_t v; uint32_t hl[2]; } v;
v.hl[0] = AV_RN32(p);
v.hl[1] = AV_RN32((const uint8_t *)p + 4);
return v.v;
}
#define AV_WN64 AV_WN64
static av_always_inline void AV_WN64(void *p, uint64_t v)
{
union { uint64_t v; uint32_t hl[2]; } vv = { v };
AV_WN32(p, vv.hl[0]);
AV_WN32((uint8_t *)p + 4, vv.hl[1]);
}
#endif /* ARCH_MIPS64 */
#endif /* HAVE_INLINE_ASM */
#endif /* ARCH_MIPS64 && HAVE_INLINE_ASM */
#endif /* AVUTIL_MIPS_INTREADWRITE_H */
......@@ -194,3 +194,41 @@ int av_samples_alloc(uint8_t **audio_data, int *linesize, int nb_channels,
}
return 0;
}
int av_samples_copy(uint8_t **dst, uint8_t * const *src, int dst_offset,
int src_offset, int nb_samples, int nb_channels,
enum AVSampleFormat sample_fmt)
{
int planar = av_sample_fmt_is_planar(sample_fmt);
int planes = planar ? nb_channels : 1;
int block_align = av_get_bytes_per_sample(sample_fmt) * (planar ? 1 : nb_channels);
int data_size = nb_samples * block_align;
int i;
dst_offset *= block_align;
src_offset *= block_align;
for (i = 0; i < planes; i++)
memcpy(dst[i] + dst_offset, src[i] + src_offset, data_size);
return 0;
}
int av_samples_set_silence(uint8_t **audio_data, int offset, int nb_samples,
int nb_channels, enum AVSampleFormat sample_fmt)
{
int planar = av_sample_fmt_is_planar(sample_fmt);
int planes = planar ? nb_channels : 1;
int block_align = av_get_bytes_per_sample(sample_fmt) * (planar ? 1 : nb_channels);
int data_size = nb_samples * block_align;
int fill_char = (sample_fmt == AV_SAMPLE_FMT_U8 ||
sample_fmt == AV_SAMPLE_FMT_U8P) ? 0x80 : 0x00;
int i;
offset *= block_align;
for (i = 0; i < planes; i++)
memset(audio_data[i] + offset, fill_char, data_size);
return 0;
}
......@@ -202,4 +202,31 @@ int av_samples_fill_arrays(uint8_t **audio_data, int *linesize,
int av_samples_alloc(uint8_t **audio_data, int *linesize, int nb_channels,
int nb_samples, enum AVSampleFormat sample_fmt, int align);
/**
* Copy samples from src to dst.
*
* @param dst destination array of pointers to data planes
* @param src source array of pointers to data planes
* @param dst_offset offset in samples at which the data will be written to dst
* @param src_offset offset in samples at which the data will be read from src
* @param nb_samples number of samples to be copied
* @param nb_channels number of audio channels
* @param sample_fmt audio sample format
*/
int av_samples_copy(uint8_t **dst, uint8_t * const *src, int dst_offset,
int src_offset, int nb_samples, int nb_channels,
enum AVSampleFormat sample_fmt);
/**
* Fill an audio buffer with silence.
*
* @param audio_data array of pointers to data planes
* @param offset offset in samples at which to start filling
* @param nb_samples number of samples to fill
* @param nb_channels number of audio channels
* @param sample_fmt audio sample format
*/
int av_samples_set_silence(uint8_t **audio_data, int offset, int nb_samples,
int nb_channels, enum AVSampleFormat sample_fmt);
#endif /* AVUTIL_SAMPLEFMT_H */
......@@ -89,12 +89,17 @@ FATE_SEEK = $(SEEK_TESTS:seek_%=fate-seek-%)
FATE = $(FATE_ACODEC) \
$(FATE_VCODEC) \
$(FATE_LAVF) \
$(FATE_LIBAVUTIL) \
$(FATE_SEEK) \
FATE_FFMPEG += $(FATE_FFMPEG-yes) $(FATE_AVCONV) $(FATE_AVCONV-yes)
FATE-$(CONFIG_AVCODEC) += $(FATE_LIBAVCODEC)
FATE-$(CONFIG_AVFILTER) += $(FATE_LAVFI)
FATE += $(FATE-yes)
FATE += $(FATE_LIBAVUTIL)
$(FATE_FFMPEG) $(FATE_LAVF_FATE): ffmpeg$(EXESUF)
$(filter-out %-aref,$(FATE_ACODEC)): $(AREF)
$(filter-out %-vref,$(FATE_VSYNTH1)): fate-vsynth1-vref
......@@ -121,7 +126,7 @@ fate-seek: $(FATE_SEEK)
ifdef SAMPLES
FATE += $(FATE_LAVF_FATE)
FATE += $(FATE_TESTS) $(FATE_TESTS-yes)
FATE += $(FATE_FFMPEG)
fate-rsync:
rsync -vaLW --timeout=60 --contimeout=60 rsync://fate.ffmpeg.org/fate-suite/ $(SAMPLES)
else
......@@ -139,7 +144,7 @@ TOOL = ffmpeg
fate:: $(FATE)
$(FATE) $(FATE_TESTS-no): ffmpeg$(EXESUF) ffprobe$(EXESUF) $(FATE_UTILS:%=tests/%$(HOSTEXESUF))
$(FATE) $(FATE_TESTS-no): $(FATE_UTILS:%=tests/%$(HOSTEXESUF))
@echo "TEST $(@:fate-%=%)"
$(Q)$(SRC_PATH)/tests/fate-run.sh $@ "$(SAMPLES)" "$(TARGET_EXEC)" "$(TARGET_PATH)" '$(CMD)' '$(CMP)' '$(REF)' '$(FUZZ)' '$(THREADS)' '$(THREAD_TYPE)' '$(CPUFLAGS)' '$(CMP_SHIFT)' '$(CMP_TARGET)' '$(SIZE_TOLERANCE)'
......
......@@ -88,7 +88,8 @@ fate-aac-ln-encode: CMP_SHIFT = -4096
fate-aac-ln-encode: CMP_TARGET = 65
fate-aac-ln-encode: SIZE_TOLERANCE = 3560
FATE_TESTS += $(FATE_AAC) $(FATE_AAC_ENCODE)
FATE_FFMPEG += $(FATE_AAC) $(FATE_AAC_ENCODE)
fate-aac: $(FATE_AAC) $(FATE_AAC_ENCODE)
$(FATE_AAC): CMP = oneoff
$(FATE_AAC): FUZZ = 2
......@@ -44,5 +44,5 @@ fate-eac3-encode: CMP_SHIFT = -1024
fate-eac3-encode: CMP_TARGET = 514.02
fate-eac3-encode: SIZE_TOLERANCE = 488
FATE_TESTS += $(FATE_AC3)
FATE_AVCONV += $(FATE_AC3)
fate-ac3: $(FATE_AC3)
......@@ -16,14 +16,17 @@ fate-adpcm-creative-8-2.6bit: CMD = md5 -i $(SAMPLES)/creative/BBC_3BIT.VOC -f s
FATE_ADPCM += fate-adpcm-creative-8-4bit
fate-adpcm-creative-8-4bit: CMD = md5 -i $(SAMPLES)/creative/BBC_4BIT.VOC -f s16le
FATE_ADPCM += fate-adpcm-ea-mad-ea-r1
fate-adpcm-ea-mad-ea-r1: CMD = framecrc -i $(SAMPLES)/ea-mad/NFS6LogoE.mad
FATE_ADPCM += fate-adpcm-ea-1
fate-adpcm-ea-1: CMD = framecrc -i $(SAMPLES)/ea-wve/networkBackbone-partial.wve -frames:a 26 -vn
FATE_ADPCM += fate-adpcm-ea-2
fate-adpcm-ea-2: CMD = framecrc -i $(SAMPLES)/ea-dct/NFS2Esprit-partial.dct -vn
FATE_ADPCM += fate-adpcm-ea-maxis-xa
fate-adpcm-ea-maxis-xa: CMD = framecrc -i $(SAMPLES)/maxis-xa/SC2KBUG.XA -frames:a 30
FATE_ADPCM += fate-adpcm-ea-tqi
fate-adpcm-ea-tqi: CMD = framecrc -i $(SAMPLES)/ea-wve/networkBackbone-partial.wve -frames:v 26
FATE_ADPCM += fate-adpcm-ea-r1
fate-adpcm-ea-r1: CMD = framecrc -i $(SAMPLES)/ea-mad/NFS6LogoE.mad -vn
FATE_ADPCM += fate-adpcm-ima-dk3
fate-adpcm-ima-dk3: CMD = md5 -i $(SAMPLES)/duck/sop-audio-only.avi -f s16le
......@@ -31,6 +34,12 @@ fate-adpcm-ima-dk3: CMD = md5 -i $(SAMPLES)/duck/sop-audio-only.avi -f s16le
FATE_ADPCM += fate-adpcm-ima-dk4
fate-adpcm-ima-dk4: CMD = md5 -i $(SAMPLES)/duck/salsa-audio-only.avi -f s16le
FATE_ADPCM += fate-adpcm-ima-ea-eacs
fate-adpcm-ima-ea-eacs: CMD = framecrc -i $(SAMPLES)/ea-tgv/INTRO8K-partial.TGV -vn
FATE_ADPCM += fate-adpcm-ima-ea-sead
fate-adpcm-ima-ea-sead: CMD = framecrc -i $(SAMPLES)/ea-tgv/INTEL_S.TGV -vn
FATE_ADPCM += fate-adpcm-ima_wav-stereo
fate-adpcm-ima_wav-stereo: CMD = md5 -i $(SAMPLES)/qt-surge-suite/surge-2-16-L-ms11.mov -f s16le
......@@ -38,10 +47,10 @@ FATE_ADPCM += fate-adpcm-psx-str-v3
fate-adpcm-psx-str-v3: CMD = framecrc -i $(SAMPLES)/psx-str/abc000_cut.str -vn
FATE_ADPCM += fate-adpcm-thp
fate-adpcm-thp: CMD = framecrc -idct simple -i $(SAMPLES)/thp/pikmin2-opening1-partial.thp
fate-adpcm-thp: CMD = framecrc -i $(SAMPLES)/thp/pikmin2-opening1-partial.thp -vn
FATE_ADPCM += fate-adpcm_ms-stereo
fate-adpcm_ms-stereo: CMD = md5 -i $(SAMPLES)/qt-surge-suite/surge-2-16-L-ms02.mov -f s16le
FATE_TESTS += $(FATE_ADPCM)
FATE_AVCONV += $(FATE_ADPCM)
fate-adpcm: $(FATE_ADPCM)
......@@ -7,5 +7,5 @@ endef
$(foreach N,$(ALS_SUITE),$(eval $(call FATE_ALS_SUITE,$(N))))
FATE_TESTS += $(FATE_ALS)
FATE_AVCONV += $(FATE_ALS)
fate-als: $(FATE_ALS)
......@@ -46,5 +46,5 @@ fate-amrnb-12k2: CMP = stddev
fate-amrnb-12k2: REF = $(SAMPLES)/amrnb/12.2k.pcm
fate-amrnb-12k2: FUZZ = 1
FATE_TESTS += $(FATE_AMRNB)
FATE_AVCONV += $(FATE_AMRNB)
fate-amrnb: $(FATE_AMRNB)
......@@ -58,5 +58,5 @@ fate-amrwb-23k85-2: CMP = stddev
fate-amrwb-23k85-2: REF = $(SAMPLES)/amrwb/deus-23k85.pcm
fate-amrwb-23k85-2: FUZZ = 1
FATE_TESTS += $(FATE_AMRWB)
FATE_AVCONV += $(FATE_AMRWB)
fate-amrwb: $(FATE_AMRWB)
......@@ -18,5 +18,5 @@ fate-atrac3-3: CMD = pcm -i $(SAMPLES)/atrac3/mc_sich_at3_132_small.wav
fate-atrac3-3: CMP = oneoff
fate-atrac3-3: REF = $(SAMPLES)/atrac3/mc_sich_at3_132_small.pcm
FATE_TESTS += $(FATE_ATRAC)
FATE_AVCONV += $(FATE_ATRAC)
fate-atrac: $(FATE_ATRAC)
......@@ -40,5 +40,5 @@ fate-nellymoser-aref-encode: SIZE_TOLERANCE = 268
FATE_AUDIO += fate-ws_snd
fate-ws_snd: CMD = md5 -i $(SAMPLES)/vqa/ws_snd.vqa -f s16le
FATE_TESTS += $(FATE_AUDIO)
FATE_FFMPEG += $(FATE_AUDIO)
fate-audio: $(FATE_AUDIO)
......@@ -37,5 +37,5 @@ fate-bmp-rle4: CMD = framecrc -i $(SAMPLES)/bmp/testcompress4.bmp -pix_fmt rgb24
FATE_BMP += fate-bmp-rle8
fate-bmp-rle8: CMD = framecrc -i $(SAMPLES)/bmp/testcompress8.bmp -pix_fmt rgb24
FATE_TESTS += $(FATE_BMP)
FATE_AVCONV += $(FATE_BMP)
fate-bmp: $(FATE_BMP)
......@@ -13,5 +13,5 @@ fate-cdxl-pal8-small: CMD = framecrc -i $(SAMPLES)/cdxl/fruit.cdxl -an -pix_fmt
FATE_CDXL += fate-cdxl-bitline-ham6
fate-cdxl-bitline-ham6: CMD = framecrc -i $(SAMPLES)/cdxl/bitline.cdxl -frames:v 10
FATE_TESTS += $(FATE_CDXL)
FATE_AVCONV += $(FATE_CDXL)
fate-cdxl: $(FATE_CDXL)
FATE_TESTS += fate-idct8x8
FATE-yes += fate-idct8x8
fate-idct8x8: libavcodec/dct-test$(EXESUF)
fate-idct8x8: CMD = run libavcodec/dct-test -i
fate-idct8x8: REF = /dev/null
......
......@@ -94,5 +94,5 @@ fate-xmv-demux: CMD = framecrc -i $(SAMPLES)/xmv/logos1p.fmv -vcodec copy -acode
FATE_DEMUX += fate-xwma-demux
fate-xwma-demux: CMD = crc -i $(SAMPLES)/xwma/ergon.xwma -acodec copy
FATE_TESTS += $(FATE_DEMUX)
FATE_FFMPEG += $(FATE_DEMUX)
fate-demux: $(FATE_DEMUX)
......@@ -31,5 +31,5 @@ fate-dfa10: CMD = framecrc -i $(SAMPLES)/chronomaster-dfa/0009.dfa -pix_fmt rgb2
FATE_DFA += fate-dfa11
fate-dfa11: CMD = framecrc -i $(SAMPLES)/chronomaster-dfa/0010.dfa -pix_fmt rgb24
FATE_TESTS += $(FATE_DFA)
FATE_AVCONV += $(FATE_DFA)
fate-dfa: $(FATE_DFA)
FATE_DPCM += fate-dpcm-idroq
fate-dpcm-idroq: CMD = framecrc -i $(SAMPLES)/idroq/idlogo.roq
fate-dpcm-idroq: CMD = framecrc -i $(SAMPLES)/idroq/idlogo.roq -vn
FATE_DPCM += fate-dpcm-sierra
fate-dpcm-sierra: CMD = md5 -i $(SAMPLES)/sol/lsl7sample.sol -f s16le
......@@ -7,5 +7,5 @@ fate-dpcm-sierra: CMD = md5 -i $(SAMPLES)/sol/lsl7sample.sol -f s16le
FATE_DPCM += fate-dpcm-xan
fate-dpcm-xan: CMD = md5 -i $(SAMPLES)/wc4-xan/wc4_2.avi -vn -f s16le
FATE_TESTS += $(FATE_DPCM)
FATE_AVCONV += $(FATE_DPCM)
fate-dpcm: $(FATE_DPCM)
......@@ -4,17 +4,20 @@ fate-ea-cdata: CMD = md5 -i $(SAMPLES)/ea-cdata/166b084d.46410f77.0009b440.24be9
FATE_EA += fate-ea-cmv
fate-ea-cmv: CMD = framecrc -i $(SAMPLES)/ea-cmv/TITLE.CMV -pix_fmt rgb24
FATE_EA += fate-ea-dct
fate-ea-dct: CMD = framecrc -idct simple -i $(SAMPLES)/ea-dct/NFS2Esprit-partial.dct
FATE_EA += fate-ea-tgq
fate-ea-tgq: CMD = framecrc -i $(SAMPLES)/ea-tgq/v27.tgq -an
FATE_EA += fate-ea-tgv-ima-ea-eacs
fate-ea-tgv-ima-ea-eacs: CMD = framecrc -i $(SAMPLES)/ea-tgv/INTRO8K-partial.TGV -pix_fmt rgb24
FATE_EA += fate-ea-tqi
fate-ea-tqi: CMD = framecrc -i $(SAMPLES)/ea-wve/networkBackbone-partial.wve -frames:v 26 -an
FATE_EA += fate-ea-mad
fate-ea-mad: CMD = framecrc -i $(SAMPLES)/ea-mad/NFS6LogoE.mad -an
FATE_EA += fate-ea-tgv-1
fate-ea-tgv-1: CMD = framecrc -i $(SAMPLES)/ea-tgv/INTRO8K-partial.TGV -pix_fmt rgb24 -an
FATE_EA += fate-ea-tgv-ima-ea-sead
fate-ea-tgv-ima-ea-sead: CMD = framecrc -i $(SAMPLES)/ea-tgv/INTEL_S.TGV -pix_fmt rgb24
FATE_EA += fate-ea-tgv-2
fate-ea-tgv-2: CMD = framecrc -i $(SAMPLES)/ea-tgv/INTEL_S.TGV -pix_fmt rgb24 -an
FATE_TESTS += $(FATE_EA)
FATE_FFMPEG += $(FATE_EA)
fate-ea: $(FATE_EA)
......@@ -38,5 +38,5 @@ $(FATE_FFT_FIXED): libavcodec/fft-fixed-test$(EXESUF)
$(FATE_FFT_FIXED): CMD = run libavcodec/fft-fixed-test $(CPUFLAGS:%=-c%) $(ARGS)
$(FATE_FFT_FIXED): REF = /dev/null
FATE_TESTS += $(FATE_FFT) $(FATE_FFT_FIXED)
FATE-$(CONFIG_FFT) += $(FATE_FFT) $(FATE_FFT_FIXED)
fate-fft: $(FATE_FFT) $(FATE_FFT_FIXED)
......@@ -188,7 +188,7 @@ FATE_H264 := $(FATE_H264:%=fate-h264-conformance-%) \
fate-h264-extreme-plane-pred \
fate-h264-bsf-mp4toannexb \
FATE_TESTS += $(FATE_H264)
FATE_AVCONV += $(FATE_H264)
fate-h264: $(FATE_H264)
fate-h264-conformance-aud_mw_e: CMD = framecrc -vsync drop -i $(SAMPLES)/h264-conformance/AUD_MW_E.264
......
......@@ -70,6 +70,6 @@ fate-tiff-fax-g3s: CMD = framecrc -i $(SAMPLES)/CCITT_fax/G31DS.TIF
FATE_IMAGE += $(FATE_TIFF)
fate-tiff: $(FATE_TIFF)
FATE_TESTS += $(FATE_IMAGE)
FATE_FFMPEG += $(FATE_IMAGE)
fate-image: $(FATE_IMAGE)
......@@ -10,5 +10,5 @@ fate-indeo4: CMD = framecrc -i $(SAMPLES)/iv41/indeo41-partial.avi -an
FATE_INDEO += fate-indeo5
fate-indeo5: CMD = framecrc -i $(SAMPLES)/iv50/Educ_Movie_DeadlyForce.avi -an
FATE_TESTS += $(FATE_INDEO)
FATE_AVCONV += $(FATE_INDEO)
fate-indeo: $(FATE_INDEO)
FATE_TESTS += fate-golomb
FATE_LIBAVCODEC += fate-golomb
fate-golomb: libavcodec/golomb-test$(EXESUF)
fate-golomb: CMD = run libavcodec/golomb-test
fate-golomb: REF = /dev/null
FATE_TESTS += fate-iirfilter
FATE_LIBAVCODEC += fate-iirfilter
fate-iirfilter: libavcodec/iirfilter-test$(EXESUF)
fate-iirfilter: CMD = run libavcodec/iirfilter-test
fate-libavcodec: $(FATE_LIBAVCODEC)
......@@ -16,6 +16,6 @@ fate-lossless-tta: CMD = crc -i $(SAMPLES)/lossless-audio/inside.tta
FATE_LOSSLESS_AUDIO += fate-lossless-wma
fate-lossless-wma: CMD = md5 -i $(SAMPLES)/lossless-audio/luckynight-partial.wma -f s16le
FATE_TESTS += $(FATE_LOSSLESS_AUDIO)
FATE_FFMPEG += $(FATE_LOSSLESS_AUDIO)
fate-lossless-audio: $(FATE_LOSSLESS_AUDIO)
......@@ -22,6 +22,6 @@ fate-zlib: CMD = framecrc -i $(SAMPLES)/lcl/zlib-1frame.avi
FATE_LOSSLESS_VIDEO += fate-zerocodec
fate-zerocodec: CMD = framecrc -i $(SAMPLES)/zerocodec/sample-zeco.avi
FATE_TESTS += $(FATE_LOSSLESS_VIDEO)
FATE_FFMPEG += $(FATE_LOSSLESS_VIDEO)
fate-lossless-video: $(FATE_LOSSLESS_VIDEO)
......@@ -10,5 +10,5 @@ FATE_MAPCHAN += fate-mapchan-silent-mono
fate-mapchan-silent-mono: tests/data/asynth-22050-1.wav
fate-mapchan-silent-mono: CMD = md5 -i $(TARGET_PATH)/tests/data/asynth-22050-1.wav -map_channel -1 -map_channel 0.0.0 -f wav
FATE_TESTS += $(FATE_MAPCHAN)
FATE_FFMPEG += $(FATE_MAPCHAN)
fate-mapchan: $(FATE_MAPCHAN)
......@@ -42,5 +42,5 @@ fate-vc1-ism: CMD = framecrc -i $(SAMPLES)/isom/vc1-wmapro.ism -an
FATE_MICROSOFT += $(FATE_VC1)
fate-vc1: $(FATE_VC1)
FATE_TESTS += $(FATE_MICROSOFT)
FATE_FFMPEG += $(FATE_MICROSOFT)
fate-microsoft: $(FATE_MICROSOFT)
......@@ -38,7 +38,7 @@ fate-mp3-float-extra_overread: CMD = pcm -c:a mp3float -i $(SAMPLES)/mpegaudio/e
fate-mp3-float-extra_overread: CMP = stddev
fate-mp3-float-extra_overread: REF = $(SAMPLES)/mpegaudio/extra_overread.pcm
FATE_TESTS += $(FATE_MP3)
FATE_AVCONV += $(FATE_MP3)
fate-mp3: $(FATE_MP3)
$(FATE_MP3): CMP = stddev
$(FATE_MP3): FUZZ = 0.07
......@@ -10,5 +10,5 @@ fate-musepack7: CMP = oneoff
fate-musepack7: REF = $(SAMPLES)/musepack/inside-mp7.pcm
fate-musepack7: FUZZ = 1
FATE_TESTS += $(FATE_MPC)
FATE_FFMPEG += $(FATE_MPC)
fate-mpc: $(FATE_MPC)
......@@ -30,5 +30,5 @@ fate-dcinema-encode: tests/data/asynth-96000-6.wav
fate-dcinema-encode: SRC = tests/data/asynth-96000-6.wav
fate-dcinema-encode: CMD = enc_dec_pcm daud md5 s16le $(SRC) -c:a pcm_s24daud
FATE_TESTS += $(FATE_PCM)
FATE_AVCONV += $(FATE_PCM)
fate-pcm: $(FATE_PCM)
......@@ -10,8 +10,9 @@ fate-probe-format-roundup1414: REF = format_name=mpeg
FATE_PROBE_FORMAT += fate-probe-format-roundup2015
fate-probe-format-roundup2015: REF = format_name=dv
FATE_TESTS += $(FATE_PROBE_FORMAT)
FATE-$(CONFIG_FFPROBE) += $(FATE_PROBE_FORMAT)
fate-probe-format: $(FATE_PROBE_FORMAT)
$(FATE_PROBE_FORMAT): ffprobe$(EXESUF)
$(FATE_PROBE_FORMAT): CMP = oneline
fate-probe-format-%: CMD = probefmt $(SAMPLES)/probe-format/$(@:fate-probe-format-%=%)
......@@ -4,7 +4,7 @@ FATE_PRORES = fate-prores-422 \
fate-prores-422_proxy \
fate-prores-alpha \
FATE_TESTS += $(FATE_PRORES)
FATE_AVCONV += $(FATE_PRORES)
fate-prores: $(FATE_PRORES)
fate-prores-422: CMD = framecrc -flags +bitexact -i $(SAMPLES)/prores/Sequence_1-Apple_ProRes_422.mov -pix_fmt yuv422p10le
......
......@@ -49,5 +49,5 @@ fate-svq1: CMD = framecrc -i $(SAMPLES)/svq1/marymary-shackles.mov -an -t 10
FATE_QT += fate-svq3
fate-svq3: CMD = framecrc -i $(SAMPLES)/svq3/Vertical400kbit.sorenson3.mov -t 6 -an
FATE_TESTS += $(FATE_QT)
FATE_FFMPEG += $(FATE_QT)
fate-qt: $(FATE_QT)
......@@ -19,5 +19,5 @@ fate-qtrle-24bit: CMD = framecrc -i $(SAMPLES)/qtrle/aletrek-rle.mov
FATE_QTRLE += fate-qtrle-32bit
fate-qtrle-32bit: CMD = framecrc -i $(SAMPLES)/qtrle/ultra_demo_720_480_32bpp_rle.mov -pix_fmt rgb24
FATE_TESTS += $(FATE_QTRLE)
FATE_AVCONV += $(FATE_QTRLE)
fate-qtrle: $(FATE_QTRLE)
FATE_REAL += fate-real-14_4
fate-real-14_4: CMD = md5 -i $(SAMPLES)/real/ra3_in_rm_file.rm -f s16le
FATE_REAL += fate-ra-144
fate-ra-144: CMD = md5 -i $(SAMPLES)/real/ra3_in_rm_file.rm -f s16le
FATE_REAL += fate-ra-288
fate-ra-288: CMD = pcm -i $(SAMPLES)/real/ra_288.rm
......@@ -18,8 +18,8 @@ fate-ralf: CMD = md5 -i $(SAMPLES)/lossless-audio/luckynight-partial.rmvb -vn -f
FATE_REAL += fate-rv30
fate-rv30: CMD = framecrc -flags +bitexact -dct fastint -idct simple -i $(SAMPLES)/real/rv30.rm -an
FATE_REAL += fate-real-rv40
fate-real-rv40: CMD = framecrc -i $(SAMPLES)/real/spygames-2MB.rmvb -t 10 -an
FATE_REAL += fate-rv40
fate-rv40: CMD = framecrc -i $(SAMPLES)/real/spygames-2MB.rmvb -t 10 -an
FATE_SIPR += fate-sipr-5k0
fate-sipr-5k0: CMD = pcm -i $(SAMPLES)/sipr/sipr_5k0.rm
......@@ -44,5 +44,5 @@ fate-sipr-16k: REF = $(SAMPLES)/sipr/sipr_16k.pcm
FATE_REAL += $(FATE_SIPR)
fate-sipr: $(FATE_SIPR)
FATE_TESTS += $(FATE_REAL)
FATE_FFMPEG += $(FATE_REAL)
fate-real: $(FATE_REAL)
......@@ -59,5 +59,5 @@ fate-zmbv-32bit: CMD = framecrc -i $(SAMPLES)/zmbv/zmbv_32bit.avi -pix_fmt rgb24
FATE_SCREEN += $(FATE_ZMBV)
fate-zmbv: $(FATE_ZMBV)
FATE_TESTS += $(FATE_SCREEN)
FATE_FFMPEG += $(FATE_SCREEN)
fate-screen: $(FATE_SCREEN)
......@@ -22,5 +22,5 @@ fate-utvideo_yuv422_left: CMD = framecrc -i $(SAMPLES)/utvideo/utvideo_yuv422_le
FATE_UTVIDEO += fate-utvideo_yuv422_median
fate-utvideo_yuv422_median: CMD = framecrc -i $(SAMPLES)/utvideo/utvideo_yuv422_median.avi
FATE_TESTS += $(FATE_UTVIDEO)
FATE_AVCONV += $(FATE_UTVIDEO)
fate-utvideo: $(FATE_UTVIDEO)
......@@ -133,6 +133,9 @@ fate-kgv1: CMD = framecrc -i $(SAMPLES)/kega/kgv1.avi -pix_fmt rgb555le -an
FATE_VIDEO += fate-kmvc
fate-kmvc: CMD = framecrc -i $(SAMPLES)/KMVC/LOGO1.AVI -an -t 3 -pix_fmt rgb24
FATE_VIDEO += fate-mdec
fate-mdec: CMD = framecrc -idct simple -i $(SAMPLES)/ea-dct/NFS2Esprit-partial.dct -an
FATE_VIDEO += fate-mimic
fate-mimic: CMD = framecrc -idct simple -i $(SAMPLES)/mimic/mimic2-womanloveffmpeg.cam
......@@ -145,6 +148,7 @@ fate-motionpixels: CMD = framecrc -i $(SAMPLES)/motion-pixels/INTRO-partial.MVI
FATE_VIDEO += fate-mpeg2-field-enc
fate-mpeg2-field-enc: CMD = framecrc -flags +bitexact -dct fastint -idct simple -i $(SAMPLES)/mpeg2/mpeg2_field_encoding.ts -an
# FIXME dropped frames in this test because of coarse timebase
FATE_VIDEO += fate-nuv
fate-nuv: CMD = framecrc -idct simple -i $(SAMPLES)/nuv/Today.nuv -an
......@@ -157,6 +161,9 @@ fate-r210: CMD = framecrc -i $(SAMPLES)/r210/r210.avi -pix_fmt rgb48le
FATE_VIDEO += fate-rl2
fate-rl2: CMD = framecrc -i $(SAMPLES)/rl2/Z4915300.RL2 -pix_fmt rgb24 -an
FATE_VIDEO += fate-roqvideo
fate-roqvideo: CMD = framecrc -i $(SAMPLES)/idroq/idlogo.roq -an
FATE_VIDEO += fate-smacker
fate-smacker: CMD = framecrc -i $(SAMPLES)/smacker/wetlogo.smk -pix_fmt rgb24
......@@ -169,6 +176,9 @@ fate-sp5x: CMD = framecrc -idct simple -i $(SAMPLES)/sp5x/sp5x_problem.avi
FATE_VIDEO += fate-sub-srt
fate-sub-srt: CMD = md5 -i $(SAMPLES)/sub/SubRip_capability_tester.srt -f ass
FATE_VIDEO += fate-thp
fate-thp: CMD = framecrc -idct simple -i $(SAMPLES)/thp/pikmin2-opening1-partial.thp -an
FATE_VIDEO += fate-tiertex-seq
fate-tiertex-seq: CMD = framecrc -i $(SAMPLES)/tiertex-seq/Gameover.seq -pix_fmt rgb24
......@@ -218,5 +228,5 @@ fate-yop: CMD = framecrc -i $(SAMPLES)/yop/test1.yop -pix_fmt rgb24 -an
FATE_VIDEO += fate-xxan-wc4
fate-xxan-wc4: CMD = framecrc -i $(SAMPLES)/wc4-xan/wc4trailer-partial.avi -an
FATE_TESTS += $(FATE_VIDEO)
FATE_FFMPEG += $(FATE_VIDEO)
fate-video: $(FATE_VIDEO)
......@@ -51,5 +51,5 @@ fate-truespeech: CMD = pcm -i $(SAMPLES)/truespeech/a6.wav
fate-truespeech: CMP = oneoff
fate-truespeech: REF = $(SAMPLES)/truespeech/a6.pcm
FATE_TESTS += $(FATE_VOICE)
FATE_FFMPEG += $(FATE_VOICE)
fate-voice: $(FATE_VOICE)
......@@ -75,6 +75,6 @@ FATE_VORBIS += fate-vorbis-19
fate-vorbis-19: CMD = pcm -i $(SAMPLES)/vorbis/test-short2_small.ogg
fate-vorbis-19: REF = $(SAMPLES)/vorbis/test-short2_small.pcm
FATE_TESTS += $(FATE_VORBIS)
FATE_AVCONV += $(FATE_VORBIS)
fate-vorbis: $(FATE_VORBIS)
$(FATE_VORBIS): CMP = oneoff
FATE_TESTS += fate-ea-vp60
FATE_EA_VP6 += fate-ea-vp60
fate-ea-vp60: CMD = framecrc -i $(SAMPLES)/ea-vp6/g36.vp6
FATE_TESTS += fate-ea-vp61
FATE_EA_VP6 += fate-ea-vp61
fate-ea-vp61: CMD = framecrc -i $(SAMPLES)/ea-vp6/MovieSkirmishGondor.vp6 -t 4
FATE_AVCONV += $(FATE_EA_VP6)
fate-ea-vp6: $(FATE_EA_VP6)
FATE_VP3 += fate-vp31
fate-vp31: CMD = framecrc -i $(SAMPLES)/vp3/vp31.avi
FATE_VP3 += fate-vp3-coeff-level64
fate-vp3-coeff-level64: CMD = framecrc -i $(SAMPLES)/vp3/coeff_level64.mkv
FATE_TESTS += $(FATE_VP3)
FATE_AVCONV += $(FATE_VP3)
fate-vp3: $(FATE_VP3)
FATE_TESTS += fate-vp5
FATE_AVCONV += fate-vp5
fate-vp5: CMD = framecrc -i $(SAMPLES)/vp5/potter512-400-partial.avi -an
FATE_TESTS += fate-vp6a
FATE_AVCONV += fate-vp6a
fate-vp6a: CMD = framecrc -i $(SAMPLES)/flash-vp6/300x180-Scr-f8-056alpha.flv
FATE_TESTS += fate-vp6f
FATE_AVCONV += fate-vp6f
fate-vp6f: CMD = framecrc -i $(SAMPLES)/flash-vp6/clip1024.flv
VP8_SUITE = 001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017
......@@ -46,5 +49,5 @@ endef
$(eval $(call FATE_VP8_FULL))
$(eval $(call FATE_VP8_FULL,-emu-edge,-flags +emu_edge))
FATE_TESTS += $(FATE_VP8)
FATE_AVCONV += $(FATE_VP8)
fate-vp8: $(FATE_VP8)
......@@ -6,5 +6,5 @@ fate-twinvq: REF = $(SAMPLES)/vqf/achterba.pcm
FATE_VQF += fate-vqf-demux
fate-vqf-demux: CMD = md5 -i $(SAMPLES)/vqf/achterba.vqf -acodec copy -f framecrc
FATE_TESTS += $(FATE_VQF)
FATE_FFMPEG += $(FATE_VQF)
fate-vqf: $(FATE_VQF)
# Lossless
# lossless
FATE_WAVPACK += fate-wavpack-lossless-float
fate-wavpack-lossless-float: CMD = md5 -i $(SAMPLES)/wavpack/lossless/32bit_float-partial.wv -f f32le
......@@ -18,7 +18,7 @@ fate-wavpack-lossless-24bit: CMD = md5 -i $(SAMPLES)/wavpack/lossless/24bit-part
FATE_WAVPACK += fate-wavpack-lossless-32bit
fate-wavpack-lossless-32bit: CMD = md5 -i $(SAMPLES)/wavpack/lossless/32bit_int-partial.wv -f s32le
# Lossy
# lossy
FATE_WAVPACK += fate-wavpack-lossy-float
fate-wavpack-lossy-float: CMD = md5 -i $(SAMPLES)/wavpack/lossy/2.0_32-bit_float.wv -f f32le
......@@ -35,7 +35,7 @@ fate-wavpack-lossy-24bit: CMD = md5 -i $(SAMPLES)/wavpack/lossy/4.0_24-bit.wv -f
FATE_WAVPACK += fate-wavpack-lossy-32bit
fate-wavpack-lossy-32bit: CMD = md5 -i $(SAMPLES)/wavpack/lossy/4.0_32-bit_int.wv -f s32le
# Channel configurations
# channel configurations
FATE_WAVPACK += fate-wavpack-channels-monofloat
fate-wavpack-channels-monofloat: CMD = md5 -i $(SAMPLES)/wavpack/num_channels/mono_float-partial.wv -f f32le
......@@ -55,7 +55,7 @@ fate-wavpack-channels-6.1: CMD = md5 -i $(SAMPLES)/wavpack/num_channels/eva_2.22
FATE_WAVPACK += fate-wavpack-channels-7.1
fate-wavpack-channels-7.1: CMD = md5 -i $(SAMPLES)/wavpack/num_channels/panslab_sample_7.1_16bit-partial.wv -f s16le
# Speed modes
# speed modes
FATE_WAVPACK += fate-wavpack-speed-default
fate-wavpack-speed-default: CMD = md5 -i $(SAMPLES)/wavpack/speed_modes/default-partial.wv -f s16le
......@@ -69,7 +69,7 @@ fate-wavpack-speed-high: CMD = md5 -i $(SAMPLES)/wavpack/speed_modes/high-partia
FATE_WAVPACK += fate-wavpack-speed-vhigh
fate-wavpack-speed-vhigh: CMD = md5 -i $(SAMPLES)/wavpack/speed_modes/vhigh-partial.wv -f s16le
# Special Cases
# special cases
FATE_WAVPACK += fate-wavpack-cuesheet
fate-wavpack-cuesheet: CMD = md5 -i $(SAMPLES)/wavpack/special/cue_sheet.wv -f s16le
......@@ -86,5 +86,5 @@ fate-wavpack-falsestereo: CMD = md5 -i $(SAMPLES)/wavpack/special/false_stereo.w
FATE_WAVPACK += fate-wavpack-matroskamode
fate-wavpack-matroskamode: CMD = md5 -i $(SAMPLES)/wavpack/special/matroska_mode.mka -f s16le
FATE_TESTS += $(FATE_WAVPACK)
FATE_AVCONV += $(FATE_WAVPACK)
fate-wavpack: $(FATE_WAVPACK)
......@@ -13,7 +13,7 @@ fate-wmapro-ism: CMD = pcm -i $(SAMPLES)/isom/vc1-wmapro.ism -vn
fate-wmapro-ism: CMP = oneoff
fate-wmapro-ism: REF = $(SAMPLES)/isom/vc1-wmapro.pcm
FATE_TESTS += $(FATE_WMAPRO)
FATE_AVCONV += $(FATE_WMAPRO)
fate-wmapro: $(FATE_WMAPRO)
FATE_WMAVOICE += fate-wmavoice-7k
......@@ -34,7 +34,7 @@ fate-wmavoice-19k: CMP = stddev
fate-wmavoice-19k: REF = $(SAMPLES)/wmavoice/streaming_CBR-19K.pcm
fate-wmavoice-19k: FUZZ = 3
FATE_TESTS += $(FATE_WMAVOICE)
FATE_AVCONV += $(FATE_WMAVOICE)
fate-wmavoice: $(FATE_WMAVOICE)
FATE_WMA_ENCODE += fate-wmav1-encode
......@@ -53,5 +53,5 @@ fate-wmav2-encode: CMP_SHIFT = -8192
fate-wmav2-encode: CMP_TARGET = 258.32
fate-wmav2-encode: SIZE_TOLERANCE = 4632
FATE_TESTS += $(FATE_WMA_ENCODE)
FATE_AVCONV += $(FATE_WMA_ENCODE)
fate-wma-encode: $(FATE_WMA_ENCODE)
#tb 0: 1/22050
0, 0, 0, 1484, 5936, 0x00000000
0, 1484, 1484, 1456, 5824, 0x00000000
0, 2940, 2940, 1484, 5936, 0x00000000
0, 4424, 4424, 1456, 5824, 0x00000000
0, 5880, 5880, 1484, 5936, 0x00000000
0, 7364, 7364, 1456, 5824, 0x00000000
0, 8820, 8820, 1484, 5936, 0x00000000
0, 10304, 10304, 1456, 5824, 0x0f06f5bb
0, 11760, 11760, 1484, 5936, 0xb0dbfc46
0, 13244, 13244, 1456, 5824, 0x9daa9f9c
0, 14700, 14700, 1484, 5936, 0x61400d2f
0, 16184, 16184, 1456, 5824, 0x34a5b0e3
0, 17640, 17640, 1484, 5936, 0x6e546f72
0, 19124, 19124, 1456, 5824, 0x4f093b35
0, 20580, 20580, 1484, 5936, 0x95b5b599
0, 22064, 22064, 1456, 5824, 0x75e15e60
0, 23520, 23520, 1484, 5936, 0xd1077d39
0, 25004, 25004, 1456, 5824, 0x956e21ca
0, 26460, 26460, 1484, 5936, 0x33bac234
0, 27944, 27944, 1456, 5824, 0x5df37824
0, 29400, 29400, 1484, 5936, 0xc174af24
0, 30884, 30884, 1456, 5824, 0xe5dc2159
0, 32340, 32340, 1484, 5936, 0x63ffc8b1
0, 33824, 33824, 1456, 5824, 0xefe4c365
0, 35280, 35280, 1484, 5936, 0x2174304d
#tb 0: 1/22050
0, 0, 0, 1484, 5936, 0xea261a29
0, 1484, 1484, 1456, 5824, 0x253df061
0, 2940, 2940, 1484, 5936, 0x603a5bd7
0, 4424, 4424, 1456, 5824, 0x9d283f59
0, 5880, 5880, 1484, 5936, 0x49323497
0, 7364, 7364, 1456, 5824, 0x7c299939
0, 8820, 8820, 1484, 5936, 0x9f918e9a
0, 10304, 10304, 1456, 5824, 0x1226b534
0, 11760, 11760, 1484, 5936, 0xdd159326
0, 13244, 13244, 1456, 5824, 0x361ad10f
0, 14700, 14700, 1484, 5936, 0x6ccac9e3
0, 16184, 16184, 1456, 5824, 0x1861efef
0, 17640, 17640, 1484, 5936, 0x5f718eb9
0, 19124, 19124, 1456, 5824, 0xd4ca72ba
0, 20580, 20580, 1484, 5936, 0xbf2b27e6
0, 22064, 22064, 1456, 5824, 0xcb6f024e
0, 23520, 23520, 1484, 5936, 0x7dfb7e05
0, 25004, 25004, 1456, 5824, 0x80e16f13
0, 26460, 26460, 1484, 5936, 0x0fb59227
0, 27944, 27944, 1456, 5824, 0x4d6f1fdb
0, 29400, 29400, 1484, 5936, 0x505a5103
0, 30884, 30884, 1456, 5824, 0x47ef4c13
0, 32340, 32340, 1484, 5936, 0xbe4795fb
0, 33824, 33824, 1456, 5824, 0xb82cc4ff
0, 35280, 35280, 1484, 5936, 0xf7c6ab8d
0, 36764, 36764, 1456, 5824, 0x1442f5e0
0, 38220, 38220, 1484, 5936, 0x64659389
0, 39704, 39704, 1456, 5824, 0xdd81725c
0, 41160, 41160, 1484, 5936, 0x7f7c604f
0, 42644, 42644, 1456, 5824, 0xafc77beb
0, 44100, 44100, 1484, 5936, 0x24f88e4d
0, 45584, 45584, 1456, 5824, 0xa31956ca
0, 47040, 47040, 1484, 5936, 0x958e02b9
0, 48524, 48524, 1456, 5824, 0xcfc79890
0, 49980, 49980, 1484, 5936, 0xc7e788ae
0, 51464, 51464, 1456, 5824, 0x4b6b1acc
0, 52920, 52920, 1484, 5936, 0xa74496dc
0, 54404, 54404, 1456, 5824, 0x719e6171
0, 55860, 55860, 1484, 5936, 0x9346222d
0, 57344, 57344, 1456, 5824, 0x9e2a876e
0, 58800, 58800, 1484, 5936, 0xeca6ea64
0, 60284, 60284, 1456, 5824, 0x07d8174f
0, 61740, 61740, 1484, 5936, 0x2df5aa6b
0, 63224, 63224, 1456, 5824, 0x314e7034
0, 64680, 64680, 1484, 5936, 0x5a328768
0, 66164, 66164, 1456, 5824, 0x32b92446
0, 67620, 67620, 1484, 5936, 0x20ecbc9b
0, 69104, 69104, 1456, 5824, 0x76019c14
0, 70560, 70560, 1484, 5936, 0x8c3ef8a6
0, 72044, 72044, 1456, 5824, 0xcdaab50b
0, 73500, 73500, 1484, 5936, 0xb2f87f4f
0, 74984, 74984, 1456, 5824, 0x70c26379
0, 76440, 76440, 1484, 5936, 0x5691ecfd
0, 77924, 77924, 1456, 5824, 0x61e208fe
0, 79380, 79380, 1484, 5936, 0x87d1a5e0
0, 80864, 80864, 1456, 5824, 0x02054cfd
0, 82320, 82320, 1484, 5936, 0x22ff1c4b
0, 83804, 83804, 1456, 5824, 0xc6d87fef
0, 85260, 85260, 1484, 5936, 0x9028bb3b
0, 86744, 86744, 1456, 5824, 0xbadde406
0, 88200, 88200, 1484, 5936, 0x6e88ddf1
0, 89684, 89684, 1456, 5824, 0x5bb8be6e
0, 91140, 91140, 1484, 5936, 0xe1f8d7fc
0, 92624, 92624, 1456, 5824, 0xc824e388
0, 94080, 94080, 1484, 5936, 0x654371a9
0, 95564, 95564, 1456, 5824, 0xae6ee9ec
0, 97020, 97020, 1484, 5936, 0x9aa4550d
0, 98504, 98504, 1456, 5824, 0xdce210ac
0, 99960, 99960, 1484, 5936, 0xb12641c8
0, 101444, 101444, 1456, 5824, 0x277e014b
0, 102900, 102900, 1484, 5936, 0xb0d262de
0, 104384, 104384, 1456, 5824, 0xf94d6f49
0, 105840, 105840, 1484, 5936, 0x3d7848cb
0, 107324, 107324, 1456, 5824, 0xe67fc08e
0, 108780, 108780, 1484, 5936, 0x0475e0d6
0, 110264, 110264, 1456, 5824, 0x8a9a4a2e
0, 111720, 111720, 1484, 5936, 0x82576204
0, 113204, 113204, 1456, 5824, 0x3017b648
0, 114660, 114660, 1484, 5936, 0xca4c3e04
0, 116144, 116144, 1456, 5824, 0x340077d1
0, 117600, 117600, 1484, 5936, 0x805bea6e
0, 119084, 119084, 1456, 5824, 0x2cf6c87b
0, 120540, 120540, 1484, 5936, 0x3635bc5f
0, 122024, 122024, 1456, 5824, 0x0d7a81c7
0, 123480, 123480, 1484, 5936, 0x26179764
0, 124964, 124964, 1456, 5824, 0xa0b2454f
0, 126420, 126420, 1484, 5936, 0x91d24608
0, 127904, 127904, 1456, 5824, 0x6509b3e1
0, 129360, 129360, 1484, 5936, 0xa0e3c9fc
0, 130844, 130844, 1456, 5824, 0x18682a2f
0, 132300, 132300, 1484, 5936, 0x89cea4ff
0, 133784, 133784, 1456, 5824, 0x7dd22b85
0, 135240, 135240, 1484, 5936, 0x8b2eeb8d
0, 136724, 136724, 1456, 5824, 0x0c21af82
0, 138180, 138180, 1484, 5936, 0x9c5a748d
0, 139664, 139664, 1456, 5824, 0x1dc72c5c
0, 141120, 141120, 1484, 5936, 0xe6129383
0, 142604, 142604, 1456, 5824, 0x0a44312a
0, 144060, 144060, 1484, 5936, 0x7ed30640
0, 145544, 145544, 1456, 5824, 0xede15f25
0, 147000, 147000, 1484, 5936, 0x0096d0f3
0, 148484, 148484, 1456, 5824, 0x13764b4b
0, 149940, 149940, 1484, 5936, 0xd4608756
0, 151424, 151424, 1456, 5824, 0x254b5f2a
0, 152880, 152880, 1484, 5936, 0x7705b830
0, 154364, 154364, 1456, 5824, 0x64a63d78
0, 155820, 155820, 1484, 5936, 0xc02d81a6
0, 157304, 157304, 1456, 5824, 0xd239e55e
0, 158760, 158760, 1484, 5936, 0x8018cd3a
0, 160244, 160244, 1456, 5824, 0xf86b8a98
0, 161700, 161700, 1484, 5936, 0x2a0078bc
0, 163184, 163184, 1456, 5824, 0x058d4e1b
0, 164640, 164640, 1484, 5936, 0xbc718309
0, 166124, 166124, 1456, 5824, 0xaf6c29e5
0, 167580, 167580, 1484, 5936, 0x80df004d
0, 169064, 169064, 1456, 5824, 0xeca5aa57
0, 170520, 170520, 1484, 5936, 0xb793a8f8
0, 172004, 172004, 1456, 5824, 0x70fa6aff
0, 173460, 173460, 1484, 5936, 0xda8d4cc6
0, 174944, 174944, 1456, 5824, 0xa70088eb
0, 176400, 176400, 1484, 5936, 0x1c0b0aab
0, 177884, 177884, 1456, 5824, 0x234d2436
0, 179340, 179340, 1484, 5936, 0xf79d731e
0, 180824, 180824, 1456, 5824, 0x5a4e454a
0, 182280, 182280, 1484, 5936, 0xccf6d042
0, 183764, 183764, 1456, 5824, 0x4e524d14
0, 185220, 185220, 1484, 5936, 0xf8f2fcc3
0, 186704, 186704, 1456, 5824, 0x08f12491
0, 188160, 188160, 1484, 5936, 0x506e0a42
0, 189644, 189644, 1456, 5824, 0x7cf05049
0, 191100, 191100, 1484, 5936, 0xdeb9d295
0, 192584, 192584, 1456, 5824, 0x758ef642
0, 194040, 194040, 1484, 5936, 0x91903980
#tb 0: 1/48000
0, 0, 0, 1624, 6496, 0x00000000
0, 1624, 1624, 1596, 6384, 0x00000000
0, 3220, 3220, 1596, 6384, 0x00000000
0, 4816, 4816, 1596, 6384, 0x00000000
0, 6412, 6412, 1596, 6384, 0x00000000
0, 8008, 8008, 1624, 6496, 0xe2034d04
0, 9632, 9632, 1596, 6384, 0x089c9157
0, 11228, 11228, 1596, 6384, 0xeed5743c
0, 12824, 12824, 1596, 6384, 0x71de6b34
0, 14420, 14420, 1596, 6384, 0xc0d67710
0, 16016, 16016, 1624, 6496, 0x35786490
0, 17640, 17640, 1596, 6384, 0xdf1c99a2
0, 19236, 19236, 1596, 6384, 0xca9591ad
0, 20832, 20832, 1596, 6384, 0x6f0d9c3d
0, 22428, 22428, 1596, 6384, 0xfacbbaee
0, 24024, 24024, 1624, 6496, 0x927fb136
0, 25648, 25648, 1596, 6384, 0x9d4f2572
0, 27244, 27244, 1596, 6384, 0x2a3c6d08
0, 28840, 28840, 1596, 6384, 0x4282b1e0
0, 30436, 30436, 1596, 6384, 0xc4a77b9f
0, 32032, 32032, 1624, 6496, 0x2af6a14f
0, 33656, 33656, 1596, 6384, 0x4d734169
0, 35252, 35252, 1596, 6384, 0xb91b5865
0, 36848, 36848, 1596, 6384, 0x9dce2417
0, 38444, 38444, 1596, 6384, 0xb7c4e1ce
0, 40040, 40040, 1624, 6496, 0xef0dc07a
0, 41664, 41664, 1596, 6384, 0x4ad21d10
0, 43260, 43260, 1596, 6384, 0xcfe14682
0, 44856, 44856, 1596, 6384, 0x07be48eb
0, 46452, 46452, 1596, 6384, 0x09de3498
0, 48048, 48048, 1624, 6496, 0xab2e9686
0, 49672, 49672, 1596, 6384, 0x3aba3ccc
0, 51268, 51268, 1596, 6384, 0x0a905ec3
0, 52864, 52864, 1596, 6384, 0x76a93ce4
0, 54460, 54460, 1596, 6384, 0xa99063a4
0, 56056, 56056, 1624, 6496, 0xc16bb88d
0, 57680, 57680, 1596, 6384, 0x650379bf
0, 59276, 59276, 1596, 6384, 0x4e0749fe
0, 60872, 60872, 1596, 6384, 0x778e8d12
0, 62468, 62468, 1596, 6384, 0x9fa8c494
0, 64064, 64064, 1624, 6496, 0x61d5bead
0, 65688, 65688, 1596, 6384, 0x4da9bc3c
0, 67284, 67284, 1596, 6384, 0xa72b6f93
0, 68880, 68880, 1596, 6384, 0x811f5f77
0, 70476, 70476, 1596, 6384, 0x83ea5e3d
0, 72072, 72072, 1624, 6496, 0x78bab460
0, 73696, 73696, 1596, 6384, 0xc9a07432
0, 75292, 75292, 1596, 6384, 0x4b4f2a34
0, 76888, 76888, 1596, 6384, 0x4d707a53
0, 78484, 78484, 1596, 6384, 0x703efb60
0, 80080, 80080, 1624, 6496, 0x319a77bb
0, 81704, 81704, 1596, 6384, 0xbdfd82ec
0, 83300, 83300, 1596, 6384, 0x413c3503
0, 84896, 84896, 1596, 6384, 0xe6e666b3
0, 86492, 86492, 1596, 6384, 0xa09c7342
0, 88088, 88088, 1624, 6496, 0x60cba846
0, 89712, 89712, 1596, 6384, 0x0ba34308
0, 91308, 91308, 1596, 6384, 0xdc3a65f0
0, 92904, 92904, 1596, 6384, 0x1ebf9dc4
0, 94500, 94500, 1596, 6384, 0xbbcb1449
0, 96096, 96096, 1624, 6496, 0x926574eb
0, 97720, 97720, 1596, 6384, 0xb4da92f1
0, 99316, 99316, 1596, 6384, 0xdbbd21e0
0, 100912, 100912, 1596, 6384, 0x08510eff
0, 102508, 102508, 1596, 6384, 0x9534b7ca
0, 104104, 104104, 1624, 6496, 0x50a5ed30
0, 105728, 105728, 1596, 6384, 0xf5ac2f7c
0, 107324, 107324, 1596, 6384, 0x4fe1fa55
0, 108920, 108920, 1596, 6384, 0xd61c4c05
0, 110516, 110516, 1596, 6384, 0x56d11b45
0, 112112, 112112, 1624, 6496, 0x3906084b
0, 113736, 113736, 1596, 6384, 0x1ef31fed
0, 115332, 115332, 1596, 6384, 0x58ed82f5
0, 116928, 116928, 1596, 6384, 0xb31ccd1f
0, 118524, 118524, 1596, 6384, 0xfb648285
0, 120120, 120120, 1624, 6496, 0xfae2950b
0, 121744, 121744, 1596, 6384, 0xe28c8357
0, 123340, 123340, 1596, 6384, 0xda718e60
0, 124936, 124936, 1596, 6384, 0x27516999
0, 126532, 126532, 1596, 6384, 0x0ba07921
0, 128128, 128128, 1624, 6496, 0xcfbecfab
0, 129752, 129752, 1596, 6384, 0xae4cedcd
0, 131348, 131348, 1596, 6384, 0x917b4707
0, 132944, 132944, 1596, 6384, 0x8671b28e
0, 134540, 134540, 1596, 6384, 0x9a1238fa
0, 136136, 136136, 1624, 6496, 0x23b8f8ca
0, 137760, 137760, 1596, 6384, 0x3903bcd6
0, 139356, 139356, 1596, 6384, 0x0532b267
0, 140952, 140952, 1596, 6384, 0xde931220
0, 142548, 142548, 1596, 6384, 0x4ed70a80
0, 144144, 144144, 1624, 6496, 0x4a52d5a1
0, 145768, 145768, 1596, 6384, 0xc1be5760
0, 147364, 147364, 1596, 6384, 0x790d69ba
0, 148960, 148960, 1596, 6384, 0x9d73e6cf
0, 150556, 150556, 1568, 6272, 0xbc0fc725
#tb 0: 1/22050
0, 0, 0, 1468, 5872, 0x00000000
0, 1468, 1468, 1468, 5872, 0x00000000
0, 2936, 2936, 1468, 5872, 0x00000000
0, 4404, 4404, 1468, 5872, 0x00000000
0, 5872, 5872, 1468, 5872, 0x00000000
0, 7340, 7340, 1468, 5872, 0x00000000
0, 8808, 8808, 1468, 5872, 0x00000000
0, 10276, 10276, 1468, 5872, 0x00000000
0, 11744, 11744, 1468, 5872, 0x00000000
0, 13212, 13212, 1468, 5872, 0x00000000
0, 14680, 14680, 1468, 5872, 0x00000000
0, 16148, 16148, 1468, 5872, 0x00000000
0, 17616, 17616, 1468, 5872, 0x00000000
0, 19084, 19084, 1468, 5872, 0x00000000
0, 20552, 20552, 1468, 5872, 0x00000000
0, 22020, 22020, 1468, 5872, 0xc6f64777
0, 23488, 23488, 1468, 5872, 0x7c9e60e8
0, 24956, 24956, 1468, 5872, 0x46525c54
0, 26424, 26424, 1468, 5872, 0x842796bb
0, 27892, 27892, 1468, 5872, 0xb1f6cbd5
0, 29360, 29360, 1468, 5872, 0x0261a74b
0, 30828, 30828, 1468, 5872, 0x8218b1f9
0, 32296, 32296, 1468, 5872, 0xd7a2cae6
0, 33764, 33764, 1468, 5872, 0x69d34562
0, 35232, 35232, 1468, 5872, 0x9303ec65
0, 36700, 36700, 1468, 5872, 0xd5d963a1
0, 38168, 38168, 1468, 5872, 0x0557e06f
0, 39636, 39636, 1468, 5872, 0x1eb48b41
0, 41104, 41104, 1468, 5872, 0x70f5ca3f
0, 42572, 42572, 1468, 5872, 0xd39e5c5e
0, 44040, 44040, 1468, 5872, 0x29c59140
0, 45508, 45508, 1468, 5872, 0x7d95e643
0, 46976, 46976, 1468, 5872, 0x45353fd8
0, 48444, 48444, 1468, 5872, 0xad7b1b27
0, 49912, 49912, 1468, 5872, 0x1f0377b3
0, 51380, 51380, 1468, 5872, 0x6074541e
0, 52848, 52848, 1468, 5872, 0xa4f5e892
0, 54316, 54316, 1468, 5872, 0x084bc696
0, 55784, 55784, 1468, 5872, 0x67fdafce
0, 57252, 57252, 1468, 5872, 0x8dfd249d
0, 58720, 58720, 1468, 5872, 0x514184ee
0, 60188, 60188, 1468, 5872, 0xc0090b0d
0, 61656, 61656, 1468, 5872, 0xc1171cc8
0, 63124, 63124, 1468, 5872, 0x7d7dd07e
0, 64592, 64592, 1468, 5872, 0xe6aa619c
0, 66060, 66060, 1468, 5872, 0xd5aac0df
0, 67528, 67528, 1468, 5872, 0x3b68b390
#tb 0: 1/22050
0, 0, 0, 736, 2944, 0x00000000
0, 736, 736, 1472, 5888, 0x5ae3c2a4
0, 2208, 2208, 1472, 5888, 0x158fbcb4
0, 3680, 3680, 1472, 5888, 0x3fc85d35
0, 5152, 5152, 1472, 5888, 0x4667ec2b
0, 6624, 6624, 1472, 5888, 0x82744494
0, 8096, 8096, 1472, 5888, 0x3b0cb86f
0, 9568, 9568, 1472, 5888, 0x29493fbb
0, 11040, 11040, 1472, 5888, 0xaa2d8595
0, 12512, 12512, 1472, 5888, 0x2e563de6
0, 13984, 13984, 1472, 5888, 0x225cca99
0, 15456, 15456, 1472, 5888, 0x2b577599
0, 16928, 16928, 1472, 5888, 0x3d967f32
0, 18400, 18400, 1472, 5888, 0x16639a84
0, 19872, 19872, 1472, 5888, 0x90549ba0
0, 21344, 21344, 1472, 5888, 0xf46e6644
0, 22816, 22816, 1472, 5888, 0x39a073ec
0, 24288, 24288, 1472, 5888, 0xb1d7a93a
0, 25760, 25760, 1472, 5888, 0x25e9795b
0, 27232, 27232, 1472, 5888, 0xbbc07644
0, 28704, 28704, 1472, 5888, 0x323f6a1b
0, 30176, 30176, 1472, 5888, 0x7cae130b
0, 31648, 31648, 1472, 5888, 0xd23bf9c6
0, 33120, 33120, 1472, 5888, 0x5f73ef35
0, 34592, 34592, 1472, 5888, 0xc66026be
0, 36064, 36064, 1472, 5888, 0xc8fdb539
0, 37536, 37536, 1472, 5888, 0x94c6bfbd
0, 39008, 39008, 1472, 5888, 0xb77e1b83
0, 40480, 40480, 1472, 5888, 0x6c6d6693
0, 41952, 41952, 1472, 5888, 0xd9f064d4
0, 43424, 43424, 1472, 5888, 0x85dd990d
0, 44896, 44896, 1472, 5888, 0x385e021b
0, 46368, 46368, 1472, 5888, 0xac09fd02
0, 47840, 47840, 1472, 5888, 0xc6dcdff2
0, 49312, 49312, 1472, 5888, 0x86a6944d
0, 50784, 50784, 1472, 5888, 0x8587b964
0, 52256, 52256, 1472, 5888, 0x2b0355ff
0, 53728, 53728, 1472, 5888, 0xe4148a85
0, 55200, 55200, 1472, 5888, 0xdf02ed4f
0, 56672, 56672, 1472, 5888, 0x87a54b15
0, 58144, 58144, 1472, 5888, 0x3ad2be45
0, 59616, 59616, 1472, 5888, 0x3a49c2c3
0, 61088, 61088, 1472, 5888, 0xc2b66404
0, 62560, 62560, 1472, 5888, 0xac3e234a
0, 64032, 64032, 1472, 5888, 0x5dcf523b
0, 65504, 65504, 1472, 5888, 0x2034b5d6
0, 66976, 66976, 1472, 5888, 0x96882832
0, 68448, 68448, 1472, 5888, 0x2be3d534
0, 69920, 69920, 1472, 5888, 0xa841a49d
This diff is collapsed.
This diff is collapsed.
#tb 0: 1/15
#tb 1: 1/22050
0, 0, 0, 1, 230400, 0xfbf2581e
1, 0, 0, 1468, 5872, 0x00000000
1, 1468, 1468, 1468, 5872, 0x00000000
0, 1, 1, 1, 230400, 0xfbf2581e
1, 2936, 2936, 1468, 5872, 0x00000000
0, 2, 2, 1, 230400, 0xfbf2581e
1, 4404, 4404, 1468, 5872, 0x00000000
0, 3, 3, 1, 230400, 0xfbf2581e
1, 5872, 5872, 1468, 5872, 0x00000000
0, 4, 4, 1, 230400, 0xfbf2581e
1, 7340, 7340, 1468, 5872, 0x00000000
0, 5, 5, 1, 230400, 0xfbf2581e
1, 8808, 8808, 1468, 5872, 0x00000000
0, 6, 6, 1, 230400, 0xfbf2581e
1, 10276, 10276, 1468, 5872, 0x00000000
0, 7, 7, 1, 230400, 0xfbf2581e
1, 11744, 11744, 1468, 5872, 0x00000000
0, 8, 8, 1, 230400, 0xfbf2581e
1, 13212, 13212, 1468, 5872, 0x00000000
0, 9, 9, 1, 230400, 0xfbf2581e
1, 14680, 14680, 1468, 5872, 0x00000000
0, 10, 10, 1, 230400, 0xfbf2581e
1, 16148, 16148, 1468, 5872, 0x00000000
0, 11, 11, 1, 230400, 0xfbf2581e
1, 17616, 17616, 1468, 5872, 0x00000000
0, 12, 12, 1, 230400, 0xfbf2581e
1, 19084, 19084, 1468, 5872, 0x00000000
0, 13, 13, 1, 230400, 0xfbf2581e
1, 20552, 20552, 1468, 5872, 0x00000000
0, 14, 14, 1, 230400, 0xfbf2581e
1, 22020, 22020, 1468, 5872, 0xc6f64777
0, 15, 15, 1, 230400, 0xf5a0a21d
1, 23488, 23488, 1468, 5872, 0x7c9e60e8
0, 16, 16, 1, 230400, 0x909cc039
1, 24956, 24956, 1468, 5872, 0x46525c54
0, 17, 17, 1, 230400, 0x14d899dd
1, 26424, 26424, 1468, 5872, 0x842796bb
0, 18, 18, 1, 230400, 0x0d246edf
1, 27892, 27892, 1468, 5872, 0xb1f6cbd5
0, 19, 19, 1, 230400, 0x5345fe0d
1, 29360, 29360, 1468, 5872, 0x0261a74b
0, 20, 20, 1, 230400, 0x5abdff9a
1, 30828, 30828, 1468, 5872, 0x8218b1f9
0, 21, 21, 1, 230400, 0x1730d973
1, 32296, 32296, 1468, 5872, 0xd7a2cae6
0, 22, 22, 1, 230400, 0xec881be9
1, 33764, 33764, 1468, 5872, 0x69d34562
0, 23, 23, 1, 230400, 0xf4216895
1, 35232, 35232, 1468, 5872, 0x9303ec65
0, 24, 24, 1, 230400, 0x529d7a52
1, 36700, 36700, 1468, 5872, 0xd5d963a1
0, 25, 25, 1, 230400, 0x93b4c7b9
1, 38168, 38168, 1468, 5872, 0x0557e06f
0, 26, 26, 1, 230400, 0xedc65bcd
1, 39636, 39636, 1468, 5872, 0x1eb48b41
0, 27, 27, 1, 230400, 0xf0fb54ae
1, 41104, 41104, 1468, 5872, 0x70f5ca3f
0, 28, 28, 1, 230400, 0x27864ce9
1, 42572, 42572, 1468, 5872, 0xd39e5c5e
0, 29, 29, 1, 230400, 0xcd05012d
1, 44040, 44040, 1468, 5872, 0x29c59140
0, 30, 30, 1, 230400, 0x019b6d84
1, 45508, 45508, 1468, 5872, 0x7d95e643
0, 31, 31, 1, 230400, 0xcc05d416
1, 46976, 46976, 1468, 5872, 0x45353fd8
0, 32, 32, 1, 230400, 0xb04c0248
1, 48444, 48444, 1468, 5872, 0xad7b1b27
0, 33, 33, 1, 230400, 0x6806eb92
1, 49912, 49912, 1468, 5872, 0x1f0377b3
0, 34, 34, 1, 230400, 0x60e9c001
1, 51380, 51380, 1468, 5872, 0x6074541e
0, 35, 35, 1, 230400, 0x9b040261
1, 52848, 52848, 1468, 5872, 0xa4f5e892
0, 36, 36, 1, 230400, 0x6961fb90
1, 54316, 54316, 1468, 5872, 0x084bc696
0, 37, 37, 1, 230400, 0xbf67ad24
1, 55784, 55784, 1468, 5872, 0x67fdafce
0, 38, 38, 1, 230400, 0x2270f328
1, 57252, 57252, 1468, 5872, 0x8dfd249d
0, 39, 39, 1, 230400, 0xd0c345f6
1, 58720, 58720, 1468, 5872, 0x514184ee
0, 40, 40, 1, 230400, 0xfd159212
1, 60188, 60188, 1468, 5872, 0xc0090b0d
0, 41, 41, 1, 230400, 0x085578ff
1, 61656, 61656, 1468, 5872, 0xc1171cc8
0, 42, 42, 1, 230400, 0xcca8afa6
1, 63124, 63124, 1468, 5872, 0x7d7dd07e
0, 43, 43, 1, 230400, 0x901ec91c
1, 64592, 64592, 1468, 5872, 0xe6aa619c
0, 44, 44, 1, 230400, 0xf1cb99f3
1, 66060, 66060, 1468, 5872, 0xd5aac0df
0, 45, 45, 1, 230400, 0x86d98f0c
1, 67528, 67528, 1468, 5872, 0x3b68b390
0, 46, 46, 1, 230400, 0x52970700
#tb 0: 1/15
#tb 1: 1/22050
0, 0, 0, 1, 192000, 0xdfc2f225
1, 0, 0, 736, 2944, 0x00000000
1, 736, 736, 1472, 5888, 0x5ae3c2a4
0, 1, 1, 1, 192000, 0x059b57bd
1, 2208, 2208, 1472, 5888, 0x158fbcb4
0, 2, 2, 1, 192000, 0x766cb086
1, 3680, 3680, 1472, 5888, 0x3fc85d35
0, 3, 3, 1, 192000, 0x459e3bac
1, 5152, 5152, 1472, 5888, 0x4667ec2b
0, 4, 4, 1, 192000, 0x5293e622
1, 6624, 6624, 1472, 5888, 0x82744494
0, 5, 5, 1, 192000, 0x898b03f4
1, 8096, 8096, 1472, 5888, 0x3b0cb86f
0, 6, 6, 1, 192000, 0xb184a627
1, 9568, 9568, 1472, 5888, 0x29493fbb
0, 7, 7, 1, 192000, 0xa3fc650a
1, 11040, 11040, 1472, 5888, 0xaa2d8595
0, 8, 8, 1, 192000, 0xea448589
1, 12512, 12512, 1472, 5888, 0x2e563de6
0, 9, 9, 1, 192000, 0x700e2b76
1, 13984, 13984, 1472, 5888, 0x225cca99
0, 10, 10, 1, 192000, 0xa1a1d66d
1, 15456, 15456, 1472, 5888, 0x2b577599
0, 11, 11, 1, 192000, 0xd63bc8a1
1, 16928, 16928, 1472, 5888, 0x3d967f32
0, 12, 12, 1, 192000, 0x5f08c023
1, 18400, 18400, 1472, 5888, 0x16639a84
0, 13, 13, 1, 192000, 0x8b75ec3b
1, 19872, 19872, 1472, 5888, 0x90549ba0
0, 14, 14, 1, 192000, 0x62728ce4
1, 21344, 21344, 1472, 5888, 0xf46e6644
0, 15, 15, 1, 192000, 0xaa007941
1, 22816, 22816, 1472, 5888, 0x39a073ec
0, 16, 16, 1, 192000, 0x55dc5b3b
1, 24288, 24288, 1472, 5888, 0xb1d7a93a
0, 17, 17, 1, 192000, 0x72d836c2
1, 25760, 25760, 1472, 5888, 0x25e9795b
0, 18, 18, 1, 192000, 0x1f2de2fc
1, 27232, 27232, 1472, 5888, 0xbbc07644
0, 19, 19, 1, 192000, 0xb295dfdb
1, 28704, 28704, 1472, 5888, 0x323f6a1b
0, 20, 20, 1, 192000, 0xe5c5f634
1, 30176, 30176, 1472, 5888, 0x7cae130b
0, 21, 21, 1, 192000, 0x455a0464
1, 31648, 31648, 1472, 5888, 0xd23bf9c6
0, 22, 22, 1, 192000, 0x3bf2340d
1, 33120, 33120, 1472, 5888, 0x5f73ef35
0, 23, 23, 1, 192000, 0xe368f0fc
1, 34592, 34592, 1472, 5888, 0xc66026be
0, 24, 24, 1, 192000, 0xfa7549c0
1, 36064, 36064, 1472, 5888, 0xc8fdb539
0, 25, 25, 1, 192000, 0x4dd76f3d
1, 37536, 37536, 1472, 5888, 0x94c6bfbd
0, 26, 26, 1, 192000, 0x50a49f6c
1, 39008, 39008, 1472, 5888, 0xb77e1b83
0, 27, 27, 1, 192000, 0xb6072f65
1, 40480, 40480, 1472, 5888, 0x6c6d6693
0, 28, 28, 1, 192000, 0x093ce1a8
1, 41952, 41952, 1472, 5888, 0xd9f064d4
0, 29, 29, 1, 192000, 0x55afe3db
1, 43424, 43424, 1472, 5888, 0x85dd990d
0, 30, 30, 1, 192000, 0x81c3bfab
1, 44896, 44896, 1472, 5888, 0x385e021b
0, 31, 31, 1, 192000, 0x583ebd3d
1, 46368, 46368, 1472, 5888, 0xac09fd02
0, 32, 32, 1, 192000, 0x2504f003
1, 47840, 47840, 1472, 5888, 0xc6dcdff2
0, 33, 33, 1, 192000, 0x44ade2af
1, 49312, 49312, 1472, 5888, 0x86a6944d
0, 34, 34, 1, 192000, 0x77cbcfd8
1, 50784, 50784, 1472, 5888, 0x8587b964
0, 35, 35, 1, 192000, 0xac7ddfa1
1, 52256, 52256, 1472, 5888, 0x2b0355ff
0, 36, 36, 1, 192000, 0x79f7cfe8
1, 53728, 53728, 1472, 5888, 0xe4148a85
0, 37, 37, 1, 192000, 0xdf2898fd
1, 55200, 55200, 1472, 5888, 0xdf02ed4f
1, 56672, 56672, 1472, 5888, 0x87a54b15
1, 58144, 58144, 1472, 5888, 0x3ad2be45
1, 59616, 59616, 1472, 5888, 0x3a49c2c3
1, 61088, 61088, 1472, 5888, 0xc2b66404
1, 62560, 62560, 1472, 5888, 0xac3e234a
1, 64032, 64032, 1472, 5888, 0x5dcf523b
1, 65504, 65504, 1472, 5888, 0x2034b5d6
1, 66976, 66976, 1472, 5888, 0x96882832
1, 68448, 68448, 1472, 5888, 0x2be3d534
1, 69920, 69920, 1472, 5888, 0xa841a49d
#tb 0: 1/15
#tb 1: 1/22050
0, 0, 0, 1, 115200, 0x375ec573
1, 0, 0, 1484, 5936, 0x00000000
0, 1, 1, 1, 115200, 0x375ec573
1, 1484, 1484, 1456, 5824, 0x00000000
0, 2, 2, 1, 115200, 0x375ec573
1, 2940, 2940, 1484, 5936, 0x00000000
0, 3, 3, 1, 115200, 0x375ec573
1, 4424, 4424, 1456, 5824, 0x00000000
0, 4, 4, 1, 115200, 0x375ec573
1, 5880, 5880, 1484, 5936, 0x00000000
0, 5, 5, 1, 115200, 0x375ec573
1, 7364, 7364, 1456, 5824, 0x00000000
0, 6, 6, 1, 115200, 0x375ec573
1, 8820, 8820, 1484, 5936, 0x00000000
0, 7, 7, 1, 115200, 0x375ec573
1, 10304, 10304, 1456, 5824, 0x0f06f5bb
0, 8, 8, 1, 115200, 0x0b4d31bf
1, 11760, 11760, 1484, 5936, 0xb0dbfc46
0, 9, 9, 1, 115200, 0xdd724598
1, 13244, 13244, 1456, 5824, 0x9daa9f9c
0, 10, 10, 1, 115200, 0xc3077e75
1, 14700, 14700, 1484, 5936, 0x61400d2f
0, 11, 11, 1, 115200, 0xbf70778a
1, 16184, 16184, 1456, 5824, 0x34a5b0e3
0, 12, 12, 1, 115200, 0x117eb766
1, 17640, 17640, 1484, 5936, 0x6e546f72
0, 13, 13, 1, 115200, 0x4617fbad
1, 19124, 19124, 1456, 5824, 0x4f093b35
0, 14, 14, 1, 115200, 0x5f5b02d2
1, 20580, 20580, 1484, 5936, 0x95b5b599
0, 15, 15, 1, 115200, 0x2a9c5325
1, 22064, 22064, 1456, 5824, 0x75e15e60
0, 16, 16, 1, 115200, 0x14a89e2a
1, 23520, 23520, 1484, 5936, 0xd1077d39
0, 17, 17, 1, 115200, 0xe69aa994
1, 25004, 25004, 1456, 5824, 0x956e21ca
0, 18, 18, 1, 115200, 0xfbacf589
1, 26460, 26460, 1484, 5936, 0x33bac234
0, 19, 19, 1, 115200, 0x1d714c6e
1, 27944, 27944, 1456, 5824, 0x5df37824
0, 20, 20, 1, 115200, 0x6eff66cb
1, 29400, 29400, 1484, 5936, 0xc174af24
0, 21, 21, 1, 115200, 0xee21c1cb
1, 30884, 30884, 1456, 5824, 0xe5dc2159
0, 22, 22, 1, 115200, 0xce714ada
1, 32340, 32340, 1484, 5936, 0x63ffc8b1
0, 23, 23, 1, 115200, 0xf89d56c3
1, 33824, 33824, 1456, 5824, 0xefe4c365
0, 24, 24, 1, 115200, 0x65fd5e60
0, 25, 25, 1, 115200, 0x0c256424
This diff is collapsed.
#tb 0: 524288/15712911
0, 0, 0, 1, 291840, 0xbd7e0b22
0, 1, 1, 1, 291840, 0xf6e12ca5
0, 2, 2, 1, 291840, 0x528c7049
0, 3, 3, 1, 291840, 0x93055de9
0, 4, 4, 1, 291840, 0xf95a51c1
0, 5, 5, 1, 291840, 0x6ad3a65a
0, 6, 6, 1, 291840, 0x494684a7
0, 7, 7, 1, 291840, 0x74c14eb1
0, 8, 8, 1, 291840, 0x149fcb7e
0, 9, 9, 1, 291840, 0x25649761
0, 10, 10, 1, 291840, 0xbc3f9052
0, 11, 11, 1, 291840, 0x080edfff
0, 12, 12, 1, 291840, 0x6d7ad684
0, 13, 13, 1, 291840, 0x6d53844d
0, 14, 14, 1, 291840, 0xf7ad5385
0, 15, 15, 1, 291840, 0x0241b56a
0, 16, 16, 1, 291840, 0x120122c8
0, 17, 17, 1, 291840, 0x31b0f32a
0, 18, 18, 1, 291840, 0x14068b98
0, 19, 19, 1, 291840, 0xeeec658b
0, 20, 20, 1, 291840, 0x9376374c
0, 21, 21, 1, 291840, 0x091e8c6e
0, 22, 22, 1, 291840, 0x744ad07f
0, 23, 23, 1, 291840, 0xf99c554e
0, 24, 24, 1, 291840, 0xc84bd677
0, 25, 25, 1, 291840, 0x3898d474
0, 26, 26, 1, 291840, 0x1e2910c8
0, 27, 27, 1, 291840, 0xb11f58bc
0, 28, 28, 1, 291840, 0xf89170ee
0, 29, 29, 1, 291840, 0x8f239dc3
0, 30, 30, 1, 291840, 0x8538c76c
0, 31, 31, 1, 291840, 0x162ee66f
0, 32, 32, 1, 291840, 0x5f8708a5
0, 33, 33, 1, 291840, 0x95802dfb
0, 34, 34, 1, 291840, 0xc424630d
0, 35, 35, 1, 291840, 0xfb8a8667
0, 36, 36, 1, 291840, 0xbad79af5
0, 37, 37, 1, 291840, 0xc733b325
0, 38, 38, 1, 291840, 0x4bfbcd70
0, 39, 39, 1, 291840, 0x502cd950
0, 40, 40, 1, 291840, 0x8461ca2c
0, 41, 41, 1, 291840, 0x00219b0d
0, 42, 42, 1, 291840, 0xa4de45e1
0, 43, 43, 1, 291840, 0xacd3f4df
0, 44, 44, 1, 291840, 0x2203a369
0, 45, 45, 1, 291840, 0x0a66effa
0, 46, 46, 1, 291840, 0x7ac1fd91
0, 47, 47, 1, 291840, 0x84970aa7
0, 48, 48, 1, 291840, 0x569d145f
0, 49, 49, 1, 291840, 0xe51efe1b
0, 50, 50, 1, 291840, 0x38e2cd78
0, 51, 51, 1, 291840, 0x93428ea2
0, 52, 52, 1, 291840, 0x3d3f5b17
0, 53, 53, 1, 291840, 0x9546127d
0, 54, 54, 1, 291840, 0x4178be54
0, 55, 55, 1, 291840, 0x0d0f8036
0, 56, 56, 1, 291840, 0xc20557b9
0, 57, 57, 1, 291840, 0x6d4b2d64
0, 58, 58, 1, 291840, 0xa750125d
0, 59, 59, 1, 291840, 0x04623ce3
0, 60, 60, 1, 291840, 0xc7f2bbc7
0, 61, 61, 1, 291840, 0x6e271336
0, 62, 62, 1, 291840, 0xcfbd4246
0, 63, 63, 1, 291840, 0xe1493be9
0, 64, 64, 1, 291840, 0x6c731194
0, 65, 65, 1, 291840, 0x0fc30cc2
0, 66, 66, 1, 291840, 0x967427f3
0, 67, 67, 1, 291840, 0x55ae3b00
0, 68, 68, 1, 291840, 0xbe4f200c
0, 69, 69, 1, 291840, 0xc515e443
0, 70, 70, 1, 291840, 0xd738bd69
0, 71, 71, 1, 291840, 0xa8e0ab69
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment