summaryrefslogtreecommitdiff
authorMichael Niedermayer <michaelni@gmx.at>2012-01-11 23:52:40 (GMT)
committer Michael Niedermayer <michaelni@gmx.at>2012-01-12 00:10:32 (GMT)
commit794006f8fe403ccd2993513a8e4fbe885ef7f9fb (patch)
tree42edca40fc6f5ba24543f611086891ae4c6b6f68
parent4093d130d1934edcd098014d306492173527f1f6 (diff)
parente7d02b04dcfb65d1873b81bd3281442ac5ddec1d (diff)
downloadffmpeg-794006f8fe403ccd2993513a8e4fbe885ef7f9fb.zip
ffmpeg-794006f8fe403ccd2993513a8e4fbe885ef7f9fb.tar.gz
ffmpeg-794006f8fe403ccd2993513a8e4fbe885ef7f9fb.tar.bz2
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>
Diffstat
-rw-r--r--Changelog3
-rw-r--r--RELEASE1
-rw-r--r--cmdutils.c4
-rwxr-xr-xconfigure2
-rw-r--r--doc/avtools-common-opts.texi4
-rw-r--r--libavcodec/Makefile1
-rw-r--r--libavcodec/allcodecs.c1
-rw-r--r--libavcodec/error_resilience.c2
-rw-r--r--libavcodec/gsm.h31
-rw-r--r--libavcodec/gsm_parser.c79
-rw-r--r--libavcodec/gsmdec_data.h5
-rw-r--r--libavcodec/gsmdec_template.c1
-rw-r--r--libavcodec/libgsm.c7
-rw-r--r--libavcodec/libvpxdec.c3
-rw-r--r--libavcodec/libvpxenc.c2
-rw-r--r--libavcodec/libxavs.c2
-rw-r--r--libavcodec/msgsmdec.c1
-rw-r--r--libavcodec/msrle.c4
-rw-r--r--libavcodec/pcm.c2
-rw-r--r--libavcodec/version.h2
-rw-r--r--libavcodec/x86/fft_mmx.asm3
-rw-r--r--libavformat/gsmdec.c40
-rw-r--r--libavformat/wtvdec.c1
-rwxr-xr-xtools/patcheck2
24 files changed, 144 insertions, 59 deletions
diff --git a/Changelog b/Changelog
index 36430d7..ac68645 100644
--- a/Changelog
+++ b/Changelog
@@ -13,6 +13,7 @@ version next:
- tinterlace video filter
- astreamsync audio filter
- amerge audio filter
+- GSM audio parser
- Automatic thread count based on detection number of (available) CPU cores
- y41p Brooktree Uncompressed 4:1:1 12-bit encoder and decoder
- ffprobe -show_error option
@@ -22,6 +23,8 @@ version next:
- ffprobe -show_frames option
- silencedetect audio filter
- ffprobe -show_program_version, -show_library_versions, -show_versions options
+- rv34: frame-level multi-threading
+- optimized iMDCT transform on x86 using SSE for for mpegaudiodec
version 0.9:
diff --git a/RELEASE b/RELEASE
index 4fda45b..ba03fc9 100644
--- a/RELEASE
+++ b/RELEASE
@@ -1 +1,2 @@
0.9.1.git
+
diff --git a/cmdutils.c b/cmdutils.c
index 36e472a..344e506 100644
--- a/cmdutils.c
+++ b/cmdutils.c
@@ -34,7 +34,9 @@
#include "libavdevice/avdevice.h"
#include "libswscale/swscale.h"
#include "libswresample/swresample.h"
+#if CONFIG_POSTPROC
#include "libpostproc/postprocess.h"
+#endif
#include "libavutil/avstring.h"
#include "libavutil/mathematics.h"
#include "libavutil/parseutils.h"
@@ -607,7 +609,9 @@ static void print_all_libs_info(int flags, int level)
PRINT_LIB_INFO(avfilter, AVFILTER, flags, level);
PRINT_LIB_INFO(swscale, SWSCALE, flags, level);
PRINT_LIB_INFO(swresample,SWRESAMPLE, flags, level);
+#if CONFIG_POSTPROC
PRINT_LIB_INFO(postproc, POSTPROC, flags, level);
+#endif
}
static void print_program_info(int flags, int level)
diff --git a/configure b/configure
index 43b63bb..7886735 100755
--- a/configure
+++ b/configure
@@ -253,7 +253,7 @@ Advanced options (experts only):
--disable-armvfp disable ARM VFP optimizations
--disable-iwmmxt disable iwmmxt optimizations
--disable-mmi disable MMI optimizations
- --disable-neon disable neon optimizations
+ --disable-neon disable NEON optimizations
--disable-vis disable VIS optimizations
--disable-yasm disable use of yasm assembler
--enable-pic build position-independent code
diff --git a/doc/avtools-common-opts.texi b/doc/avtools-common-opts.texi
index 1a50d6e..94d47fd 100644
--- a/doc/avtools-common-opts.texi
+++ b/doc/avtools-common-opts.texi
@@ -119,8 +119,8 @@ Set the logging level used by the library.
By default the program logs to stderr, if coloring is supported by the
terminal, colors are used to mark errors and warnings. Log coloring
can be disabled setting the environment variable
-@env{FFMPEG_FORCE_NOCOLOR} or @env{NO_COLOR}, or can be forced setting
-the environment variable @env{FFMPEG_FORCE_COLOR}.
+@env{AV_LOG_FORCE_NOCOLOR} or @env{NO_COLOR}, or can be forced setting
+the environment variable @env{AV_LOG_FORCE_COLOR}.
The use of the environment variable @env{NO_COLOR} is deprecated and
will be dropped in a following FFmpeg version.
diff --git a/libavcodec/Makefile b/libavcodec/Makefile
index 81bac89..f094d16 100644
--- a/libavcodec/Makefile
+++ b/libavcodec/Makefile
@@ -655,6 +655,7 @@ OBJS-$(CONFIG_DVBSUB_PARSER) += dvbsub_parser.o
OBJS-$(CONFIG_DVDSUB_PARSER) += dvdsub_parser.o
OBJS-$(CONFIG_FLAC_PARSER) += flac_parser.o flacdata.o flac.o \
vorbis_data.o
+OBJS-$(CONFIG_GSM_PARSER) += gsm_parser.o
OBJS-$(CONFIG_H261_PARSER) += h261_parser.o
OBJS-$(CONFIG_H263_PARSER) += h263_parser.o
OBJS-$(CONFIG_H264_PARSER) += h264_parser.o h264.o \
diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c
index a15d562..1e36235 100644
--- a/libavcodec/allcodecs.c
+++ b/libavcodec/allcodecs.c
@@ -432,6 +432,7 @@ void avcodec_register_all(void)
REGISTER_PARSER (DVBSUB, dvbsub);
REGISTER_PARSER (DVDSUB, dvdsub);
REGISTER_PARSER (FLAC, flac);
+ REGISTER_PARSER (GSM, gsm);
REGISTER_PARSER (H261, h261);
REGISTER_PARSER (H263, h263);
REGISTER_PARSER (H264, h264);
diff --git a/libavcodec/error_resilience.c b/libavcodec/error_resilience.c
index d296a78..a3075e1 100644
--- a/libavcodec/error_resilience.c
+++ b/libavcodec/error_resilience.c
@@ -50,7 +50,7 @@ static void decode_mb(MpegEncContext *s, int ref){
h->mb_xy= s->mb_x + s->mb_y*s->mb_stride;
memset(h->non_zero_count_cache, 0, sizeof(h->non_zero_count_cache));
assert(ref>=0);
- /* FIXME: It is posible albeit uncommon that slice references
+ /* FIXME: It is possible albeit uncommon that slice references
* differ between slices. We take the easy approach and ignore
* it for now. If this turns out to have any relevance in
* practice then correct remapping should be added. */
diff --git a/libavcodec/gsm.h b/libavcodec/gsm.h
new file mode 100644
index 0000000..c7c3e22
--- a/dev/null
+++ b/libavcodec/gsm.h
@@ -0,0 +1,31 @@
+/*
+ * GSM common header
+ *
+ * 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
+ */
+
+#ifndef AVCODEC_GSM_H
+#define AVCODEC_GSM_H
+
+/* bytes per block */
+#define GSM_BLOCK_SIZE 33
+#define GSM_MS_BLOCK_SIZE 65
+
+/* samples per block */
+#define GSM_FRAME_SIZE 160
+
+#endif /* AVCODEC_GSM_H */
diff --git a/libavcodec/gsm_parser.c b/libavcodec/gsm_parser.c
new file mode 100644
index 0000000..a2965d3
--- a/dev/null
+++ b/libavcodec/gsm_parser.c
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2012 Justin Ruggles
+ *
+ * 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
+ * GSM audio parser
+ *
+ * Splits packets into individual blocks.
+ */
+
+#include "parser.h"
+#include "gsm.h"
+
+typedef struct GSMParseContext {
+ ParseContext pc;
+ int block_size;
+ int remaining;
+} GSMParseContext;
+
+static int gsm_parse(AVCodecParserContext *s1, AVCodecContext *avctx,
+ const uint8_t **poutbuf, int *poutbuf_size,
+ const uint8_t *buf, int buf_size)
+{
+ GSMParseContext *s = s1->priv_data;
+ ParseContext *pc = &s->pc;
+ int next;
+
+ if (!s->block_size) {
+ switch (avctx->codec_id) {
+ case CODEC_ID_GSM: s->block_size = GSM_BLOCK_SIZE; break;
+ case CODEC_ID_GSM_MS: s->block_size = GSM_MS_BLOCK_SIZE; break;
+ default:
+ return AVERROR(EINVAL);
+ }
+ }
+
+ if (!s->remaining)
+ s->remaining = s->block_size;
+ if (s->remaining <= buf_size) {
+ next = s->remaining;
+ s->remaining = 0;
+ } else {
+ next = END_NOT_FOUND;
+ s->remaining -= buf_size;
+ }
+
+ if (ff_combine_frame(pc, next, &buf, &buf_size) < 0 || !buf_size) {
+ *poutbuf = NULL;
+ *poutbuf_size = 0;
+ return buf_size;
+ }
+ *poutbuf = buf;
+ *poutbuf_size = buf_size;
+ return next;
+}
+
+AVCodecParser ff_gsm_parser = {
+ .codec_ids = { CODEC_ID_GSM, CODEC_ID_GSM_MS },
+ .priv_data_size = sizeof(GSMParseContext),
+ .parser_parse = gsm_parse,
+ .parser_close = ff_parse_close,
+};
diff --git a/libavcodec/gsmdec_data.h b/libavcodec/gsmdec_data.h
index 4e2c7e6..3eb30b8 100644
--- a/libavcodec/gsmdec_data.h
+++ b/libavcodec/gsmdec_data.h
@@ -25,11 +25,6 @@
#include <stdint.h>
#include "avcodec.h"
-// input and output sizes in byte
-#define GSM_BLOCK_SIZE 33
-#define GSM_MS_BLOCK_SIZE 65
-#define GSM_FRAME_SIZE 160
-
typedef struct {
AVFrame frame;
// Contains first 120 elements from the previous frame
diff --git a/libavcodec/gsmdec_template.c b/libavcodec/gsmdec_template.c
index b63ec9e..0f55953 100644
--- a/libavcodec/gsmdec_template.c
+++ b/libavcodec/gsmdec_template.c
@@ -25,6 +25,7 @@
*/
#include "get_bits.h"
+#include "gsm.h"
#include "gsmdec_data.h"
static void apcm_dequant_add(GetBitContext *gb, int16_t *dst)
diff --git a/libavcodec/libgsm.c b/libavcodec/libgsm.c
index ed4962a..23950c0 100644
--- a/libavcodec/libgsm.c
+++ b/libavcodec/libgsm.c
@@ -27,13 +27,10 @@
// The idiosyncrasies of GSM-in-WAV are explained at http://kbs.cs.tu-berlin.de/~jutta/toast.html
-#include "avcodec.h"
#include <gsm/gsm.h>
-// gsm.h misses some essential constants
-#define GSM_BLOCK_SIZE 33
-#define GSM_MS_BLOCK_SIZE 65
-#define GSM_FRAME_SIZE 160
+#include "avcodec.h"
+#include "gsm.h"
static av_cold int libgsm_encode_init(AVCodecContext *avctx) {
if (avctx->channels > 1) {
diff --git a/libavcodec/libvpxdec.c b/libavcodec/libvpxdec.c
index 15329f3..84e5ac8 100644
--- a/libavcodec/libvpxdec.c
+++ b/libavcodec/libvpxdec.c
@@ -119,5 +119,6 @@ AVCodec ff_libvpx_decoder = {
.init = vp8_init,
.close = vp8_free,
.decode = vp8_decode,
- .long_name = NULL_IF_CONFIG_SMALL("libvpx VP8"),
+ .capabilities = CODEC_CAP_AUTO_THREADS,
+ .long_name = NULL_IF_CONFIG_SMALL("libvpx VP8"),
};
diff --git a/libavcodec/libvpxenc.c b/libavcodec/libvpxenc.c
index 044ea32..621f818 100644
--- a/libavcodec/libvpxenc.c
+++ b/libavcodec/libvpxenc.c
@@ -622,7 +622,7 @@ AVCodec ff_libvpx_encoder = {
.init = vp8_init,
.encode = vp8_encode,
.close = vp8_free,
- .capabilities = CODEC_CAP_DELAY,
+ .capabilities = CODEC_CAP_DELAY | CODEC_CAP_AUTO_THREADS,
.pix_fmts = (const enum PixelFormat[]){PIX_FMT_YUV420P, PIX_FMT_NONE},
.long_name = NULL_IF_CONFIG_SMALL("libvpx VP8"),
.priv_class = &class,
diff --git a/libavcodec/libxavs.c b/libavcodec/libxavs.c
index 4d9bec0..aa93b55 100644
--- a/libavcodec/libxavs.c
+++ b/libavcodec/libxavs.c
@@ -414,7 +414,7 @@ AVCodec ff_libxavs_encoder = {
.init = XAVS_init,
.encode = XAVS_frame,
.close = XAVS_close,
- .capabilities = CODEC_CAP_DELAY,
+ .capabilities = CODEC_CAP_DELAY | CODEC_CAP_AUTO_THREADS,
.pix_fmts = (const enum PixelFormat[]) { PIX_FMT_YUV420P, PIX_FMT_NONE },
.long_name = NULL_IF_CONFIG_SMALL("libxavs - the Chinese Audio Video Standard Encoder"),
.priv_class = &class,
diff --git a/libavcodec/msgsmdec.c b/libavcodec/msgsmdec.c
index 2ec553b..90e83ae 100644
--- a/libavcodec/msgsmdec.c
+++ b/libavcodec/msgsmdec.c
@@ -22,6 +22,7 @@
#define BITSTREAM_READER_LE
#include "avcodec.h"
#include "msgsmdec.h"
+#include "gsm.h"
#include "gsmdec_template.c"
int ff_msgsm_decode_block(AVCodecContext *avctx, int16_t *samples,
diff --git a/libavcodec/msrle.c b/libavcodec/msrle.c
index 30159bb..2f3f876 100644
--- a/libavcodec/msrle.c
+++ b/libavcodec/msrle.c
@@ -1,5 +1,5 @@
/*
- * Micrsoft RLE Video Decoder
+ * Microsoft RLE video decoder
* Copyright (C) 2003 the ffmpeg project
*
* This file is part of FFmpeg.
@@ -21,7 +21,7 @@
/**
* @file
- * MS RLE Video Decoder by Mike Melanson (melanson@pcisys.net)
+ * MS RLE video decoder by Mike Melanson (melanson@pcisys.net)
* For more information about the MS RLE format, visit:
* http://www.pcisys.net/~melanson/codecs/
*
diff --git a/libavcodec/pcm.c b/libavcodec/pcm.c
index 66b0953..3609c3b 100644
--- a/libavcodec/pcm.c
+++ b/libavcodec/pcm.c
@@ -33,7 +33,7 @@
static av_cold int pcm_encode_init(AVCodecContext *avctx)
{
- avctx->frame_size = 1;
+ avctx->frame_size = 0;
switch(avctx->codec->id) {
case CODEC_ID_PCM_ALAW:
pcm_alaw_tableinit();
diff --git a/libavcodec/version.h b/libavcodec/version.h
index ce4259f..938e533 100644
--- a/libavcodec/version.h
+++ b/libavcodec/version.h
@@ -21,7 +21,7 @@
#define AVCODEC_VERSION_H
#define LIBAVCODEC_VERSION_MAJOR 53
-#define LIBAVCODEC_VERSION_MINOR 54
+#define LIBAVCODEC_VERSION_MINOR 55
#define LIBAVCODEC_VERSION_MICRO 100
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
diff --git a/libavcodec/x86/fft_mmx.asm b/libavcodec/x86/fft_mmx.asm
index 8e54367..648ba07 100644
--- a/libavcodec/x86/fft_mmx.asm
+++ b/libavcodec/x86/fft_mmx.asm
@@ -640,11 +640,14 @@ cglobal fft_dispatch%3%2, 2,5,8, z, nbits
%endmacro ; DECL_FFT
%ifdef HAVE_AVX
+INIT_YMM
DECL_FFT 6, _avx
DECL_FFT 6, _avx, _interleave
%endif
+INIT_XMM
DECL_FFT 5, _sse
DECL_FFT 5, _sse, _interleave
+INIT_MMX
DECL_FFT 4, _3dn
DECL_FFT 4, _3dn, _interleave
DECL_FFT 4, _3dn2
diff --git a/libavformat/gsmdec.c b/libavformat/gsmdec.c
index 2360887..443f820 100644
--- a/libavformat/gsmdec.c
+++ b/libavformat/gsmdec.c
@@ -37,7 +37,7 @@ static int gsm_read_packet(AVFormatContext *s, AVPacket *pkt)
{
int ret, size;
- size = GSM_BLOCK_SIZE * 32;
+ size = GSM_BLOCK_SIZE;
pkt->pos = avio_tell(s->pb);
pkt->stream_index = 0;
@@ -48,7 +48,7 @@ static int gsm_read_packet(AVFormatContext *s, AVPacket *pkt)
return ret < 0 ? ret : AVERROR(EIO);
}
pkt->size = ret;
- pkt->duration = ret / GSM_BLOCK_SIZE;
+ pkt->duration = 1;
pkt->pts = pkt->pos / GSM_BLOCK_SIZE;
return 0;
@@ -65,7 +65,6 @@ static int gsm_read_header(AVFormatContext *s, AVFormatParameters *ap)
st->codec->codec_id = s->iformat->value;
st->codec->channels = 1;
st->codec->sample_rate = c->sample_rate;
- st->codec->block_align = GSM_BLOCK_SIZE;
st->codec->bit_rate = GSM_BLOCK_SIZE * 8 * c->sample_rate / GSM_BLOCK_SAMPLES;
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)
return 0;
}
-static int gsm_read_seek2(AVFormatContext *s, int stream_index, int64_t min_ts,
- int64_t ts, int64_t max_ts, int flags)
-{
- GSMDemuxerContext *c = s->priv_data;
-
- /* convert timestamps to file positions */
- if (!(flags & AVSEEK_FLAG_BYTE)) {
- if (stream_index < 0) {
- AVRational bitrate_q = { GSM_BLOCK_SAMPLES, c->sample_rate * GSM_BLOCK_SIZE };
- ts = av_rescale_q(ts, AV_TIME_BASE_Q, bitrate_q);
- min_ts = av_rescale_q(min_ts, AV_TIME_BASE_Q, bitrate_q);
- max_ts = av_rescale_q(max_ts, AV_TIME_BASE_Q, bitrate_q);
- } else {
- ts *= GSM_BLOCK_SIZE;
- min_ts *= GSM_BLOCK_SIZE;
- max_ts *= GSM_BLOCK_SIZE;
- }
- }
- /* round to nearest block boundary */
- ts = (ts + GSM_BLOCK_SIZE / 2) / GSM_BLOCK_SIZE * GSM_BLOCK_SIZE;
- ts = FFMAX(0, ts);
-
- /* handle min/max */
- while (ts < min_ts)
- ts += GSM_BLOCK_SIZE;
- while (ts > max_ts)
- ts -= GSM_BLOCK_SIZE;
- if (ts < min_ts || ts > max_ts)
- return -1;
-
- return avio_seek(s->pb, ts, SEEK_SET);
-}
-
static const AVOption options[] = {
{ "sample_rate", "", offsetof(GSMDemuxerContext, sample_rate),
AV_OPT_TYPE_INT, {.dbl = GSM_SAMPLE_RATE}, 1, INT_MAX / GSM_BLOCK_SIZE,
@@ -126,7 +92,7 @@ AVInputFormat ff_gsm_demuxer = {
.priv_data_size = sizeof(GSMDemuxerContext),
.read_header = gsm_read_header,
.read_packet = gsm_read_packet,
- .read_seek2 = gsm_read_seek2,
+ .flags = AVFMT_GENERIC_INDEX,
.extensions = "gsm",
.value = CODEC_ID_GSM,
.priv_class = &class,
diff --git a/libavformat/wtvdec.c b/libavformat/wtvdec.c
index c133d71..56050e9 100644
--- a/libavformat/wtvdec.c
+++ b/libavformat/wtvdec.c
@@ -1022,6 +1022,7 @@ static int read_seek(AVFormatContext *s, int stream_index,
static int read_close(AVFormatContext *s)
{
WtvContext *wtv = s->priv_data;
+ av_freep(&wtv->index_entries);
wtvfile_close(wtv->pb);
return 0;
}
diff --git a/tools/patcheck b/tools/patcheck
index 39f5715..35c0ee3 100755
--- a/tools/patcheck
+++ b/tools/patcheck
@@ -67,7 +67,7 @@ $EGREP $OPT '^\+ *(const *|)static' $*| $EGREP --color=always '[^=]= *(0|NULL)[^
cat $TMP
hiegrep '# *ifdef * (HAVE|CONFIG)_' 'ifdefs that should be #if' $*
-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' $*
+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' $*
hiegrep 'av_log\( *NULL' 'Missing context in av_log' $*
hiegrep '[^sn]printf' 'Please use av_log' $*