Browse code

Merge remote-tracking branch 'qatar/master'

* qatar/master:
fft: init functions with INIT_XMM/YMM.
pcmenc: set frame_size to 0.
gsm demuxer: use generic seeking instead of a gsm-specific function.
gsm demuxer: return packets with only 1 gsm block at a time.
avcodec: add GSM parser
doc: Replace ffmpeg references in avserver config file by avconv.
doc: Fix names of av_log color environment variables.
Fix a bunch of platform name and other typos.
Add some missing changelog entries and release 0.8_beta2
No longer build libpostproc by default
wtv: fix memleaks during normal operation
threads: add CODEC_CAP_AUTO_THREADS for libvpx and xavs

Conflicts:
Changelog
RELEASE
cmdutils.c
configure
doc/ffserver.conf
doc/platform.texi
ffplay.c
libavcodec/Makefile
libavcodec/version.h
libavformat/wtv.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>

Michael Niedermayer authored on 2012/01/12 08:52:40
Showing 24 changed files
... ...
@@ -13,6 +13,7 @@ version next:
13 13
 - tinterlace video filter
14 14
 - astreamsync audio filter
15 15
 - amerge audio filter
16
+- GSM audio parser
16 17
 - Automatic thread count based on detection number of (available) CPU cores
17 18
 - y41p Brooktree Uncompressed 4:1:1 12-bit encoder and decoder
18 19
 - ffprobe -show_error option
... ...
@@ -22,6 +23,8 @@ version next:
22 22
 - ffprobe -show_frames option
23 23
 - silencedetect audio filter
24 24
 - ffprobe -show_program_version, -show_library_versions, -show_versions options
25
+- rv34: frame-level multi-threading
26
+- optimized iMDCT transform on x86 using SSE for for mpegaudiodec
25 27
 
26 28
 
27 29
 version 0.9:
... ...
@@ -1 +1,2 @@
1 1
 0.9.1.git
2
+
... ...
@@ -34,7 +34,9 @@
34 34
 #include "libavdevice/avdevice.h"
35 35
 #include "libswscale/swscale.h"
36 36
 #include "libswresample/swresample.h"
37
+#if CONFIG_POSTPROC
37 38
 #include "libpostproc/postprocess.h"
39
+#endif
38 40
 #include "libavutil/avstring.h"
39 41
 #include "libavutil/mathematics.h"
40 42
 #include "libavutil/parseutils.h"
... ...
@@ -607,7 +609,9 @@ static void print_all_libs_info(int flags, int level)
607 607
     PRINT_LIB_INFO(avfilter, AVFILTER, flags, level);
608 608
     PRINT_LIB_INFO(swscale,  SWSCALE,  flags, level);
609 609
     PRINT_LIB_INFO(swresample,SWRESAMPLE,  flags, level);
610
+#if CONFIG_POSTPROC
610 611
     PRINT_LIB_INFO(postproc, POSTPROC, flags, level);
612
+#endif
611 613
 }
612 614
 
613 615
 static void print_program_info(int flags, int level)
... ...
@@ -253,7 +253,7 @@ Advanced options (experts only):
253 253
   --disable-armvfp         disable ARM VFP optimizations
254 254
   --disable-iwmmxt         disable iwmmxt optimizations
255 255
   --disable-mmi            disable MMI optimizations
256
-  --disable-neon           disable neon optimizations
256
+  --disable-neon           disable NEON optimizations
257 257
   --disable-vis            disable VIS optimizations
258 258
   --disable-yasm           disable use of yasm assembler
259 259
   --enable-pic             build position-independent code
... ...
@@ -119,8 +119,8 @@ Set the logging level used by the library.
119 119
 By default the program logs to stderr, if coloring is supported by the
120 120
 terminal, colors are used to mark errors and warnings. Log coloring
121 121
 can be disabled setting the environment variable
122
-@env{FFMPEG_FORCE_NOCOLOR} or @env{NO_COLOR}, or can be forced setting
123
-the environment variable @env{FFMPEG_FORCE_COLOR}.
122
+@env{AV_LOG_FORCE_NOCOLOR} or @env{NO_COLOR}, or can be forced setting
123
+the environment variable @env{AV_LOG_FORCE_COLOR}.
124 124
 The use of the environment variable @env{NO_COLOR} is deprecated and
125 125
 will be dropped in a following FFmpeg version.
126 126
 
... ...
@@ -655,6 +655,7 @@ OBJS-$(CONFIG_DVBSUB_PARSER)           += dvbsub_parser.o
655 655
 OBJS-$(CONFIG_DVDSUB_PARSER)           += dvdsub_parser.o
656 656
 OBJS-$(CONFIG_FLAC_PARSER)             += flac_parser.o flacdata.o flac.o \
657 657
                                           vorbis_data.o
658
+OBJS-$(CONFIG_GSM_PARSER)              += gsm_parser.o
658 659
 OBJS-$(CONFIG_H261_PARSER)             += h261_parser.o
659 660
 OBJS-$(CONFIG_H263_PARSER)             += h263_parser.o
660 661
 OBJS-$(CONFIG_H264_PARSER)             += h264_parser.o h264.o            \
... ...
@@ -432,6 +432,7 @@ void avcodec_register_all(void)
432 432
     REGISTER_PARSER  (DVBSUB, dvbsub);
433 433
     REGISTER_PARSER  (DVDSUB, dvdsub);
434 434
     REGISTER_PARSER  (FLAC, flac);
435
+    REGISTER_PARSER  (GSM, gsm);
435 436
     REGISTER_PARSER  (H261, h261);
436 437
     REGISTER_PARSER  (H263, h263);
437 438
     REGISTER_PARSER  (H264, h264);
... ...
@@ -50,7 +50,7 @@ static void decode_mb(MpegEncContext *s, int ref){
50 50
         h->mb_xy= s->mb_x + s->mb_y*s->mb_stride;
51 51
         memset(h->non_zero_count_cache, 0, sizeof(h->non_zero_count_cache));
52 52
         assert(ref>=0);
53
-        /* FIXME: It is posible albeit uncommon that slice references
53
+        /* FIXME: It is possible albeit uncommon that slice references
54 54
          * differ between slices. We take the easy approach and ignore
55 55
          * it for now. If this turns out to have any relevance in
56 56
          * practice then correct remapping should be added. */
57 57
new file mode 100644
... ...
@@ -0,0 +1,31 @@
0
+/*
1
+ * GSM common header
2
+ *
3
+ * This file is part of Libav.
4
+ *
5
+ * Libav is free software; you can redistribute it and/or
6
+ * modify it under the terms of the GNU Lesser General Public
7
+ * License as published by the Free Software Foundation; either
8
+ * version 2.1 of the License, or (at your option) any later version.
9
+ *
10
+ * Libav is distributed in the hope that it will be useful,
11
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13
+ * Lesser General Public License for more details.
14
+ *
15
+ * You should have received a copy of the GNU Lesser General Public
16
+ * License along with Libav; if not, write to the Free Software
17
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18
+ */
19
+
20
+#ifndef AVCODEC_GSM_H
21
+#define AVCODEC_GSM_H
22
+
23
+/* bytes per block */
24
+#define GSM_BLOCK_SIZE    33
25
+#define GSM_MS_BLOCK_SIZE 65
26
+
27
+/* samples per block */
28
+#define GSM_FRAME_SIZE 160
29
+
30
+#endif /* AVCODEC_GSM_H */
0 31
new file mode 100644
... ...
@@ -0,0 +1,79 @@
0
+/*
1
+ * Copyright (c) 2012  Justin Ruggles
2
+ *
3
+ * This file is part of Libav.
4
+ *
5
+ * Libav is free software; you can redistribute it and/or
6
+ * modify it under the terms of the GNU Lesser General Public
7
+ * License as published by the Free Software Foundation; either
8
+ * version 2.1 of the License, or (at your option) any later version.
9
+ *
10
+ * Libav is distributed in the hope that it will be useful,
11
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13
+ * Lesser General Public License for more details.
14
+ *
15
+ * You should have received a copy of the GNU Lesser General Public
16
+ * License along with Libav; if not, write to the Free Software
17
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18
+ */
19
+
20
+/**
21
+ * @file
22
+ * GSM audio parser
23
+ *
24
+ * Splits packets into individual blocks.
25
+ */
26
+
27
+#include "parser.h"
28
+#include "gsm.h"
29
+
30
+typedef struct GSMParseContext {
31
+    ParseContext pc;
32
+    int block_size;
33
+    int remaining;
34
+} GSMParseContext;
35
+
36
+static int gsm_parse(AVCodecParserContext *s1, AVCodecContext *avctx,
37
+                     const uint8_t **poutbuf, int *poutbuf_size,
38
+                     const uint8_t *buf, int buf_size)
39
+{
40
+    GSMParseContext *s = s1->priv_data;
41
+    ParseContext *pc = &s->pc;
42
+    int next;
43
+
44
+    if (!s->block_size) {
45
+        switch (avctx->codec_id) {
46
+        case CODEC_ID_GSM:    s->block_size = GSM_BLOCK_SIZE;    break;
47
+        case CODEC_ID_GSM_MS: s->block_size = GSM_MS_BLOCK_SIZE; break;
48
+        default:
49
+            return AVERROR(EINVAL);
50
+        }
51
+    }
52
+
53
+    if (!s->remaining)
54
+        s->remaining = s->block_size;
55
+    if (s->remaining <= buf_size) {
56
+        next = s->remaining;
57
+        s->remaining = 0;
58
+    } else {
59
+        next = END_NOT_FOUND;
60
+        s->remaining -= buf_size;
61
+    }
62
+
63
+    if (ff_combine_frame(pc, next, &buf, &buf_size) < 0 || !buf_size) {
64
+        *poutbuf      = NULL;
65
+        *poutbuf_size = 0;
66
+        return buf_size;
67
+    }
68
+    *poutbuf      = buf;
69
+    *poutbuf_size = buf_size;
70
+    return next;
71
+}
72
+
73
+AVCodecParser ff_gsm_parser = {
74
+    .codec_ids      = { CODEC_ID_GSM, CODEC_ID_GSM_MS },
75
+    .priv_data_size = sizeof(GSMParseContext),
76
+    .parser_parse   = gsm_parse,
77
+    .parser_close   = ff_parse_close,
78
+};
... ...
@@ -25,11 +25,6 @@
25 25
 #include <stdint.h>
26 26
 #include "avcodec.h"
27 27
 
28
-// input and output sizes in byte
29
-#define GSM_BLOCK_SIZE    33
30
-#define GSM_MS_BLOCK_SIZE 65
31
-#define GSM_FRAME_SIZE   160
32
-
33 28
 typedef struct {
34 29
     AVFrame frame;
35 30
     // Contains first 120 elements from the previous frame
... ...
@@ -25,6 +25,7 @@
25 25
  */
26 26
 
27 27
 #include "get_bits.h"
28
+#include "gsm.h"
28 29
 #include "gsmdec_data.h"
29 30
 
30 31
 static void apcm_dequant_add(GetBitContext *gb, int16_t *dst)
... ...
@@ -27,13 +27,10 @@
27 27
 
28 28
 // The idiosyncrasies of GSM-in-WAV are explained at http://kbs.cs.tu-berlin.de/~jutta/toast.html
29 29
 
30
-#include "avcodec.h"
31 30
 #include <gsm/gsm.h>
32 31
 
33
-// gsm.h misses some essential constants
34
-#define GSM_BLOCK_SIZE 33
35
-#define GSM_MS_BLOCK_SIZE 65
36
-#define GSM_FRAME_SIZE 160
32
+#include "avcodec.h"
33
+#include "gsm.h"
37 34
 
38 35
 static av_cold int libgsm_encode_init(AVCodecContext *avctx) {
39 36
     if (avctx->channels > 1) {
... ...
@@ -119,5 +119,6 @@ AVCodec ff_libvpx_decoder = {
119 119
     .init           = vp8_init,
120 120
     .close          = vp8_free,
121 121
     .decode         = vp8_decode,
122
-    .long_name = NULL_IF_CONFIG_SMALL("libvpx VP8"),
122
+    .capabilities   = CODEC_CAP_AUTO_THREADS,
123
+    .long_name      = NULL_IF_CONFIG_SMALL("libvpx VP8"),
123 124
 };
... ...
@@ -622,7 +622,7 @@ AVCodec ff_libvpx_encoder = {
622 622
     .init           = vp8_init,
623 623
     .encode         = vp8_encode,
624 624
     .close          = vp8_free,
625
-    .capabilities   = CODEC_CAP_DELAY,
625
+    .capabilities   = CODEC_CAP_DELAY | CODEC_CAP_AUTO_THREADS,
626 626
     .pix_fmts = (const enum PixelFormat[]){PIX_FMT_YUV420P, PIX_FMT_NONE},
627 627
     .long_name = NULL_IF_CONFIG_SMALL("libvpx VP8"),
628 628
     .priv_class = &class,
... ...
@@ -414,7 +414,7 @@ AVCodec ff_libxavs_encoder = {
414 414
     .init           = XAVS_init,
415 415
     .encode         = XAVS_frame,
416 416
     .close          = XAVS_close,
417
-    .capabilities   = CODEC_CAP_DELAY,
417
+    .capabilities   = CODEC_CAP_DELAY | CODEC_CAP_AUTO_THREADS,
418 418
     .pix_fmts       = (const enum PixelFormat[]) { PIX_FMT_YUV420P, PIX_FMT_NONE },
419 419
     .long_name      = NULL_IF_CONFIG_SMALL("libxavs - the Chinese Audio Video Standard Encoder"),
420 420
     .priv_class     = &class,
... ...
@@ -22,6 +22,7 @@
22 22
 #define BITSTREAM_READER_LE
23 23
 #include "avcodec.h"
24 24
 #include "msgsmdec.h"
25
+#include "gsm.h"
25 26
 #include "gsmdec_template.c"
26 27
 
27 28
 int ff_msgsm_decode_block(AVCodecContext *avctx, int16_t *samples,
... ...
@@ -1,5 +1,5 @@
1 1
 /*
2
- * Micrsoft RLE Video Decoder
2
+ * Microsoft RLE video decoder
3 3
  * Copyright (C) 2003 the ffmpeg project
4 4
  *
5 5
  * This file is part of FFmpeg.
... ...
@@ -21,7 +21,7 @@
21 21
 
22 22
 /**
23 23
  * @file
24
- * MS RLE Video Decoder by Mike Melanson (melanson@pcisys.net)
24
+ * MS RLE video decoder by Mike Melanson (melanson@pcisys.net)
25 25
  * For more information about the MS RLE format, visit:
26 26
  *   http://www.pcisys.net/~melanson/codecs/
27 27
  *
... ...
@@ -33,7 +33,7 @@
33 33
 
34 34
 static av_cold int pcm_encode_init(AVCodecContext *avctx)
35 35
 {
36
-    avctx->frame_size = 1;
36
+    avctx->frame_size = 0;
37 37
     switch(avctx->codec->id) {
38 38
     case CODEC_ID_PCM_ALAW:
39 39
         pcm_alaw_tableinit();
... ...
@@ -21,7 +21,7 @@
21 21
 #define AVCODEC_VERSION_H
22 22
 
23 23
 #define LIBAVCODEC_VERSION_MAJOR 53
24
-#define LIBAVCODEC_VERSION_MINOR 54
24
+#define LIBAVCODEC_VERSION_MINOR 55
25 25
 #define LIBAVCODEC_VERSION_MICRO 100
26 26
 
27 27
 #define LIBAVCODEC_VERSION_INT  AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
... ...
@@ -640,11 +640,14 @@ cglobal fft_dispatch%3%2, 2,5,8, z, nbits
640 640
 %endmacro ; DECL_FFT
641 641
 
642 642
 %ifdef HAVE_AVX
643
+INIT_YMM
643 644
 DECL_FFT 6, _avx
644 645
 DECL_FFT 6, _avx, _interleave
645 646
 %endif
647
+INIT_XMM
646 648
 DECL_FFT 5, _sse
647 649
 DECL_FFT 5, _sse, _interleave
650
+INIT_MMX
648 651
 DECL_FFT 4, _3dn
649 652
 DECL_FFT 4, _3dn, _interleave
650 653
 DECL_FFT 4, _3dn2
... ...
@@ -37,7 +37,7 @@ static int gsm_read_packet(AVFormatContext *s, AVPacket *pkt)
37 37
 {
38 38
     int ret, size;
39 39
 
40
-    size = GSM_BLOCK_SIZE * 32;
40
+    size = GSM_BLOCK_SIZE;
41 41
 
42 42
     pkt->pos = avio_tell(s->pb);
43 43
     pkt->stream_index = 0;
... ...
@@ -48,7 +48,7 @@ static int gsm_read_packet(AVFormatContext *s, AVPacket *pkt)
48 48
         return ret < 0 ? ret : AVERROR(EIO);
49 49
     }
50 50
     pkt->size     = ret;
51
-    pkt->duration = ret      / GSM_BLOCK_SIZE;
51
+    pkt->duration = 1;
52 52
     pkt->pts      = pkt->pos / GSM_BLOCK_SIZE;
53 53
 
54 54
     return 0;
... ...
@@ -65,7 +65,6 @@ static int gsm_read_header(AVFormatContext *s, AVFormatParameters *ap)
65 65
     st->codec->codec_id    = s->iformat->value;
66 66
     st->codec->channels    = 1;
67 67
     st->codec->sample_rate = c->sample_rate;
68
-    st->codec->block_align = GSM_BLOCK_SIZE;
69 68
     st->codec->bit_rate    = GSM_BLOCK_SIZE * 8 * c->sample_rate / GSM_BLOCK_SAMPLES;
70 69
 
71 70
     avpriv_set_pts_info(st, 64, GSM_BLOCK_SAMPLES, GSM_SAMPLE_RATE);
... ...
@@ -73,39 +72,6 @@ static int gsm_read_header(AVFormatContext *s, AVFormatParameters *ap)
73 73
     return 0;
74 74
 }
75 75
 
76
-static int gsm_read_seek2(AVFormatContext *s, int stream_index, int64_t min_ts,
77
-                          int64_t ts, int64_t max_ts, int flags)
78
-{
79
-    GSMDemuxerContext *c = s->priv_data;
80
-
81
-    /* convert timestamps to file positions */
82
-    if (!(flags & AVSEEK_FLAG_BYTE)) {
83
-        if (stream_index < 0) {
84
-            AVRational bitrate_q = { GSM_BLOCK_SAMPLES, c->sample_rate * GSM_BLOCK_SIZE };
85
-            ts     = av_rescale_q(ts,     AV_TIME_BASE_Q, bitrate_q);
86
-            min_ts = av_rescale_q(min_ts, AV_TIME_BASE_Q, bitrate_q);
87
-            max_ts = av_rescale_q(max_ts, AV_TIME_BASE_Q, bitrate_q);
88
-        } else {
89
-            ts     *= GSM_BLOCK_SIZE;
90
-            min_ts *= GSM_BLOCK_SIZE;
91
-            max_ts *= GSM_BLOCK_SIZE;
92
-        }
93
-    }
94
-    /* round to nearest block boundary */
95
-    ts = (ts + GSM_BLOCK_SIZE / 2) / GSM_BLOCK_SIZE * GSM_BLOCK_SIZE;
96
-    ts = FFMAX(0, ts);
97
-
98
-    /* handle min/max */
99
-    while (ts < min_ts)
100
-        ts += GSM_BLOCK_SIZE;
101
-    while (ts > max_ts)
102
-        ts -= GSM_BLOCK_SIZE;
103
-    if (ts < min_ts || ts > max_ts)
104
-        return -1;
105
-
106
-    return avio_seek(s->pb, ts, SEEK_SET);
107
-}
108
-
109 76
 static const AVOption options[] = {
110 77
     { "sample_rate", "", offsetof(GSMDemuxerContext, sample_rate),
111 78
        AV_OPT_TYPE_INT, {.dbl = GSM_SAMPLE_RATE}, 1, INT_MAX / GSM_BLOCK_SIZE,
... ...
@@ -126,7 +92,7 @@ AVInputFormat ff_gsm_demuxer = {
126 126
     .priv_data_size = sizeof(GSMDemuxerContext),
127 127
     .read_header    = gsm_read_header,
128 128
     .read_packet    = gsm_read_packet,
129
-    .read_seek2     = gsm_read_seek2,
129
+    .flags          = AVFMT_GENERIC_INDEX,
130 130
     .extensions     = "gsm",
131 131
     .value          = CODEC_ID_GSM,
132 132
     .priv_class     = &class,
... ...
@@ -1022,6 +1022,7 @@ static int read_seek(AVFormatContext *s, int stream_index,
1022 1022
 static int read_close(AVFormatContext *s)
1023 1023
 {
1024 1024
     WtvContext *wtv = s->priv_data;
1025
+    av_freep(&wtv->index_entries);
1025 1026
     wtvfile_close(wtv->pb);
1026 1027
     return 0;
1027 1028
 }
... ...
@@ -67,7 +67,7 @@ $EGREP $OPT '^\+ *(const *|)static' $*| $EGREP --color=always '[^=]= *(0|NULL)[^
67 67
 cat $TMP
68 68
 hiegrep '# *ifdef * (HAVE|CONFIG)_' 'ifdefs that should be #if' $*
69 69
 
70
-hiegrep '\b(awnser|cant|dont|wont|usefull|successfull|occured|teh|alot|wether|skiped|heigth|informations|colums|loosy|loosing|seperate|preceed|upto|paket)\b' 'common typos' $*
70
+hiegrep '\b(awnser|cant|dont|wont|usefull|successfull|occured|teh|alot|wether|skiped|heigth|informations|colums|loosy|loosing|seperate|preceed|upto|paket|posible)\b' 'common typos' $*
71 71
 
72 72
 hiegrep 'av_log\( *NULL' 'Missing context in av_log' $*
73 73
 hiegrep '[^sn]printf' 'Please use av_log' $*