From 8eb9bf093381efdeeaaab4ebe73ca3c255325961 Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Wed, 16 May 2012 07:59:52 +0200 Subject: [PATCH 1/8] avfiltergraph: make some functions static. They are not used outside of avfiltergraph.c --- libavfilter/avfiltergraph.c | 28 ++++++++++++++++++++++------ libavfilter/internal.h | 23 ----------------------- 2 files changed, 22 insertions(+), 29 deletions(-) diff --git a/libavfilter/avfiltergraph.c b/libavfilter/avfiltergraph.c index b2db5dcf97..bc275142d2 100644 --- a/libavfilter/avfiltergraph.c +++ b/libavfilter/avfiltergraph.c @@ -93,7 +93,15 @@ fail: return ret; } -int ff_avfilter_graph_check_validity(AVFilterGraph *graph, AVClass *log_ctx) +/** + * Check for the validity of graph. + * + * A graph is considered valid if all its input and output pads are + * connected. + * + * @return 0 in case of success, a negative value otherwise + */ +static int graph_check_validity(AVFilterGraph *graph, AVClass *log_ctx) { AVFilterContext *filt; int i, j; @@ -123,7 +131,12 @@ int ff_avfilter_graph_check_validity(AVFilterGraph *graph, AVClass *log_ctx) return 0; } -int ff_avfilter_graph_config_links(AVFilterGraph *graph, AVClass *log_ctx) +/** + * Configure all the links of graphctx. + * + * @return 0 in case of success, a negative value otherwise + */ +static int graph_config_links(AVFilterGraph *graph, AVClass *log_ctx) { AVFilterContext *filt; int i, ret; @@ -546,7 +559,10 @@ static int pick_formats(AVFilterGraph *graph) return 0; } -int ff_avfilter_graph_config_formats(AVFilterGraph *graph, AVClass *log_ctx) +/** + * Configure the formats of all the links in the graph. + */ +static int graph_config_formats(AVFilterGraph *graph, AVClass *log_ctx) { int ret; @@ -575,11 +591,11 @@ int avfilter_graph_config(AVFilterGraph *graphctx, void *log_ctx) { int ret; - if ((ret = ff_avfilter_graph_check_validity(graphctx, log_ctx))) + if ((ret = graph_check_validity(graphctx, log_ctx))) return ret; - if ((ret = ff_avfilter_graph_config_formats(graphctx, log_ctx))) + if ((ret = graph_config_formats(graphctx, log_ctx))) return ret; - if ((ret = ff_avfilter_graph_config_links(graphctx, log_ctx))) + if ((ret = graph_config_links(graphctx, log_ctx))) return ret; return 0; diff --git a/libavfilter/internal.h b/libavfilter/internal.h index a5b3f788da..4eb65305f9 100644 --- a/libavfilter/internal.h +++ b/libavfilter/internal.h @@ -25,29 +25,6 @@ */ #include "avfilter.h" -#include "avfiltergraph.h" - -/** - * Check for the validity of graph. - * - * A graph is considered valid if all its input and output pads are - * connected. - * - * @return 0 in case of success, a negative value otherwise - */ -int ff_avfilter_graph_check_validity(AVFilterGraph *graphctx, AVClass *log_ctx); - -/** - * Configure all the links of graphctx. - * - * @return 0 in case of success, a negative value otherwise - */ -int ff_avfilter_graph_config_links(AVFilterGraph *graphctx, AVClass *log_ctx); - -/** - * Configure the formats of all the links in the graph. - */ -int ff_avfilter_graph_config_formats(AVFilterGraph *graphctx, AVClass *log_ctx); /** default handler for freeing audio/video buffer when there are no references left */ void ff_avfilter_default_free_buffer(AVFilterBuffer *buf); From 2f51ec2b9438e211f5b8abb2fcf5d8be678e7e8c Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Fri, 1 Jun 2012 10:44:11 +0200 Subject: [PATCH 2/8] avconv: split checking for active outputs out of transcode(). --- avconv.c | 51 +++++++++++++++++++++++++++++++++------------------ 1 file changed, 33 insertions(+), 18 deletions(-) diff --git a/avconv.c b/avconv.c index cbf66c44eb..1ecd62ffe1 100644 --- a/avconv.c +++ b/avconv.c @@ -2855,6 +2855,35 @@ static int transcode_init(void) return 0; } +/** + * @return 1 if there are still streams where more output is wanted, + * 0 otherwise + */ +static int need_output(void) +{ + int i; + + for (i = 0; i < nb_output_streams; i++) { + OutputStream *ost = output_streams[i]; + OutputFile *of = output_files[ost->file_index]; + AVFormatContext *os = output_files[ost->file_index]->ctx; + + if (ost->is_past_recording_time || + (os->pb && avio_tell(os->pb) >= of->limit_filesize)) + continue; + if (ost->frame_number > ost->max_frames) { + int j; + for (j = 0; j < of->ctx->nb_streams; j++) + output_streams[of->ost_index + j]->is_past_recording_time = 1; + continue; + } + + return 1; + } + + return 0; +} + /* * The following code is the main loop of the file converter */ @@ -2881,31 +2910,17 @@ static int transcode(void) timer_start = av_gettime(); for (; received_sigterm == 0;) { - int file_index, ist_index, past_recording_time = 1; + int file_index, ist_index; AVPacket pkt; int64_t ipts_min; ipts_min = INT64_MAX; /* check if there's any stream where output is still needed */ - for (i = 0; i < nb_output_streams; i++) { - OutputFile *of; - ost = output_streams[i]; - of = output_files[ost->file_index]; - os = output_files[ost->file_index]->ctx; - if (ost->is_past_recording_time || - (os->pb && avio_tell(os->pb) >= of->limit_filesize)) - continue; - if (ost->frame_number > ost->max_frames) { - int j; - for (j = 0; j < of->ctx->nb_streams; j++) - output_streams[of->ost_index + j]->is_past_recording_time = 1; - continue; - } - past_recording_time = 0; - } - if (past_recording_time) + if (!need_output()) { + av_log(NULL, AV_LOG_VERBOSE, "No more output streams to write to, finishing.\n"); break; + } /* select the stream that we must read now by looking at the smallest output pts */ From a508e7a1ff3c2d3c63f3ba803a404c4acef6c149 Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Fri, 1 Jun 2012 11:00:27 +0200 Subject: [PATCH 3/8] avconv: split selecting input file out of transcode(). --- avconv.c | 43 ++++++++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/avconv.c b/avconv.c index 1ecd62ffe1..c06b4971c8 100644 --- a/avconv.c +++ b/avconv.c @@ -2884,6 +2884,28 @@ static int need_output(void) return 0; } +static int select_input_file(uint8_t *no_packet) +{ + int64_t ipts_min = INT64_MAX; + int i, file_index = -1; + + for (i = 0; i < nb_input_streams; i++) { + InputStream *ist = input_streams[i]; + int64_t ipts = ist->last_dts; + + if (ist->discard || no_packet[ist->file_index]) + continue; + if (!input_files[ist->file_index]->eof_reached) { + if (ipts < ipts_min) { + ipts_min = ipts; + file_index = ist->file_index; + } + } + } + + return file_index; +} + /* * The following code is the main loop of the file converter */ @@ -2912,9 +2934,6 @@ static int transcode(void) for (; received_sigterm == 0;) { int file_index, ist_index; AVPacket pkt; - int64_t ipts_min; - - ipts_min = INT64_MAX; /* check if there's any stream where output is still needed */ if (!need_output()) { @@ -2922,22 +2941,8 @@ static int transcode(void) break; } - /* select the stream that we must read now by looking at the - smallest output pts */ - file_index = -1; - for (i = 0; i < nb_input_streams; i++) { - int64_t ipts; - ist = input_streams[i]; - ipts = ist->last_dts; - if (ist->discard || no_packet[ist->file_index]) - continue; - if (!input_files[ist->file_index]->eof_reached) { - if (ipts < ipts_min) { - ipts_min = ipts; - file_index = ist->file_index; - } - } - } + /* select the stream that we must read now */ + file_index = select_input_file(no_packet); /* if none, if is finished */ if (file_index < 0) { if (no_packet_count) { From bb7431f4fc44553fc0a52a69b57d220d174177d4 Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Sun, 3 Jun 2012 11:35:38 +0200 Subject: [PATCH 4/8] avconv: check output stream recording time before each frame returned from filters There may be multiple frames returned, so with just one check we can write more than requested to the output. --- avconv.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/avconv.c b/avconv.c index c06b4971c8..3cbdfab143 100644 --- a/avconv.c +++ b/avconv.c @@ -1668,7 +1668,7 @@ static int poll_filters(void) OutputFile *of = output_files[ost->file_index]; int ret = 0; - if (!ost->filter || ost->is_past_recording_time) + if (!ost->filter) continue; if (!ost->filtered_frame && !(ost->filtered_frame = avcodec_alloc_frame())) { @@ -1677,7 +1677,7 @@ static int poll_filters(void) avcodec_get_frame_defaults(ost->filtered_frame); filtered_frame = ost->filtered_frame; - while (ret >= 0) { + while (ret >= 0 && !ost->is_past_recording_time) { if (ost->enc->type == AVMEDIA_TYPE_AUDIO && !(ost->enc->capabilities & CODEC_CAP_VARIABLE_FRAME_SIZE)) ret = av_buffersink_read_samples(ost->filter->filter, &picref, From a982e5a031c9c92726593851cee7a3792e3cbed7 Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Mon, 4 Jun 2012 11:36:51 +0200 Subject: [PATCH 5/8] avidec: make scale and rate unsigned. The specs say they are unsigned 32bit integers. --- libavformat/avidec.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libavformat/avidec.c b/libavformat/avidec.c index abfea2c7ee..38f84f9f94 100644 --- a/libavformat/avidec.c +++ b/libavformat/avidec.c @@ -39,8 +39,8 @@ typedef struct AVIStream { int remaining; int packet_size; - int scale; - int rate; + uint32_t scale; + uint32_t rate; int sample_size; /* size of one sample (or packet) (in the rate/scale sense) in bytes */ int64_t cum_len; /* temporary storage (used during seek) */ From 2b1f105f1b3ac5b705ef9451826f502d93b5247c Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Mon, 4 Jun 2012 11:00:34 +0200 Subject: [PATCH 6/8] doc/avconv: add some details about the transcoding process. --- doc/avconv.texi | 120 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) diff --git a/doc/avconv.texi b/doc/avconv.texi index 2ebfe9fe44..776a326369 100644 --- a/doc/avconv.texi +++ b/doc/avconv.texi @@ -79,6 +79,126 @@ The format option may be needed for raw input files. @c man end DESCRIPTION +@chapter Detailed description +@c man begin DETAILED DESCRIPTION + +The transcoding process in @command{avconv} for each output can be described by +the following diagram: + +@example + _______ ______________ _________ ______________ ________ +| | | | | | | | | | +| input | demuxer | encoded data | decoder | decoded | encoder | encoded data | muxer | output | +| file | ---------> | packets | ---------> | frames | ---------> | packets | -------> | file | +|_______| |______________| |_________| |______________| |________| + +@end example + +@command{avconv} calls the libavformat library (containing demuxers) to read +input files and get packets containing encoded data from them. When there are +multiple input files, @command{avconv} tries to keep them synchronized by +tracking lowest timestamp on any active input stream. + +Encoded packets are then passed to the decoder (unless streamcopy is selected +for the stream, see further for a description). The decoder produces +uncompressed frames (raw video/PCM audio/...) which can be processed further by +filtering (see next section). After filtering the frames are passed to the +encoder, which encodes them and outputs encoded packets again. Finally those are +passed to the muxer, which writes the encoded packets to the output file. + +@section Filtering +Before encoding, @command{avconv} can process raw audio and video frames using +filters from the libavfilter library. Several chained filters form a filter +graph. @command{avconv} distinguishes between two types of filtergraphs - +simple and complex. + +@subsection Simple filtergraphs +Simple filtergraphs are those that have exactly one input and output, both of +the same type. In the above diagram they can be represented by simply inserting +an additional step between decoding and encoding: + +@example + _________ __________ ______________ +| | | | | | +| decoded | simple filtergraph | filtered | encoder | encoded data | +| frames | -------------------> | frames | ---------> | packets | +|_________| |__________| |______________| + +@end example + +Simple filtergraphs are configured with the per-stream @option{-filter} option +(with @option{-vf} and @option{-af} aliases for video and audio respectively). +A simple filtergraph for video can look for example like this: + +@example + _______ _____________ _______ _____ ________ +| | | | | | | | | | +| input | ---> | deinterlace | ---> | scale | ---> | fps | ---> | output | +|_______| |_____________| |_______| |_____| |________| + +@end example + +Note that some filters change frame properties but not frame contents. E.g. the +@code{fps} filter in the example above changes number of frames, but does not +touch the frame contents. Another example is the @code{setpts} filter, which +only sets timestamps and otherwise passes the frames unchanged. + +@subsection Complex filtergraphs +Complex filtergraphs are those which cannot be described as simply a linear +processing chain applied to one stream. This is the case e.g. when the graph has +more than one input and/or output, or when output stream type is different from +input. They can be represented with the following diagram: + +@example + _________ +| | +| input 0 |\ __________ +|_________| \ | | + \ _________ /| output 0 | + \ | | / |__________| + _________ \| complex | / +| | | |/ +| input 1 |---->| filter |\ +|_________| | | \ __________ + /| graph | \ | | + / | | \| output 1 | + _________ / |_________| |__________| +| | / +| input 2 |/ +|_________| + +@end example + +Complex filtergraphs are configured with the @option{-filter_complex} option. +Note that this option is global, since a complex filtergraph by its nature +cannot be unambiguously associated with a single stream or file. + +A trivial example of a complex filtergraph is the @code{overlay} filter, which +has two video inputs and one video output, containing one video overlaid on top +of the other. Its audio counterpart is the @code{amix} filter. + +@section Stream copy +Stream copy is a mode selected by supplying the @code{copy} parameter to the +@option{-codec} option. It makes @command{avconv} omit the decoding and encoding +step for the specified stream, so it does only demuxing and muxing. It is useful +for changing the container format or modifying container-level metadata. The +diagram above will in this case simplify to this: + +@example + _______ ______________ ________ +| | | | | | +| input | demuxer | encoded data | muxer | output | +| file | ---------> | packets | -------> | file | +|_______| |______________| |________| + +@end example + +Since there is no decoding or encoding, it is very fast and there is no quality +loss. However it might not work in some cases because of many factors. Applying +filters is obviously also impossible, since filters work on uncompressed data. + +@c man end DETAILED DESCRIPTION + @chapter Stream selection @c man begin STREAM SELECTION From 84e430dd7b75215757554f2c4a47a212ea51d85f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jind=C5=99ich=20Makovi=C4=8Dka?= Date: Sun, 3 Jun 2012 06:11:10 +0200 Subject: [PATCH 7/8] mpegtsenc: use avio_open_dyn_buf(), zero pointers after freeing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Per suggestion by Michael Niedermayer. Signed-off-by: Jindřich Makovička Signed-off-by: Martin Storsjö --- libavformat/mpegtsenc.c | 55 +++++++---------------------------------- 1 file changed, 9 insertions(+), 46 deletions(-) diff --git a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c index f3520c0504..7456931988 100644 --- a/libavformat/mpegtsenc.c +++ b/libavformat/mpegtsenc.c @@ -226,10 +226,6 @@ typedef struct MpegTSWriteStream { int64_t payload_dts; int payload_flags; uint8_t *payload; - - uint8_t *adata; - int adata_pos; - int adata_size; AVFormatContext *amux; } MpegTSWriteStream; @@ -464,19 +460,6 @@ static void section_write_packet(MpegTSSection *s, const uint8_t *packet) avio_write(ctx->pb, packet, TS_PACKET_SIZE); } -/* Write callback for audio packetizer */ -static int mpegts_audio_write(void *opaque, uint8_t *buf, int size) -{ - MpegTSWriteStream *ts_st = (MpegTSWriteStream *)opaque; - if (ts_st->adata_pos + size > ts_st->adata_size) - return AVERROR(EIO); - - memcpy(ts_st->adata + ts_st->adata_pos, buf, size); - ts_st->adata_pos += size; - - return 0; -} - static int mpegts_write_header(AVFormatContext *s) { MpegTSWrite *ts = s->priv_data; @@ -577,25 +560,11 @@ static int mpegts_write_header(AVFormatContext *s) st->codec->extradata_size > 0) { AVStream *ast; - uint8_t *buffer; - int buffer_size = 32768; ts_st->amux = avformat_alloc_context(); if (!ts_st->amux) { ret = AVERROR(ENOMEM); goto fail; } - buffer = av_malloc(buffer_size); - if (!buffer) { - ret = AVERROR(ENOMEM); - goto fail; - } - ts_st->amux->pb = avio_alloc_context(buffer, buffer_size, AVIO_FLAG_WRITE, - ts_st, NULL, mpegts_audio_write, NULL); - if (!ts_st->amux->pb) { - av_free(buffer); - ret = AVERROR(ENOMEM); - goto fail; - } ts_st->amux->oformat = av_guess_format((ts->flags & MPEGTS_FLAG_AAC_LATM) ? "latm" : "adts", NULL, NULL); if (!ts_st->amux->oformat) { ret = AVERROR(EINVAL); @@ -676,9 +645,8 @@ static int mpegts_write_header(AVFormatContext *s) if (ts_st) { av_freep(&ts_st->payload); if (ts_st->amux) { - av_free(ts_st->amux->pb->buffer); - av_free(ts_st->amux->pb); avformat_free_context(ts_st->amux); + ts_st->amux = NULL; } } av_freep(&st->priv_data); @@ -1082,24 +1050,20 @@ static int mpegts_write_packet_internal(AVFormatContext *s, AVPacket *pkt) av_init_packet(&pkt2); pkt2.data = pkt->data; pkt2.size = pkt->size; - ts_st->adata_size = 1024 + pkt->size; - ts_st->adata = data = av_malloc(ts_st->adata_size); - ts_st->adata_pos = 0; - if (!data) + ret = avio_open_dyn_buf(&ts_st->amux->pb); + if (ret < 0) return AVERROR(ENOMEM); ret = av_write_frame(ts_st->amux, &pkt2); if (ret < 0) { + avio_close_dyn_buf(ts_st->amux->pb, &data); + ts_st->amux->pb = NULL; av_free(data); return ret; } - avio_flush(ts_st->amux->pb); - if (ts_st->amux->pb->error < 0) { - av_free(data); - return ts_st->amux->pb->error; - } - buf = ts_st->adata; - size = ts_st->adata_pos; + size = avio_close_dyn_buf(ts_st->amux->pb, &data); + ts_st->amux->pb = NULL; + buf = data; } } @@ -1180,9 +1144,8 @@ static int mpegts_write_end(AVFormatContext *s) MpegTSWriteStream *ts_st = st->priv_data; av_freep(&ts_st->payload); if (ts_st->amux) { - av_free(ts_st->amux->pb->buffer); - av_free(ts_st->amux->pb); avformat_free_context(ts_st->amux); + ts_st->amux = NULL; } } From 41e9682af22336bd08a5906629731c0c32aa00c6 Mon Sep 17 00:00:00 2001 From: Alex Converse Date: Wed, 30 May 2012 17:51:12 -0700 Subject: [PATCH 8/8] movenc: Write chan atom for all audio tracks in mov mode movies. --- libavformat/movenc.c | 4 +++- tests/ref/fate/acodec-alac | 4 ++-- tests/ref/fate/acodec-pcm-s16be | 4 ++-- tests/ref/fate/acodec-pcm-s24be | 4 ++-- tests/ref/fate/acodec-pcm-s32be | 4 ++-- tests/ref/fate/acodec-pcm-s8 | 4 ++-- tests/ref/lavf/mov | 4 ++-- 7 files changed, 15 insertions(+), 13 deletions(-) diff --git a/libavformat/movenc.c b/libavformat/movenc.c index fa6e95771e..bf888bc3be 100644 --- a/libavformat/movenc.c +++ b/libavformat/movenc.c @@ -390,7 +390,6 @@ static int mov_write_wave_tag(AVIOContext *pb, MOVTrack *track) } else if (track->enc->codec_id == CODEC_ID_AMR_NB) { mov_write_amr_tag(pb, track); } else if (track->enc->codec_id == CODEC_ID_AC3) { - mov_write_chan_tag(pb, track); mov_write_ac3_tag(pb, track); } else if (track->enc->codec_id == CODEC_ID_ALAC) { mov_write_extradata_tag(pb, track); @@ -638,6 +637,9 @@ static int mov_write_audio_tag(AVIOContext *pb, MOVTrack *track) else if (track->vos_len > 0) mov_write_glbl_tag(pb, track); + if (track->mode == MODE_MOV && track->enc->codec_type == AVMEDIA_TYPE_AUDIO) + mov_write_chan_tag(pb, track); + return update_size(pb, pos); } diff --git a/tests/ref/fate/acodec-alac b/tests/ref/fate/acodec-alac index 10ff21133c..bb7a20242d 100644 --- a/tests/ref/fate/acodec-alac +++ b/tests/ref/fate/acodec-alac @@ -1,4 +1,4 @@ -238759bcb462fe9697973f4dd04d5b54 *tests/data/fate/acodec-alac.mov -389234 tests/data/fate/acodec-alac.mov +8ad790d3a0bbda81cd23c15ab8ba760d *tests/data/fate/acodec-alac.mov +389258 tests/data/fate/acodec-alac.mov 64151e4bcc2b717aa5a8454d424d6a1f *tests/data/fate/acodec-alac.out.wav stddev: 0.00 PSNR:999.99 MAXDIFF: 0 bytes: 1058400/ 1058400 diff --git a/tests/ref/fate/acodec-pcm-s16be b/tests/ref/fate/acodec-pcm-s16be index f76e89c7a4..06614e1067 100644 --- a/tests/ref/fate/acodec-pcm-s16be +++ b/tests/ref/fate/acodec-pcm-s16be @@ -1,4 +1,4 @@ -53c9eb319c778e7ce137667f62384994 *tests/data/fate/acodec-pcm-s16be.mov -1060073 tests/data/fate/acodec-pcm-s16be.mov +b023c4792bd206fa96f64a8a012b6eb8 *tests/data/fate/acodec-pcm-s16be.mov +1060097 tests/data/fate/acodec-pcm-s16be.mov 64151e4bcc2b717aa5a8454d424d6a1f *tests/data/fate/acodec-pcm-s16be.out.wav stddev: 0.00 PSNR:999.99 MAXDIFF: 0 bytes: 1058400/ 1058400 diff --git a/tests/ref/fate/acodec-pcm-s24be b/tests/ref/fate/acodec-pcm-s24be index 51972cae03..c6a5889134 100644 --- a/tests/ref/fate/acodec-pcm-s24be +++ b/tests/ref/fate/acodec-pcm-s24be @@ -1,4 +1,4 @@ -af8acd2f08e4bbebe7f4bea4d6f59dd6 *tests/data/fate/acodec-pcm-s24be.mov -1589273 tests/data/fate/acodec-pcm-s24be.mov +3607f8c7029a0c2ca2c8bf2c929518b3 *tests/data/fate/acodec-pcm-s24be.mov +1589297 tests/data/fate/acodec-pcm-s24be.mov 64151e4bcc2b717aa5a8454d424d6a1f *tests/data/fate/acodec-pcm-s24be.out.wav stddev: 0.00 PSNR:999.99 MAXDIFF: 0 bytes: 1058400/ 1058400 diff --git a/tests/ref/fate/acodec-pcm-s32be b/tests/ref/fate/acodec-pcm-s32be index f2b6c447fa..8d77642b6b 100644 --- a/tests/ref/fate/acodec-pcm-s32be +++ b/tests/ref/fate/acodec-pcm-s32be @@ -1,4 +1,4 @@ -63f0e22b4f7c5d61d75047d85f140d52 *tests/data/fate/acodec-pcm-s32be.mov -2118473 tests/data/fate/acodec-pcm-s32be.mov +2a47292543cb0c25583a49397504e6d1 *tests/data/fate/acodec-pcm-s32be.mov +2118497 tests/data/fate/acodec-pcm-s32be.mov 64151e4bcc2b717aa5a8454d424d6a1f *tests/data/fate/acodec-pcm-s32be.out.wav stddev: 0.00 PSNR:999.99 MAXDIFF: 0 bytes: 1058400/ 1058400 diff --git a/tests/ref/fate/acodec-pcm-s8 b/tests/ref/fate/acodec-pcm-s8 index b471b2c241..2689bf286a 100644 --- a/tests/ref/fate/acodec-pcm-s8 +++ b/tests/ref/fate/acodec-pcm-s8 @@ -1,4 +1,4 @@ -4b3013a3f3c328ecdb617cd88b3fe836 *tests/data/fate/acodec-pcm-s8.mov -530873 tests/data/fate/acodec-pcm-s8.mov +953eb563c7ea81c1ec73c5a806975e34 *tests/data/fate/acodec-pcm-s8.mov +530897 tests/data/fate/acodec-pcm-s8.mov 651d4eb8d98dfcdda96ae6c43d8f156b *tests/data/fate/acodec-pcm-s8.out.wav stddev: 147.89 PSNR: 52.93 MAXDIFF: 255 bytes: 1058400/ 1058400 diff --git a/tests/ref/lavf/mov b/tests/ref/lavf/mov index a4ae2d5532..2db01d4aeb 100644 --- a/tests/ref/lavf/mov +++ b/tests/ref/lavf/mov @@ -1,3 +1,3 @@ -6c5472152b46e070ae6da359838e1f86 *./tests/data/lavf/lavf.mov -357717 ./tests/data/lavf/lavf.mov +a5c982910b1a1547db68ffa35cc2a05a *./tests/data/lavf/lavf.mov +357741 ./tests/data/lavf/lavf.mov ./tests/data/lavf/lavf.mov CRC=0x2f6a9b26