mirror of https://github.com/FFmpeg/FFmpeg.git
* 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>pull/3/head
commit
794006f8fe
24 changed files with 144 additions and 59 deletions
@ -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 */ |
@ -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, |
||||
}; |
Loading…
Reference in new issue