[FFmpeg-devel] [PATCH] 8svx: remove code duplication
Paul B Mahol
onemda at gmail.com
Tue Nov 20 12:42:22 CET 2012
On 11/20/12, Stefano Sabatini <stefasab at gmail.com> wrote:
> On date Sunday 2012-11-18 19:37:46 +0000, Paul B Mahol encoded:
>> Removes limitation of max 2 channels for pcm s8 planar decoder.
>>
>> AV_CODEC_ID_8SVX_RAW is not used by anything anymore and is going to be
>> removed.
>>
>> Signed-off-by: Paul B Mahol <onemda at gmail.com>
>> ---
>> libavcodec/8svx.c | 45 +++++++--------------------------------------
>> libavcodec/Makefile | 2 +-
>> libavcodec/pcm.c | 12 ++++++++++++
>> libavcodec/utils.c | 1 +
>> 4 files changed, 21 insertions(+), 39 deletions(-)
>>
>> diff --git a/libavcodec/8svx.c b/libavcodec/8svx.c
>> index 698ddd0..618ae87 100644
>> --- a/libavcodec/8svx.c
>> +++ b/libavcodec/8svx.c
>> @@ -82,12 +82,6 @@ static void delta_decode(uint8_t *dst, const uint8_t
>> *src, int src_size,
>> *state = val;
>> }
>>
>> -static void raw_decode(uint8_t *dst, const int8_t *src, int src_size)
>> -{
>> - while (src_size--)
>> - *dst++ = *src++ + 128;
>> -}
>> -
>> /** decode a frame */
>> static int eightsvx_decode_frame(AVCodecContext *avctx, void *data,
>> int *got_frame_ptr, AVPacket *avpkt)
>> @@ -95,8 +89,7 @@ static int eightsvx_decode_frame(AVCodecContext *avctx,
>> void *data,
>> EightSvxContext *esc = avctx->priv_data;
>> int buf_size;
>> int ch, ret;
>> - int is_compr = (avctx->codec_id != AV_CODEC_ID_PCM_S8_PLANAR);
>> - int hdr_size = is_compr ? 2 : 0;
>> + int hdr_size = 2;
>>
>> /* decode and interleave the first packet */
>> if (!esc->data[0] && avpkt) {
>> @@ -110,11 +103,9 @@ static int eightsvx_decode_frame(AVCodecContext
>> *avctx, void *data,
>> return AVERROR(EINVAL);
>> }
>>
>> - if (is_compr) {
>> - esc->fib_acc[0] = avpkt->data[1] + 128;
>> - if (avctx->channels == 2)
>> - esc->fib_acc[1] = avpkt->data[2+chan_size+1] + 128;
>> - }
>> + esc->fib_acc[0] = avpkt->data[1] + 128;
>> + if (avctx->channels == 2)
>> + esc->fib_acc[1] = avpkt->data[2+chan_size+1] + 128;
>>
>> esc->data_idx = 0;
>> esc->data_size = chan_size;
>> @@ -143,20 +134,15 @@ static int eightsvx_decode_frame(AVCodecContext
>> *avctx, void *data,
>> }
>>
>> /* get output buffer */
>> - esc->frame.nb_samples = buf_size * (is_compr + 1);
>> + esc->frame.nb_samples = buf_size * 2;
>> if ((ret = avctx->get_buffer(avctx, &esc->frame)) < 0) {
>> av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
>> return ret;
>> }
>>
>> for (ch = 0; ch < avctx->channels; ch++) {
>> - if (is_compr) {
>> - delta_decode(esc->frame.data[ch],
>> &esc->data[ch][esc->data_idx],
>> - buf_size, &esc->fib_acc[ch], esc->table);
>> - } else {
>> - raw_decode(esc->frame.data[ch],
>> &esc->data[ch][esc->data_idx],
>> - buf_size);
>> - }
>> + delta_decode(esc->frame.data[ch], &esc->data[ch][esc->data_idx],
>> + buf_size, &esc->fib_acc[ch], esc->table);
>> }
>>
>> esc->data_idx += buf_size;
>> @@ -179,8 +165,6 @@ static av_cold int eightsvx_decode_init(AVCodecContext
>> *avctx)
>> switch (avctx->codec->id) {
>> case AV_CODEC_ID_8SVX_FIB: esc->table = fibonacci; break;
>> case AV_CODEC_ID_8SVX_EXP: esc->table = exponential; break;
>> - case AV_CODEC_ID_PCM_S8_PLANAR:
>> - case AV_CODEC_ID_8SVX_RAW: esc->table = NULL; break;
>> default:
>> av_log(avctx, AV_LOG_ERROR, "Invalid codec id %d.\n",
>> avctx->codec->id);
>> return AVERROR_INVALIDDATA;
>> @@ -235,18 +219,3 @@ AVCodec ff_eightsvx_exp_decoder = {
>> AV_SAMPLE_FMT_NONE
>> },
>> };
>> #endif
>> -#if CONFIG_PCM_S8_PLANAR_DECODER
>> -AVCodec ff_pcm_s8_planar_decoder = {
>> - .name = "pcm_s8_planar",
>> - .type = AVMEDIA_TYPE_AUDIO,
>> - .id = AV_CODEC_ID_PCM_S8_PLANAR,
>> - .priv_data_size = sizeof(EightSvxContext),
>> - .init = eightsvx_decode_init,
>> - .close = eightsvx_decode_close,
>> - .decode = eightsvx_decode_frame,
>> - .capabilities = CODEC_CAP_DR1,
>> - .long_name = NULL_IF_CONFIG_SMALL("PCM signed 8-bit planar"),
>> - .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_U8P,
>> - AV_SAMPLE_FMT_NONE
>> },
>> -};
>> -#endif
>> diff --git a/libavcodec/Makefile b/libavcodec/Makefile
>> index 7b3462e..5945332 100644
>> --- a/libavcodec/Makefile
>> +++ b/libavcodec/Makefile
>> @@ -521,7 +521,7 @@ OBJS-$(CONFIG_PCM_MULAW_DECODER) += pcm.o
>> OBJS-$(CONFIG_PCM_MULAW_ENCODER) += pcm.o
>> OBJS-$(CONFIG_PCM_S8_DECODER) += pcm.o
>> OBJS-$(CONFIG_PCM_S8_ENCODER) += pcm.o
>> -OBJS-$(CONFIG_PCM_S8_PLANAR_DECODER) += 8svx.o
>> +OBJS-$(CONFIG_PCM_S8_PLANAR_DECODER) += pcm.o
>> OBJS-$(CONFIG_PCM_S16BE_DECODER) += pcm.o
>> OBJS-$(CONFIG_PCM_S16BE_ENCODER) += pcm.o
>> OBJS-$(CONFIG_PCM_S16BE_PLANAR_DECODER) += pcm.o
>> diff --git a/libavcodec/pcm.c b/libavcodec/pcm.c
>> index 9661ed5..f735b5e 100644
>> --- a/libavcodec/pcm.c
>> +++ b/libavcodec/pcm.c
>> @@ -378,6 +378,17 @@ static int pcm_decode_frame(AVCodecContext *avctx,
>> void *data,
>> for (; n > 0; n--)
>> *samples++ = *src++ + 128;
>> break;
>> + case AV_CODEC_ID_PCM_S8_PLANAR:
>> + {
>> + int i;
>> + n /= avctx->channels;
>> + for (c = 0; c < avctx->channels; c++) {
>> + samples = s->frame.extended_data[c];
>> + for (i = n; i > 0; i--)
>> + *samples++ = *src++ + 128;
>> + }
>> + break;
>> + }
>> #if HAVE_BIGENDIAN
>> case AV_CODEC_ID_PCM_F64LE:
>> DECODE(64, le64, src, samples, n, 0, 0)
>> @@ -550,6 +561,7 @@ PCM_CODEC (PCM_F64LE, AV_SAMPLE_FMT_DBL,
>> pcm_f64le, "PCM 64-bit f
>> PCM_DECODER(PCM_LXF, AV_SAMPLE_FMT_S32P,pcm_lxf, "PCM
>> signed 20-bit little-endian planar");
>> PCM_CODEC (PCM_MULAW, AV_SAMPLE_FMT_S16, pcm_mulaw, "PCM
>> mu-law / G.711 mu-law");
>> PCM_CODEC (PCM_S8, AV_SAMPLE_FMT_U8, pcm_s8, "PCM
>> signed 8-bit");
>> +PCM_DECODER(PCM_S8_PLANAR, AV_SAMPLE_FMT_U8P, pcm_s8_planar, "PCM
>> signed 8-bit planar");
>> PCM_CODEC (PCM_S16BE, AV_SAMPLE_FMT_S16, pcm_s16be, "PCM
>> signed 16-bit big-endian");
>> PCM_DECODER(PCM_S16BE_PLANAR, AV_SAMPLE_FMT_S16P,pcm_s16be_planar, "PCM
>> signed 16-bit big-endian planar");
>> PCM_CODEC (PCM_S16LE, AV_SAMPLE_FMT_S16, pcm_s16le, "PCM
>> signed 16-bit little-endian");
>> diff --git a/libavcodec/utils.c b/libavcodec/utils.c
>> index a4df3f3..b117271 100644
>> --- a/libavcodec/utils.c
>> +++ b/libavcodec/utils.c
>> @@ -2307,6 +2307,7 @@ int av_get_exact_bits_per_sample(enum AVCodecID
>> codec_id)
>> case AV_CODEC_ID_PCM_ALAW:
>> case AV_CODEC_ID_PCM_MULAW:
>> case AV_CODEC_ID_PCM_S8:
>> + case AV_CODEC_ID_PCM_S8_PLANAR:
>> case AV_CODEC_ID_PCM_U8:
>> case AV_CODEC_ID_PCM_ZORK:
>> return 8;
>
> LGTM (although I have to note that I'm not maintainer for the file),
> nice cleanup.
thanks, applied.
> --
> FFmpeg = Fostering and Fantastic Mysterious Powerful Evanescent Gladiator
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
More information about the ffmpeg-devel
mailing list