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>
This commit is contained in:
commit
794006f8fe
|
@ -13,6 +13,7 @@ version next:
|
||||||
- tinterlace video filter
|
- tinterlace video filter
|
||||||
- astreamsync audio filter
|
- astreamsync audio filter
|
||||||
- amerge audio filter
|
- amerge audio filter
|
||||||
|
- GSM audio parser
|
||||||
- Automatic thread count based on detection number of (available) CPU cores
|
- Automatic thread count based on detection number of (available) CPU cores
|
||||||
- y41p Brooktree Uncompressed 4:1:1 12-bit encoder and decoder
|
- y41p Brooktree Uncompressed 4:1:1 12-bit encoder and decoder
|
||||||
- ffprobe -show_error option
|
- ffprobe -show_error option
|
||||||
|
@ -22,6 +23,8 @@ version next:
|
||||||
- ffprobe -show_frames option
|
- ffprobe -show_frames option
|
||||||
- silencedetect audio filter
|
- silencedetect audio filter
|
||||||
- ffprobe -show_program_version, -show_library_versions, -show_versions options
|
- 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:
|
version 0.9:
|
||||||
|
|
|
@ -34,7 +34,9 @@
|
||||||
#include "libavdevice/avdevice.h"
|
#include "libavdevice/avdevice.h"
|
||||||
#include "libswscale/swscale.h"
|
#include "libswscale/swscale.h"
|
||||||
#include "libswresample/swresample.h"
|
#include "libswresample/swresample.h"
|
||||||
|
#if CONFIG_POSTPROC
|
||||||
#include "libpostproc/postprocess.h"
|
#include "libpostproc/postprocess.h"
|
||||||
|
#endif
|
||||||
#include "libavutil/avstring.h"
|
#include "libavutil/avstring.h"
|
||||||
#include "libavutil/mathematics.h"
|
#include "libavutil/mathematics.h"
|
||||||
#include "libavutil/parseutils.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(avfilter, AVFILTER, flags, level);
|
||||||
PRINT_LIB_INFO(swscale, SWSCALE, flags, level);
|
PRINT_LIB_INFO(swscale, SWSCALE, flags, level);
|
||||||
PRINT_LIB_INFO(swresample,SWRESAMPLE, flags, level);
|
PRINT_LIB_INFO(swresample,SWRESAMPLE, flags, level);
|
||||||
|
#if CONFIG_POSTPROC
|
||||||
PRINT_LIB_INFO(postproc, POSTPROC, flags, level);
|
PRINT_LIB_INFO(postproc, POSTPROC, flags, level);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static void print_program_info(int flags, int level)
|
static void print_program_info(int flags, int level)
|
||||||
|
|
2
configure
vendored
2
configure
vendored
|
@ -253,7 +253,7 @@ Advanced options (experts only):
|
||||||
--disable-armvfp disable ARM VFP optimizations
|
--disable-armvfp disable ARM VFP optimizations
|
||||||
--disable-iwmmxt disable iwmmxt optimizations
|
--disable-iwmmxt disable iwmmxt optimizations
|
||||||
--disable-mmi disable MMI optimizations
|
--disable-mmi disable MMI optimizations
|
||||||
--disable-neon disable neon optimizations
|
--disable-neon disable NEON optimizations
|
||||||
--disable-vis disable VIS optimizations
|
--disable-vis disable VIS optimizations
|
||||||
--disable-yasm disable use of yasm assembler
|
--disable-yasm disable use of yasm assembler
|
||||||
--enable-pic build position-independent code
|
--enable-pic build position-independent code
|
||||||
|
|
|
@ -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
|
By default the program logs to stderr, if coloring is supported by the
|
||||||
terminal, colors are used to mark errors and warnings. Log coloring
|
terminal, colors are used to mark errors and warnings. Log coloring
|
||||||
can be disabled setting the environment variable
|
can be disabled setting the environment variable
|
||||||
@env{FFMPEG_FORCE_NOCOLOR} or @env{NO_COLOR}, or can be forced setting
|
@env{AV_LOG_FORCE_NOCOLOR} or @env{NO_COLOR}, or can be forced setting
|
||||||
the environment variable @env{FFMPEG_FORCE_COLOR}.
|
the environment variable @env{AV_LOG_FORCE_COLOR}.
|
||||||
The use of the environment variable @env{NO_COLOR} is deprecated and
|
The use of the environment variable @env{NO_COLOR} is deprecated and
|
||||||
will be dropped in a following FFmpeg version.
|
will be dropped in a following FFmpeg version.
|
||||||
|
|
||||||
|
|
|
@ -655,6 +655,7 @@ OBJS-$(CONFIG_DVBSUB_PARSER) += dvbsub_parser.o
|
||||||
OBJS-$(CONFIG_DVDSUB_PARSER) += dvdsub_parser.o
|
OBJS-$(CONFIG_DVDSUB_PARSER) += dvdsub_parser.o
|
||||||
OBJS-$(CONFIG_FLAC_PARSER) += flac_parser.o flacdata.o flac.o \
|
OBJS-$(CONFIG_FLAC_PARSER) += flac_parser.o flacdata.o flac.o \
|
||||||
vorbis_data.o
|
vorbis_data.o
|
||||||
|
OBJS-$(CONFIG_GSM_PARSER) += gsm_parser.o
|
||||||
OBJS-$(CONFIG_H261_PARSER) += h261_parser.o
|
OBJS-$(CONFIG_H261_PARSER) += h261_parser.o
|
||||||
OBJS-$(CONFIG_H263_PARSER) += h263_parser.o
|
OBJS-$(CONFIG_H263_PARSER) += h263_parser.o
|
||||||
OBJS-$(CONFIG_H264_PARSER) += h264_parser.o h264.o \
|
OBJS-$(CONFIG_H264_PARSER) += h264_parser.o h264.o \
|
||||||
|
|
|
@ -432,6 +432,7 @@ void avcodec_register_all(void)
|
||||||
REGISTER_PARSER (DVBSUB, dvbsub);
|
REGISTER_PARSER (DVBSUB, dvbsub);
|
||||||
REGISTER_PARSER (DVDSUB, dvdsub);
|
REGISTER_PARSER (DVDSUB, dvdsub);
|
||||||
REGISTER_PARSER (FLAC, flac);
|
REGISTER_PARSER (FLAC, flac);
|
||||||
|
REGISTER_PARSER (GSM, gsm);
|
||||||
REGISTER_PARSER (H261, h261);
|
REGISTER_PARSER (H261, h261);
|
||||||
REGISTER_PARSER (H263, h263);
|
REGISTER_PARSER (H263, h263);
|
||||||
REGISTER_PARSER (H264, h264);
|
REGISTER_PARSER (H264, h264);
|
||||||
|
|
|
@ -50,7 +50,7 @@ static void decode_mb(MpegEncContext *s, int ref){
|
||||||
h->mb_xy= s->mb_x + s->mb_y*s->mb_stride;
|
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));
|
memset(h->non_zero_count_cache, 0, sizeof(h->non_zero_count_cache));
|
||||||
assert(ref>=0);
|
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
|
* differ between slices. We take the easy approach and ignore
|
||||||
* it for now. If this turns out to have any relevance in
|
* it for now. If this turns out to have any relevance in
|
||||||
* practice then correct remapping should be added. */
|
* practice then correct remapping should be added. */
|
||||||
|
|
31
libavcodec/gsm.h
Normal file
31
libavcodec/gsm.h
Normal file
|
@ -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 */
|
79
libavcodec/gsm_parser.c
Normal file
79
libavcodec/gsm_parser.c
Normal file
|
@ -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,
|
||||||
|
};
|
|
@ -25,11 +25,6 @@
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include "avcodec.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 {
|
typedef struct {
|
||||||
AVFrame frame;
|
AVFrame frame;
|
||||||
// Contains first 120 elements from the previous frame
|
// Contains first 120 elements from the previous frame
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "get_bits.h"
|
#include "get_bits.h"
|
||||||
|
#include "gsm.h"
|
||||||
#include "gsmdec_data.h"
|
#include "gsmdec_data.h"
|
||||||
|
|
||||||
static void apcm_dequant_add(GetBitContext *gb, int16_t *dst)
|
static void apcm_dequant_add(GetBitContext *gb, int16_t *dst)
|
||||||
|
|
|
@ -27,13 +27,10 @@
|
||||||
|
|
||||||
// The idiosyncrasies of GSM-in-WAV are explained at http://kbs.cs.tu-berlin.de/~jutta/toast.html
|
// 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>
|
#include <gsm/gsm.h>
|
||||||
|
|
||||||
// gsm.h misses some essential constants
|
#include "avcodec.h"
|
||||||
#define GSM_BLOCK_SIZE 33
|
#include "gsm.h"
|
||||||
#define GSM_MS_BLOCK_SIZE 65
|
|
||||||
#define GSM_FRAME_SIZE 160
|
|
||||||
|
|
||||||
static av_cold int libgsm_encode_init(AVCodecContext *avctx) {
|
static av_cold int libgsm_encode_init(AVCodecContext *avctx) {
|
||||||
if (avctx->channels > 1) {
|
if (avctx->channels > 1) {
|
||||||
|
|
|
@ -119,5 +119,6 @@ AVCodec ff_libvpx_decoder = {
|
||||||
.init = vp8_init,
|
.init = vp8_init,
|
||||||
.close = vp8_free,
|
.close = vp8_free,
|
||||||
.decode = vp8_decode,
|
.decode = vp8_decode,
|
||||||
.long_name = NULL_IF_CONFIG_SMALL("libvpx VP8"),
|
.capabilities = CODEC_CAP_AUTO_THREADS,
|
||||||
|
.long_name = NULL_IF_CONFIG_SMALL("libvpx VP8"),
|
||||||
};
|
};
|
||||||
|
|
|
@ -622,7 +622,7 @@ AVCodec ff_libvpx_encoder = {
|
||||||
.init = vp8_init,
|
.init = vp8_init,
|
||||||
.encode = vp8_encode,
|
.encode = vp8_encode,
|
||||||
.close = vp8_free,
|
.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},
|
.pix_fmts = (const enum PixelFormat[]){PIX_FMT_YUV420P, PIX_FMT_NONE},
|
||||||
.long_name = NULL_IF_CONFIG_SMALL("libvpx VP8"),
|
.long_name = NULL_IF_CONFIG_SMALL("libvpx VP8"),
|
||||||
.priv_class = &class,
|
.priv_class = &class,
|
||||||
|
|
|
@ -414,7 +414,7 @@ AVCodec ff_libxavs_encoder = {
|
||||||
.init = XAVS_init,
|
.init = XAVS_init,
|
||||||
.encode = XAVS_frame,
|
.encode = XAVS_frame,
|
||||||
.close = XAVS_close,
|
.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 },
|
.pix_fmts = (const enum PixelFormat[]) { PIX_FMT_YUV420P, PIX_FMT_NONE },
|
||||||
.long_name = NULL_IF_CONFIG_SMALL("libxavs - the Chinese Audio Video Standard Encoder"),
|
.long_name = NULL_IF_CONFIG_SMALL("libxavs - the Chinese Audio Video Standard Encoder"),
|
||||||
.priv_class = &class,
|
.priv_class = &class,
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
#define BITSTREAM_READER_LE
|
#define BITSTREAM_READER_LE
|
||||||
#include "avcodec.h"
|
#include "avcodec.h"
|
||||||
#include "msgsmdec.h"
|
#include "msgsmdec.h"
|
||||||
|
#include "gsm.h"
|
||||||
#include "gsmdec_template.c"
|
#include "gsmdec_template.c"
|
||||||
|
|
||||||
int ff_msgsm_decode_block(AVCodecContext *avctx, int16_t *samples,
|
int ff_msgsm_decode_block(AVCodecContext *avctx, int16_t *samples,
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Micrsoft RLE Video Decoder
|
* Microsoft RLE video decoder
|
||||||
* Copyright (C) 2003 the ffmpeg project
|
* Copyright (C) 2003 the ffmpeg project
|
||||||
*
|
*
|
||||||
* This file is part of FFmpeg.
|
* This file is part of FFmpeg.
|
||||||
|
@ -21,7 +21,7 @@
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @file
|
* @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:
|
* For more information about the MS RLE format, visit:
|
||||||
* http://www.pcisys.net/~melanson/codecs/
|
* http://www.pcisys.net/~melanson/codecs/
|
||||||
*
|
*
|
||||||
|
|
|
@ -33,7 +33,7 @@
|
||||||
|
|
||||||
static av_cold int pcm_encode_init(AVCodecContext *avctx)
|
static av_cold int pcm_encode_init(AVCodecContext *avctx)
|
||||||
{
|
{
|
||||||
avctx->frame_size = 1;
|
avctx->frame_size = 0;
|
||||||
switch(avctx->codec->id) {
|
switch(avctx->codec->id) {
|
||||||
case CODEC_ID_PCM_ALAW:
|
case CODEC_ID_PCM_ALAW:
|
||||||
pcm_alaw_tableinit();
|
pcm_alaw_tableinit();
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
#define AVCODEC_VERSION_H
|
#define AVCODEC_VERSION_H
|
||||||
|
|
||||||
#define LIBAVCODEC_VERSION_MAJOR 53
|
#define LIBAVCODEC_VERSION_MAJOR 53
|
||||||
#define LIBAVCODEC_VERSION_MINOR 54
|
#define LIBAVCODEC_VERSION_MINOR 55
|
||||||
#define LIBAVCODEC_VERSION_MICRO 100
|
#define LIBAVCODEC_VERSION_MICRO 100
|
||||||
|
|
||||||
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
|
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
|
||||||
|
|
|
@ -640,11 +640,14 @@ cglobal fft_dispatch%3%2, 2,5,8, z, nbits
|
||||||
%endmacro ; DECL_FFT
|
%endmacro ; DECL_FFT
|
||||||
|
|
||||||
%ifdef HAVE_AVX
|
%ifdef HAVE_AVX
|
||||||
|
INIT_YMM
|
||||||
DECL_FFT 6, _avx
|
DECL_FFT 6, _avx
|
||||||
DECL_FFT 6, _avx, _interleave
|
DECL_FFT 6, _avx, _interleave
|
||||||
%endif
|
%endif
|
||||||
|
INIT_XMM
|
||||||
DECL_FFT 5, _sse
|
DECL_FFT 5, _sse
|
||||||
DECL_FFT 5, _sse, _interleave
|
DECL_FFT 5, _sse, _interleave
|
||||||
|
INIT_MMX
|
||||||
DECL_FFT 4, _3dn
|
DECL_FFT 4, _3dn
|
||||||
DECL_FFT 4, _3dn, _interleave
|
DECL_FFT 4, _3dn, _interleave
|
||||||
DECL_FFT 4, _3dn2
|
DECL_FFT 4, _3dn2
|
||||||
|
|
|
@ -37,7 +37,7 @@ static int gsm_read_packet(AVFormatContext *s, AVPacket *pkt)
|
||||||
{
|
{
|
||||||
int ret, size;
|
int ret, size;
|
||||||
|
|
||||||
size = GSM_BLOCK_SIZE * 32;
|
size = GSM_BLOCK_SIZE;
|
||||||
|
|
||||||
pkt->pos = avio_tell(s->pb);
|
pkt->pos = avio_tell(s->pb);
|
||||||
pkt->stream_index = 0;
|
pkt->stream_index = 0;
|
||||||
|
@ -48,7 +48,7 @@ static int gsm_read_packet(AVFormatContext *s, AVPacket *pkt)
|
||||||
return ret < 0 ? ret : AVERROR(EIO);
|
return ret < 0 ? ret : AVERROR(EIO);
|
||||||
}
|
}
|
||||||
pkt->size = ret;
|
pkt->size = ret;
|
||||||
pkt->duration = ret / GSM_BLOCK_SIZE;
|
pkt->duration = 1;
|
||||||
pkt->pts = pkt->pos / GSM_BLOCK_SIZE;
|
pkt->pts = pkt->pos / GSM_BLOCK_SIZE;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -65,7 +65,6 @@ static int gsm_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
||||||
st->codec->codec_id = s->iformat->value;
|
st->codec->codec_id = s->iformat->value;
|
||||||
st->codec->channels = 1;
|
st->codec->channels = 1;
|
||||||
st->codec->sample_rate = c->sample_rate;
|
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;
|
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);
|
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;
|
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[] = {
|
static const AVOption options[] = {
|
||||||
{ "sample_rate", "", offsetof(GSMDemuxerContext, sample_rate),
|
{ "sample_rate", "", offsetof(GSMDemuxerContext, sample_rate),
|
||||||
AV_OPT_TYPE_INT, {.dbl = GSM_SAMPLE_RATE}, 1, INT_MAX / GSM_BLOCK_SIZE,
|
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),
|
.priv_data_size = sizeof(GSMDemuxerContext),
|
||||||
.read_header = gsm_read_header,
|
.read_header = gsm_read_header,
|
||||||
.read_packet = gsm_read_packet,
|
.read_packet = gsm_read_packet,
|
||||||
.read_seek2 = gsm_read_seek2,
|
.flags = AVFMT_GENERIC_INDEX,
|
||||||
.extensions = "gsm",
|
.extensions = "gsm",
|
||||||
.value = CODEC_ID_GSM,
|
.value = CODEC_ID_GSM,
|
||||||
.priv_class = &class,
|
.priv_class = &class,
|
||||||
|
|
|
@ -1022,6 +1022,7 @@ static int read_seek(AVFormatContext *s, int stream_index,
|
||||||
static int read_close(AVFormatContext *s)
|
static int read_close(AVFormatContext *s)
|
||||||
{
|
{
|
||||||
WtvContext *wtv = s->priv_data;
|
WtvContext *wtv = s->priv_data;
|
||||||
|
av_freep(&wtv->index_entries);
|
||||||
wtvfile_close(wtv->pb);
|
wtvfile_close(wtv->pb);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -67,7 +67,7 @@ $EGREP $OPT '^\+ *(const *|)static' $*| $EGREP --color=always '[^=]= *(0|NULL)[^
|
||||||
cat $TMP
|
cat $TMP
|
||||||
hiegrep '# *ifdef * (HAVE|CONFIG)_' 'ifdefs that should be #if' $*
|
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 'av_log\( *NULL' 'Missing context in av_log' $*
|
||||||
hiegrep '[^sn]printf' 'Please use av_log' $*
|
hiegrep '[^sn]printf' 'Please use av_log' $*
|
||||||
|
|
Loading…
Reference in New Issue
Block a user