* qatar/master: fix hardcoded tables compililation caused by missing math constants lavf: Make codec_tag arrays constant twinvq: give massive struct a name. lavf, lavu: version bumps and APIchanges for av_gettime() move lavfi/audio: don't set cur_buf in ff_filter_samples(). lavfi/fifo: add audio version of the fifo filter. fifo: fix parenthesis placement. lavfi: rename vf_fifo.c -> fifo.c lavc: remove stats_in from AVCodecContext options table. Conflicts: doc/APIchanges libavfilter/Makefile libavfilter/allfilters.c libavfilter/audio.c libavfilter/fifo.c libavformat/version.h libavutil/avutil.h Merged-by: Michael Niedermayer <michaelni@gmx.at>tags/n1.0
| @@ -1903,7 +1903,7 @@ AS_O='-o $@' | |||||
| CC_O='-o $@' | CC_O='-o $@' | ||||
| CXX_O='-o $@' | CXX_O='-o $@' | ||||
| host_cflags='-D_ISOC99_SOURCE -O3 -g' | |||||
| host_cflags='-D_ISOC99_SOURCE -D_XOPEN_SOURCE=600 -O3 -g' | |||||
| host_libs='-lm' | host_libs='-lm' | ||||
| target_path='$(CURDIR)' | target_path='$(CURDIR)' | ||||
| @@ -38,6 +38,9 @@ API changes, most recent first: | |||||
| 2012-03-26 - a67d9cf - lavfi 2.66.100 | 2012-03-26 - a67d9cf - lavfi 2.66.100 | ||||
| Add avfilter_fill_frame_from_{audio_,}buffer_ref() functions. | Add avfilter_fill_frame_from_{audio_,}buffer_ref() functions. | ||||
| 2012-06-20 - ae0a301 - lavu 51.33.0 | |||||
| Move av_gettime() to libavutil, add libavutil/time.h | |||||
| 2012-xx-xx - xxxxxxx - lavr 0.0.3 | 2012-xx-xx - xxxxxxx - lavr 0.0.3 | ||||
| Add a parameter to avresample_build_matrix() for Dolby/DPLII downmixing. | Add a parameter to avresample_build_matrix() for Dolby/DPLII downmixing. | ||||
| @@ -23,6 +23,7 @@ | |||||
| #ifndef AACPS_TABLEGEN_H | #ifndef AACPS_TABLEGEN_H | ||||
| #define AACPS_TABLEGEN_H | #define AACPS_TABLEGEN_H | ||||
| #include <math.h> | |||||
| #include <stdint.h> | #include <stdint.h> | ||||
| #if CONFIG_HARDCODED_TABLES | #if CONFIG_HARDCODED_TABLES | ||||
| @@ -24,9 +24,6 @@ | |||||
| #include <string.h> | #include <string.h> | ||||
| #include <math.h> | #include <math.h> | ||||
| #ifndef M_PI | |||||
| #define M_PI 3.14159265358979323846 | |||||
| #endif | |||||
| #define BITS 16 | #define BITS 16 | ||||
| #define FLOATFMT "%.18e" | #define FLOATFMT "%.18e" | ||||
| #define FIXEDFMT "%6d" | #define FIXEDFMT "%6d" | ||||
| @@ -167,7 +167,6 @@ static const AVOption options[]={ | |||||
| {"block_align", NULL, OFFSET(block_align), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX}, | {"block_align", NULL, OFFSET(block_align), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX}, | ||||
| {"mpeg_quant", "use MPEG quantizers instead of H.263", OFFSET(mpeg_quant), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E}, | {"mpeg_quant", "use MPEG quantizers instead of H.263", OFFSET(mpeg_quant), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E}, | ||||
| {"stats_out", NULL, OFFSET(stats_out), AV_OPT_TYPE_STRING, {.str = NULL}, CHAR_MIN, CHAR_MAX}, | {"stats_out", NULL, OFFSET(stats_out), AV_OPT_TYPE_STRING, {.str = NULL}, CHAR_MIN, CHAR_MAX}, | ||||
| {"stats_in", NULL, OFFSET(stats_in), AV_OPT_TYPE_STRING, {.str = NULL}, CHAR_MIN, CHAR_MAX}, | |||||
| {"qsquish", "how to keep quantizer between qmin and qmax (0 = clip, 1 = use differentiable function)", OFFSET(rc_qsquish), AV_OPT_TYPE_FLOAT, {.dbl = DEFAULT }, 0, 99, V|E}, | {"qsquish", "how to keep quantizer between qmin and qmax (0 = clip, 1 = use differentiable function)", OFFSET(rc_qsquish), AV_OPT_TYPE_FLOAT, {.dbl = DEFAULT }, 0, 99, V|E}, | ||||
| {"rc_qmod_amp", "experimental quantizer modulation", OFFSET(rc_qmod_amp), AV_OPT_TYPE_FLOAT, {.dbl = DEFAULT }, -FLT_MAX, FLT_MAX, V|E}, | {"rc_qmod_amp", "experimental quantizer modulation", OFFSET(rc_qmod_amp), AV_OPT_TYPE_FLOAT, {.dbl = DEFAULT }, -FLT_MAX, FLT_MAX, V|E}, | ||||
| {"rc_qmod_freq", "experimental quantizer modulation", OFFSET(rc_qmod_freq), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E}, | {"rc_qmod_freq", "experimental quantizer modulation", OFFSET(rc_qmod_freq), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E}, | ||||
| @@ -26,9 +26,6 @@ | |||||
| #define SINETABLE(size) \ | #define SINETABLE(size) \ | ||||
| float ff_sine_##size[size] | float ff_sine_##size[size] | ||||
| #define FF_ARRAY_ELEMS(a) (sizeof(a) / sizeof((a)[0])) | #define FF_ARRAY_ELEMS(a) (sizeof(a) / sizeof((a)[0])) | ||||
| #ifndef M_PI | |||||
| #define M_PI 3.14159265358979323846 | |||||
| #endif | |||||
| #include "sinewin_tablegen.h" | #include "sinewin_tablegen.h" | ||||
| #include "tableprint.h" | #include "tableprint.h" | ||||
| @@ -135,7 +135,7 @@ static const uint16_t bark_tab_s44_128[] = { | |||||
| * | * | ||||
| * without risking a segfault on malformed files. | * without risking a segfault on malformed files. | ||||
| */ | */ | ||||
| static const struct { | |||||
| static const struct twinvq_data { | |||||
| float lsp08[504]; | float lsp08[504]; | ||||
| int16_t fcb08l[640]; | int16_t fcb08l[640]; | ||||
| int16_t fcb08m[320]; | int16_t fcb08m[320]; | ||||
| @@ -47,6 +47,7 @@ OBJS-$(CONFIG_AVFORMAT) += lavfutils.o | |||||
| OBJS-$(CONFIG_SWSCALE) += lswsutils.o | OBJS-$(CONFIG_SWSCALE) += lswsutils.o | ||||
| OBJS-$(CONFIG_ACONVERT_FILTER) += af_aconvert.o | OBJS-$(CONFIG_ACONVERT_FILTER) += af_aconvert.o | ||||
| OBJS-$(CONFIG_AFIFO_FILTER) += fifo.o | |||||
| OBJS-$(CONFIG_AFORMAT_FILTER) += af_aformat.o | OBJS-$(CONFIG_AFORMAT_FILTER) += af_aformat.o | ||||
| OBJS-$(CONFIG_AMERGE_FILTER) += af_amerge.o | OBJS-$(CONFIG_AMERGE_FILTER) += af_amerge.o | ||||
| OBJS-$(CONFIG_AMIX_FILTER) += af_amix.o | OBJS-$(CONFIG_AMIX_FILTER) += af_amix.o | ||||
| @@ -87,7 +88,7 @@ OBJS-$(CONFIG_DRAWBOX_FILTER) += vf_drawbox.o | |||||
| OBJS-$(CONFIG_DRAWTEXT_FILTER) += vf_drawtext.o | OBJS-$(CONFIG_DRAWTEXT_FILTER) += vf_drawtext.o | ||||
| OBJS-$(CONFIG_FADE_FILTER) += vf_fade.o | OBJS-$(CONFIG_FADE_FILTER) += vf_fade.o | ||||
| OBJS-$(CONFIG_FIELDORDER_FILTER) += vf_fieldorder.o | OBJS-$(CONFIG_FIELDORDER_FILTER) += vf_fieldorder.o | ||||
| OBJS-$(CONFIG_FIFO_FILTER) += vf_fifo.o | |||||
| OBJS-$(CONFIG_FIFO_FILTER) += fifo.o | |||||
| OBJS-$(CONFIG_FORMAT_FILTER) += vf_format.o | OBJS-$(CONFIG_FORMAT_FILTER) += vf_format.o | ||||
| OBJS-$(CONFIG_FPS_FILTER) += vf_fps.o | OBJS-$(CONFIG_FPS_FILTER) += vf_fps.o | ||||
| OBJS-$(CONFIG_FREI0R_FILTER) += vf_frei0r.o | OBJS-$(CONFIG_FREI0R_FILTER) += vf_frei0r.o | ||||
| @@ -35,6 +35,7 @@ void avfilter_register_all(void) | |||||
| initialized = 1; | initialized = 1; | ||||
| REGISTER_FILTER (ACONVERT, aconvert, af); | REGISTER_FILTER (ACONVERT, aconvert, af); | ||||
| REGISTER_FILTER (AFIFO, afifo, af); | |||||
| REGISTER_FILTER (AFORMAT, aformat, af); | REGISTER_FILTER (AFORMAT, aformat, af); | ||||
| REGISTER_FILTER (AMERGE, amerge, af); | REGISTER_FILTER (AMERGE, amerge, af); | ||||
| REGISTER_FILTER (AMIX, amix, af); | REGISTER_FILTER (AMIX, amix, af); | ||||
| @@ -181,6 +181,7 @@ void ff_filter_samples(AVFilterLink *link, AVFilterBufferRef *samplesref) | |||||
| void (*filter_samples)(AVFilterLink *, AVFilterBufferRef *); | void (*filter_samples)(AVFilterLink *, AVFilterBufferRef *); | ||||
| AVFilterPad *dst = link->dstpad; | AVFilterPad *dst = link->dstpad; | ||||
| int64_t pts; | int64_t pts; | ||||
| AVFilterBufferRef *buf_out; | |||||
| FF_TPRINTF_START(NULL, filter_samples); ff_tlog_link(NULL, link, 1); | FF_TPRINTF_START(NULL, filter_samples); ff_tlog_link(NULL, link, 1); | ||||
| @@ -194,22 +195,23 @@ void ff_filter_samples(AVFilterLink *link, AVFilterBufferRef *samplesref) | |||||
| "Copying audio data in avfilter (have perms %x, need %x, reject %x)\n", | "Copying audio data in avfilter (have perms %x, need %x, reject %x)\n", | ||||
| samplesref->perms, link->dstpad->min_perms, link->dstpad->rej_perms); | samplesref->perms, link->dstpad->min_perms, link->dstpad->rej_perms); | ||||
| link->cur_buf = ff_default_get_audio_buffer(link, dst->min_perms, | |||||
| samplesref->audio->nb_samples); | |||||
| link->cur_buf->pts = samplesref->pts; | |||||
| link->cur_buf->audio->sample_rate = samplesref->audio->sample_rate; | |||||
| buf_out = ff_default_get_audio_buffer(link, dst->min_perms, | |||||
| samplesref->audio->nb_samples); | |||||
| buf_out->pts = samplesref->pts; | |||||
| buf_out->audio->sample_rate = samplesref->audio->sample_rate; | |||||
| /* Copy actual data into new samples buffer */ | /* Copy actual data into new samples buffer */ | ||||
| av_samples_copy(link->cur_buf->extended_data, samplesref->extended_data, | |||||
| av_samples_copy(buf_out->extended_data, samplesref->extended_data, | |||||
| 0, 0, samplesref->audio->nb_samples, | 0, 0, samplesref->audio->nb_samples, | ||||
| av_get_channel_layout_nb_channels(link->channel_layout), | av_get_channel_layout_nb_channels(link->channel_layout), | ||||
| link->format); | link->format); | ||||
| avfilter_unref_buffer(samplesref); | avfilter_unref_buffer(samplesref); | ||||
| } else | } else | ||||
| link->cur_buf = samplesref; | |||||
| buf_out = samplesref; | |||||
| pts = link->cur_buf->pts; | |||||
| filter_samples(link, link->cur_buf); | |||||
| link->cur_buf = buf_out; | |||||
| pts = buf_out->pts; | |||||
| filter_samples(link, buf_out); | |||||
| ff_update_link_current_pts(link, pts); | ff_update_link_current_pts(link, pts); | ||||
| } | } | ||||
| @@ -20,21 +20,22 @@ | |||||
| /** | /** | ||||
| * @file | * @file | ||||
| * FIFO buffering video filter | |||||
| * FIFO buffering filter | |||||
| */ | */ | ||||
| #include "audio.h" | |||||
| #include "avfilter.h" | #include "avfilter.h" | ||||
| #include "internal.h" | #include "internal.h" | ||||
| #include "video.h" | #include "video.h" | ||||
| typedef struct BufPic { | |||||
| AVFilterBufferRef *picref; | |||||
| struct BufPic *next; | |||||
| } BufPic; | |||||
| typedef struct Buf { | |||||
| AVFilterBufferRef *buf; | |||||
| struct Buf *next; | |||||
| } Buf; | |||||
| typedef struct { | typedef struct { | ||||
| BufPic root; | |||||
| BufPic *last; ///< last buffered picture | |||||
| Buf root; | |||||
| Buf *last; ///< last buffered frame | |||||
| } FifoContext; | } FifoContext; | ||||
| static av_cold int init(AVFilterContext *ctx, const char *args, void *opaque) | static av_cold int init(AVFilterContext *ctx, const char *args, void *opaque) | ||||
| @@ -49,22 +50,22 @@ static av_cold int init(AVFilterContext *ctx, const char *args, void *opaque) | |||||
| static av_cold void uninit(AVFilterContext *ctx) | static av_cold void uninit(AVFilterContext *ctx) | ||||
| { | { | ||||
| FifoContext *fifo = ctx->priv; | FifoContext *fifo = ctx->priv; | ||||
| BufPic *pic, *tmp; | |||||
| Buf *buf, *tmp; | |||||
| for (pic = fifo->root.next; pic; pic = tmp) { | |||||
| tmp = pic->next; | |||||
| avfilter_unref_buffer(pic->picref); | |||||
| av_free(pic); | |||||
| for (buf = fifo->root.next; buf; buf = tmp) { | |||||
| tmp = buf->next; | |||||
| avfilter_unref_buffer(buf->buf); | |||||
| av_free(buf); | |||||
| } | } | ||||
| } | } | ||||
| static void start_frame(AVFilterLink *inlink, AVFilterBufferRef *picref) | |||||
| static void add_to_queue(AVFilterLink *inlink, AVFilterBufferRef *buf) | |||||
| { | { | ||||
| FifoContext *fifo = inlink->dst->priv; | FifoContext *fifo = inlink->dst->priv; | ||||
| fifo->last->next = av_mallocz(sizeof(BufPic)); | |||||
| fifo->last->next = av_mallocz(sizeof(Buf)); | |||||
| fifo->last = fifo->last->next; | fifo->last = fifo->last->next; | ||||
| fifo->last->picref = picref; | |||||
| fifo->last->buf = buf; | |||||
| } | } | ||||
| static void end_frame(AVFilterLink *inlink) { } | static void end_frame(AVFilterLink *inlink) { } | ||||
| @@ -74,19 +75,28 @@ static void draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir) { } | |||||
| static int request_frame(AVFilterLink *outlink) | static int request_frame(AVFilterLink *outlink) | ||||
| { | { | ||||
| FifoContext *fifo = outlink->src->priv; | FifoContext *fifo = outlink->src->priv; | ||||
| BufPic *tmp; | |||||
| Buf *tmp; | |||||
| int ret; | int ret; | ||||
| if (!fifo->root.next) { | if (!fifo->root.next) { | ||||
| if ((ret = avfilter_request_frame(outlink->src->inputs[0])) < 0) | |||||
| if ((ret = ff_request_frame(outlink->src->inputs[0])) < 0) | |||||
| return ret; | return ret; | ||||
| } | } | ||||
| /* by doing this, we give ownership of the reference to the next filter, | /* by doing this, we give ownership of the reference to the next filter, | ||||
| * so we don't have to worry about dereferencing it ourselves. */ | * so we don't have to worry about dereferencing it ourselves. */ | ||||
| ff_start_frame(outlink, fifo->root.next->picref); | |||||
| ff_draw_slice (outlink, 0, outlink->h, 1); | |||||
| ff_end_frame (outlink); | |||||
| switch (outlink->type) { | |||||
| case AVMEDIA_TYPE_VIDEO: | |||||
| ff_start_frame(outlink, fifo->root.next->buf); | |||||
| ff_draw_slice (outlink, 0, outlink->h, 1); | |||||
| ff_end_frame (outlink); | |||||
| break; | |||||
| case AVMEDIA_TYPE_AUDIO: | |||||
| ff_filter_samples(outlink, fifo->root.next->buf); | |||||
| break; | |||||
| default: | |||||
| return AVERROR(EINVAL); | |||||
| } | |||||
| if (fifo->last == fifo->root.next) | if (fifo->last == fifo->root.next) | ||||
| fifo->last = &fifo->root; | fifo->last = &fifo->root; | ||||
| @@ -109,7 +119,7 @@ AVFilter avfilter_vf_fifo = { | |||||
| .inputs = (const AVFilterPad[]) {{ .name = "default", | .inputs = (const AVFilterPad[]) {{ .name = "default", | ||||
| .type = AVMEDIA_TYPE_VIDEO, | .type = AVMEDIA_TYPE_VIDEO, | ||||
| .get_video_buffer= ff_null_get_video_buffer, | .get_video_buffer= ff_null_get_video_buffer, | ||||
| .start_frame = start_frame, | |||||
| .start_frame = add_to_queue, | |||||
| .draw_slice = draw_slice, | .draw_slice = draw_slice, | ||||
| .end_frame = end_frame, | .end_frame = end_frame, | ||||
| .rej_perms = AV_PERM_REUSE2, }, | .rej_perms = AV_PERM_REUSE2, }, | ||||
| @@ -119,3 +129,24 @@ AVFilter avfilter_vf_fifo = { | |||||
| .request_frame = request_frame, }, | .request_frame = request_frame, }, | ||||
| { .name = NULL}}, | { .name = NULL}}, | ||||
| }; | }; | ||||
| AVFilter avfilter_af_afifo = { | |||||
| .name = "afifo", | |||||
| .description = NULL_IF_CONFIG_SMALL("Buffer input frames and send them when they are requested."), | |||||
| .init = init, | |||||
| .uninit = uninit, | |||||
| .priv_size = sizeof(FifoContext), | |||||
| .inputs = (AVFilterPad[]) {{ .name = "default", | |||||
| .type = AVMEDIA_TYPE_AUDIO, | |||||
| .get_audio_buffer = ff_null_get_audio_buffer, | |||||
| .filter_samples = add_to_queue, | |||||
| .rej_perms = AV_PERM_REUSE2, }, | |||||
| { .name = NULL}}, | |||||
| .outputs = (AVFilterPad[]) {{ .name = "default", | |||||
| .type = AVMEDIA_TYPE_AUDIO, | |||||
| .request_frame = request_frame, }, | |||||
| { .name = NULL}}, | |||||
| }; | |||||
| @@ -410,5 +410,5 @@ AVInputFormat ff_caf_demuxer = { | |||||
| .read_header = read_header, | .read_header = read_header, | ||||
| .read_packet = read_packet, | .read_packet = read_packet, | ||||
| .read_seek = read_seek, | .read_seek = read_seek, | ||||
| .codec_tag = (const AVCodecTag*[]){ ff_codec_caf_tags, 0 }, | |||||
| .codec_tag = (const AVCodecTag* const []){ ff_codec_caf_tags, 0 }, | |||||
| }; | }; | ||||
| @@ -87,5 +87,5 @@ AVInputFormat ff_ivf_demuxer = { | |||||
| .read_header = read_header, | .read_header = read_header, | ||||
| .read_packet = read_packet, | .read_packet = read_packet, | ||||
| .flags = AVFMT_GENERIC_INDEX, | .flags = AVFMT_GENERIC_INDEX, | ||||
| .codec_tag = (const AVCodecTag*[]){ ff_codec_bmp_tags, 0 }, | |||||
| .codec_tag = (const AVCodecTag* const []){ ff_codec_bmp_tags, 0 }, | |||||
| }; | }; | ||||
| @@ -30,7 +30,7 @@ | |||||
| #include "libavutil/avutil.h" | #include "libavutil/avutil.h" | ||||
| #define LIBAVFORMAT_VERSION_MAJOR 54 | #define LIBAVFORMAT_VERSION_MAJOR 54 | ||||
| #define LIBAVFORMAT_VERSION_MINOR 10 | |||||
| #define LIBAVFORMAT_VERSION_MINOR 11 | |||||
| #define LIBAVFORMAT_VERSION_MICRO 100 | #define LIBAVFORMAT_VERSION_MICRO 100 | ||||
| #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ | #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ | ||||
| @@ -153,7 +153,7 @@ | |||||
| */ | */ | ||||
| #define LIBAVUTIL_VERSION_MAJOR 51 | #define LIBAVUTIL_VERSION_MAJOR 51 | ||||
| #define LIBAVUTIL_VERSION_MINOR 59 | |||||
| #define LIBAVUTIL_VERSION_MINOR 60 | |||||
| #define LIBAVUTIL_VERSION_MICRO 100 | #define LIBAVUTIL_VERSION_MICRO 100 | ||||
| #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ | #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ | ||||