aboutsummaryrefslogtreecommitdiffhomepage
path: root/libmpcodecs
diff options
context:
space:
mode:
authorGravatar wm4 <wm4@nowhere>2012-08-18 11:17:35 +0200
committerGravatar wm4 <wm4@nowhere>2012-08-20 15:36:04 +0200
commit6a26b4a66504f701baf35e58467e55aea28c0ad5 (patch)
tree8b09b91d63926543eaa8ec95c90a2532bde71dd6 /libmpcodecs
parent6f7ba66817b5cd3761b802930dc7ba62464e3c6a (diff)
libmpcodecs: remove redundant audio and video decoders
Probably all of these are supported by libavcodec. Missing things can be added back. Also remove qtpalette.h. It was used by demux_mov.c, and should have been deleted with commit 1fde09db6f4ce.
Diffstat (limited to 'libmpcodecs')
-rw-r--r--libmpcodecs/ad.c28
-rw-r--r--libmpcodecs/ad_alaw.c93
-rw-r--r--libmpcodecs/ad_dvdpcm.c162
-rw-r--r--libmpcodecs/ad_faad.c324
-rw-r--r--libmpcodecs/ad_hwac3.c577
-rw-r--r--libmpcodecs/ad_hwmpa.c166
-rw-r--r--libmpcodecs/ad_imaadpcm.c340
-rw-r--r--libmpcodecs/ad_liba52.c339
-rw-r--r--libmpcodecs/ad_libdca.c353
-rw-r--r--libmpcodecs/ad_libmad.c187
-rw-r--r--libmpcodecs/ad_msadpcm.c237
-rw-r--r--libmpcodecs/ad_pcm.c214
-rw-r--r--libmpcodecs/ad_sample.c145
-rw-r--r--libmpcodecs/native/alaw.h76
-rw-r--r--libmpcodecs/vd.c20
-rw-r--r--libmpcodecs/vd_hmblck.c151
-rw-r--r--libmpcodecs/vd_ijpg.c197
-rw-r--r--libmpcodecs/vd_lzo.c166
-rw-r--r--libmpcodecs/vd_mpng.c182
-rw-r--r--libmpcodecs/vd_mtga.c252
-rw-r--r--libmpcodecs/vd_raw.c142
21 files changed, 0 insertions, 4351 deletions
diff --git a/libmpcodecs/ad.c b/libmpcodecs/ad.c
index 0c56f0d546..aea9badadf 100644
--- a/libmpcodecs/ad.c
+++ b/libmpcodecs/ad.c
@@ -33,42 +33,14 @@
extern const ad_functions_t mpcodecs_ad_mpg123;
extern const ad_functions_t mpcodecs_ad_ffmpeg;
-extern const ad_functions_t mpcodecs_ad_liba52;
-extern const ad_functions_t mpcodecs_ad_hwac3;
-extern const ad_functions_t mpcodecs_ad_hwmpa;
-extern const ad_functions_t mpcodecs_ad_pcm;
-extern const ad_functions_t mpcodecs_ad_dvdpcm;
-extern const ad_functions_t mpcodecs_ad_alaw;
-extern const ad_functions_t mpcodecs_ad_imaadpcm;
-extern const ad_functions_t mpcodecs_ad_faad;
-extern const ad_functions_t mpcodecs_ad_libmad;
extern const ad_functions_t mpcodecs_ad_spdif;
-extern const ad_functions_t mpcodecs_ad_libdca;
const ad_functions_t * const mpcodecs_ad_drivers[] =
{
#ifdef CONFIG_MPG123
&mpcodecs_ad_mpg123,
#endif
-#ifdef CONFIG_LIBA52
- &mpcodecs_ad_liba52,
-#endif
- &mpcodecs_ad_hwac3,
- &mpcodecs_ad_hwmpa,
&mpcodecs_ad_ffmpeg,
&mpcodecs_ad_spdif,
- &mpcodecs_ad_pcm,
- &mpcodecs_ad_dvdpcm,
- &mpcodecs_ad_alaw,
- &mpcodecs_ad_imaadpcm,
-#ifdef CONFIG_FAAD
- &mpcodecs_ad_faad,
-#endif
-#ifdef CONFIG_LIBMAD
- &mpcodecs_ad_libmad,
-#endif
-#ifdef CONFIG_LIBDCA
- &mpcodecs_ad_libdca,
-#endif
NULL
};
diff --git a/libmpcodecs/ad_alaw.c b/libmpcodecs/ad_alaw.c
deleted file mode 100644
index 4a8f3849cf..0000000000
--- a/libmpcodecs/ad_alaw.c
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * This file is part of MPlayer.
- *
- * MPlayer is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * MPlayer 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with MPlayer; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-#include "config.h"
-#include "ad_internal.h"
-
-static const ad_info_t info =
-{
- "aLaw/uLaw audio decoder",
- "alaw",
- "Nick Kurshev",
- "A'rpi",
- ""
-};
-
-LIBAD_EXTERN(alaw)
-
-#include "native/alaw.h"
-
-static int init(sh_audio_t *sh_audio)
-{
- /* aLaw audio codec:*/
- if(!sh_audio->wf) return 0;
- sh_audio->channels=sh_audio->wf->nChannels;
- sh_audio->samplerate=sh_audio->wf->nSamplesPerSec;
- sh_audio->i_bps=sh_audio->channels*sh_audio->samplerate;
- sh_audio->samplesize=2;
- return 1;
-}
-
-static int preinit(sh_audio_t *sh)
-{
- sh->audio_out_minsize=2048;
- sh->ds->ss_div = 1; // 1 samples/packet
- sh->ds->ss_mul = sh->wf->nChannels; // bytes/packet
- return 1;
-}
-
-static void uninit(sh_audio_t *sh)
-{
-}
-
-static int control(sh_audio_t *sh,int cmd,void* arg, ...)
-{
- int skip;
- switch(cmd)
- {
- case ADCTRL_SKIP_FRAME:
- skip=sh->i_bps/16;
- skip=skip&(~3);
- demux_read_data(sh->ds,NULL,skip);
- return CONTROL_TRUE;
- default:
- return CONTROL_UNKNOWN;
- }
- return CONTROL_UNKNOWN;
-}
-
-static int decode_audio(sh_audio_t *sh_audio,unsigned char *buf,int minlen,int maxlen)
-{
- int len;
- int l=demux_read_data(sh_audio->ds,buf,minlen/2);
- unsigned short *d=(unsigned short *) buf;
- unsigned char *s=buf;
- len=2*l;
- if(sh_audio->format==6 || sh_audio->format==0x77616C61){
- /* aLaw */
- while(l>0){ --l; d[l]=alaw2short[s[l]]; }
- } else {
- /* uLaw */
- while(l>0){ --l; d[l]=ulaw2short[s[l]]; }
- }
- return len;
-}
diff --git a/libmpcodecs/ad_dvdpcm.c b/libmpcodecs/ad_dvdpcm.c
deleted file mode 100644
index 41f6a1426d..0000000000
--- a/libmpcodecs/ad_dvdpcm.c
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * This file is part of MPlayer.
- *
- * MPlayer is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * MPlayer 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with MPlayer; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-#include "config.h"
-#include "mp_msg.h"
-#include "ad_internal.h"
-
-static const ad_info_t info =
-{
- "Uncompressed DVD/VOB LPCM audio decoder",
- "dvdpcm",
- "Nick Kurshev",
- "A'rpi",
- ""
-};
-
-LIBAD_EXTERN(dvdpcm)
-
-static int init(sh_audio_t *sh)
-{
-/* DVD PCM Audio:*/
- sh->i_bps = 0;
- if(sh->codecdata_len==3){
- // we have LPCM header:
- unsigned char h=sh->codecdata[1];
- sh->channels=1+(h&7);
- switch((h>>4)&3){
- case 0: sh->samplerate=48000;break;
- case 1: sh->samplerate=96000;break;
- case 2: sh->samplerate=44100;break;
- case 3: sh->samplerate=32000;break;
- }
- switch ((h >> 6) & 3) {
- case 0:
- sh->sample_format = AF_FORMAT_S16_BE;
- sh->samplesize = 2;
- break;
- case 1:
- mp_tmsg(MSGT_DECAUDIO, MSGL_INFO, "Samples of this format are needed to improve support. Please contact the developers.\n");
- sh->i_bps = sh->channels * sh->samplerate * 5 / 2;
- case 2:
- sh->sample_format = AF_FORMAT_S24_BE;
- sh->samplesize = 3;
- break;
- default:
- sh->sample_format = AF_FORMAT_S16_BE;
- sh->samplesize = 2;
- }
- } else {
- // use defaults:
- sh->channels=2;
- sh->samplerate=48000;
- sh->sample_format = AF_FORMAT_S16_BE;
- sh->samplesize = 2;
- }
- if (!sh->i_bps)
- sh->i_bps = sh->samplesize * sh->channels * sh->samplerate;
- return 1;
-}
-
-static int preinit(sh_audio_t *sh)
-{
- sh->audio_out_minsize=2048;
- return 1;
-}
-
-static void uninit(sh_audio_t *sh)
-{
-}
-
-static int control(sh_audio_t *sh,int cmd,void* arg, ...)
-{
- int skip;
- switch(cmd)
- {
- case ADCTRL_SKIP_FRAME:
- skip=sh->i_bps/16;
- skip=skip&(~3);
- demux_read_data(sh->ds,NULL,skip);
- return CONTROL_TRUE;
- }
- return CONTROL_UNKNOWN;
-}
-
-static int decode_audio(sh_audio_t *sh_audio,unsigned char *buf,int minlen,int maxlen)
-{
- int j,len;
- if (sh_audio->samplesize == 3) {
- if (((sh_audio->codecdata[1] >> 6) & 3) == 1) {
- // 20 bit
- // not sure if the "& 0xf0" and "<< 4" are the right way around
- // can somebody clarify?
- for (j = 0; j < minlen; j += 12) {
- char tmp[10];
- len = demux_read_data(sh_audio->ds, tmp, 10);
- if (len < 10) break;
- // first sample
- buf[j + 0] = tmp[0];
- buf[j + 1] = tmp[1];
- buf[j + 2] = tmp[8] & 0xf0;
- // second sample
- buf[j + 3] = tmp[2];
- buf[j + 4] = tmp[3];
- buf[j + 5] = tmp[8] << 4;
- // third sample
- buf[j + 6] = tmp[4];
- buf[j + 7] = tmp[5];
- buf[j + 8] = tmp[9] & 0xf0;
- // fourth sample
- buf[j + 9] = tmp[6];
- buf[j + 10] = tmp[7];
- buf[j + 11] = tmp[9] << 4;
- }
- len = j;
- } else {
- // 24 bit
- for (j = 0; j < minlen; j += 12) {
- char tmp[12];
- len = demux_read_data(sh_audio->ds, tmp, 12);
- if (len < 12) break;
- // first sample
- buf[j + 0] = tmp[0];
- buf[j + 1] = tmp[1];
- buf[j + 2] = tmp[8];
- // second sample
- buf[j + 3] = tmp[2];
- buf[j + 4] = tmp[3];
- buf[j + 5] = tmp[9];
- // third sample
- buf[j + 6] = tmp[4];
- buf[j + 7] = tmp[5];
- buf[j + 8] = tmp[10];
- // fourth sample
- buf[j + 9] = tmp[6];
- buf[j + 10] = tmp[7];
- buf[j + 11] = tmp[11];
- }
- len = j;
- }
- } else
- len=demux_read_data(sh_audio->ds,buf,(minlen+3)&(~3));
- return len;
-}
diff --git a/libmpcodecs/ad_faad.c b/libmpcodecs/ad_faad.c
deleted file mode 100644
index d750f2ff30..0000000000
--- a/libmpcodecs/ad_faad.c
+++ /dev/null
@@ -1,324 +0,0 @@
-/*
- * MPlayer AAC decoder using libfaad2
- *
- * Copyright (C) 2002 Felix Buenemann <atmosfear at users.sourceforge.net>
- *
- * This file is part of MPlayer.
- *
- * MPlayer is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * MPlayer 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with MPlayer; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <neaacdec.h>
-
-#include "config.h"
-#include "options.h"
-#include "ad_internal.h"
-#include "libaf/reorder_ch.h"
-
-static const ad_info_t info =
-{
- "AAC (MPEG2/4 Advanced Audio Coding)",
- "faad",
- "Felix Buenemann",
- "faad2",
- "uses libfaad2"
-};
-
-LIBAD_EXTERN(faad)
-
-/* configure maximum supported channels, *
- * this is theoretically max. 64 chans */
-#define FAAD_MAX_CHANNELS 8
-#define FAAD_BUFFLEN (FAAD_MIN_STREAMSIZE*FAAD_MAX_CHANNELS)
-
-//#define AAC_DUMP_COMPRESSED
-
-static faacDecHandle faac_hdec;
-static faacDecFrameInfo faac_finfo;
-
-static int preinit(sh_audio_t *sh)
-{
- sh->audio_out_minsize=8192*FAAD_MAX_CHANNELS;
- sh->audio_in_minsize=FAAD_BUFFLEN;
- return 1;
-}
-
-static int aac_probe(unsigned char *buffer, int len)
-{
- int i = 0, pos = 0;
- mp_msg(MSGT_DECAUDIO,MSGL_V, "\nAAC_PROBE: %d bytes\n", len);
- while(i <= len-4) {
- if(
- ((buffer[i] == 0xff) && ((buffer[i+1] & 0xf6) == 0xf0)) ||
- (buffer[i] == 'A' && buffer[i+1] == 'D' && buffer[i+2] == 'I' && buffer[i+3] == 'F')
- ) {
- pos = i;
- break;
- }
- mp_msg(MSGT_DECAUDIO,MSGL_V, "AUDIO PAYLOAD: %x %x %x %x\n", buffer[i], buffer[i+1], buffer[i+2], buffer[i+3]);
- i++;
- }
- mp_msg(MSGT_DECAUDIO,MSGL_V, "\nAAC_PROBE: ret %d\n", pos);
- return pos;
-}
-
-static int init(sh_audio_t *sh)
-{
- struct MPOpts *opts = sh->opts;
- unsigned long faac_samplerate;
- unsigned char faac_channels;
- int faac_init, pos = 0;
- faac_hdec = faacDecOpen();
-
- // If we don't get the ES descriptor, try manual config
- if(!sh->codecdata_len && sh->wf) {
- sh->codecdata_len = sh->wf->cbSize;
- sh->codecdata = malloc(sh->codecdata_len);
- memcpy(sh->codecdata, sh->wf+1, sh->codecdata_len);
- mp_msg(MSGT_DECAUDIO,MSGL_DBG2,"FAAD: codecdata extracted from WAVEFORMATEX\n");
- }
- if(!sh->codecdata_len || sh->format == mmioFOURCC('M', 'P', '4', 'L')) {
- faacDecConfigurationPtr faac_conf;
- /* Set the default object type and samplerate */
- /* This is useful for RAW AAC files */
- faac_conf = faacDecGetCurrentConfiguration(faac_hdec);
- if(sh->samplerate)
- faac_conf->defSampleRate = sh->samplerate;
- /* XXX: FAAD support FLOAT output, how do we handle
- * that (FAAD_FMT_FLOAT)? ::atmos
- */
- if (opts->audio_output_channels <= 2)
- faac_conf->downMatrix = 1;
- switch(sh->samplesize){
- case 1: // 8Bit
- mp_msg(MSGT_DECAUDIO,MSGL_WARN,"FAAD: 8Bit samplesize not supported by FAAD, assuming 16Bit!\n");
- default:
- sh->samplesize=2;
- case 2: // 16Bit
- faac_conf->outputFormat = FAAD_FMT_16BIT;
- break;
- case 3: // 24Bit
- faac_conf->outputFormat = FAAD_FMT_24BIT;
- break;
- case 4: // 32Bit
- faac_conf->outputFormat = FAAD_FMT_32BIT;
- break;
- }
- //faac_conf->defObjectType = LTP; // => MAIN, LC, SSR, LTP available.
-
- faacDecSetConfiguration(faac_hdec, faac_conf);
-
- sh->a_in_buffer_len = demux_read_data(sh->ds, sh->a_in_buffer, sh->a_in_buffer_size);
- if (!sh->a_in_buffer_len) {
- // faad init will crash with 0 buffer length
- mp_msg(MSGT_DECAUDIO, MSGL_FATAL, "Could not get audio data!\n");
- return 0;
- }
- /* external faad does not have latm lookup support */
- faac_init = faacDecInit(faac_hdec, sh->a_in_buffer,
- sh->a_in_buffer_len, &faac_samplerate, &faac_channels);
-
- if (faac_init < 0) {
- pos = aac_probe(sh->a_in_buffer, sh->a_in_buffer_len);
- if(pos) {
- sh->a_in_buffer_len -= pos;
- memmove(sh->a_in_buffer, &(sh->a_in_buffer[pos]), sh->a_in_buffer_len);
- sh->a_in_buffer_len +=
- demux_read_data(sh->ds,&(sh->a_in_buffer[sh->a_in_buffer_len]),
- sh->a_in_buffer_size - sh->a_in_buffer_len);
- pos = 0;
- }
-
- /* init the codec */
- faac_init = faacDecInit(faac_hdec, sh->a_in_buffer,
- sh->a_in_buffer_len, &faac_samplerate, &faac_channels);
- }
-
- sh->a_in_buffer_len -= (faac_init > 0)?faac_init:0; // how many bytes init consumed
- // XXX FIXME: shouldn't we memcpy() here in a_in_buffer ?? --A'rpi
-
- } else { // We have ES DS in codecdata
- faacDecConfigurationPtr faac_conf = faacDecGetCurrentConfiguration(faac_hdec);
- if (opts->audio_output_channels <= 2) {
- faac_conf->downMatrix = 1;
- faacDecSetConfiguration(faac_hdec, faac_conf);
- }
-
- /*int i;
- for(i = 0; i < sh_audio->codecdata_len; i++)
- printf("codecdata_dump %d: 0x%02X\n", i, sh_audio->codecdata[i]);*/
-
- faac_init = faacDecInit2(faac_hdec, sh->codecdata,
- sh->codecdata_len, &faac_samplerate, &faac_channels);
- }
- if(faac_init < 0) {
- mp_msg(MSGT_DECAUDIO,MSGL_WARN,"FAAD: Failed to initialize the decoder!\n"); // XXX: deal with cleanup!
- faacDecClose(faac_hdec);
- // XXX: free a_in_buffer here or in uninit?
- return 0;
- } else {
- mp_msg(MSGT_DECAUDIO,MSGL_V,"FAAD: Decoder init done (%dBytes)!\n", sh->a_in_buffer_len); // XXX: remove or move to debug!
- mp_msg(MSGT_DECAUDIO,MSGL_V,"FAAD: Negotiated samplerate: %ldHz channels: %d\n", faac_samplerate, faac_channels);
- // 8 channels is aac channel order #7.
- sh->channels = faac_channels == 7 ? 8 : faac_channels;
- if (opts->audio_output_channels <= 2)
- sh->channels = faac_channels > 1 ? 2 : 1;
- sh->samplerate = faac_samplerate;
- sh->samplesize=2;
- //sh->o_bps = sh->samplesize*faac_channels*faac_samplerate;
- if(!sh->i_bps) {
- mp_msg(MSGT_DECAUDIO, MSGL_V, "FAAD: compressed input bitrate missing, assuming 128kbit/s!\n");
- sh->i_bps = 128*1000/8; // XXX: HACK!!! ::atmos
- } else
- mp_msg(MSGT_DECAUDIO,MSGL_V,"FAAD: got %dkbit/s bitrate from MP4 header!\n",sh->i_bps*8/1000);
- }
- return 1;
-}
-
-static void uninit(sh_audio_t *sh)
-{
- mp_msg(MSGT_DECAUDIO,MSGL_V,"FAAD: Closing decoder!\n");
- faacDecClose(faac_hdec);
-}
-
-static int aac_sync(sh_audio_t *sh)
-{
- int pos = 0;
- // do not probe LATM, faad does that
- if(!sh->codecdata_len && sh->format != mmioFOURCC('M', 'P', '4', 'L')) {
- if(sh->a_in_buffer_len < sh->a_in_buffer_size){
- sh->a_in_buffer_len +=
- demux_read_data(sh->ds,&sh->a_in_buffer[sh->a_in_buffer_len],
- sh->a_in_buffer_size - sh->a_in_buffer_len);
- }
- pos = aac_probe(sh->a_in_buffer, sh->a_in_buffer_len);
- if(pos) {
- sh->a_in_buffer_len -= pos;
- memmove(sh->a_in_buffer, &(sh->a_in_buffer[pos]), sh->a_in_buffer_len);
- mp_msg(MSGT_DECAUDIO,MSGL_V, "\nAAC SYNC AFTER %d bytes\n", pos);
- }
- }
- return pos;
-}
-
-static int control(sh_audio_t *sh,int cmd,void* arg, ...)
-{
- switch(cmd)
- {
- case ADCTRL_RESYNC_STREAM:
- aac_sync(sh);
- return CONTROL_TRUE;
-#if 0
- case ADCTRL_SKIP_FRAME:
- return CONTROL_TRUE;
-#endif
- }
- return CONTROL_UNKNOWN;
-}
-
-#define MAX_FAAD_ERRORS 10
-static int decode_audio(sh_audio_t *sh,unsigned char *buf,int minlen,int maxlen)
-{
- int len = 0, last_dec_len = 1, errors = 0;
- // int j = 0;
- void *faac_sample_buffer;
-
- while(len < minlen && last_dec_len > 0 && errors < MAX_FAAD_ERRORS) {
-
- /* update buffer for raw aac streams: */
- if(!sh->codecdata_len)
- if(sh->a_in_buffer_len < sh->a_in_buffer_size){
- sh->a_in_buffer_len +=
- demux_read_data(sh->ds,&sh->a_in_buffer[sh->a_in_buffer_len],
- sh->a_in_buffer_size - sh->a_in_buffer_len);
- }
-
-#ifdef DUMP_AAC_COMPRESSED
- {int i;
- for (i = 0; i < 16; i++)
- printf ("%02X ", sh->a_in_buffer[i]);
- printf ("\n");}
-#endif
-
- if(!sh->codecdata_len){
- // raw aac stream:
- do {
- faac_sample_buffer = faacDecDecode(faac_hdec, &faac_finfo, sh->a_in_buffer, sh->a_in_buffer_len);
-
- /* update buffer index after faacDecDecode */
- if(faac_finfo.bytesconsumed >= sh->a_in_buffer_len) {
- sh->a_in_buffer_len=0;
- } else {
- sh->a_in_buffer_len-=faac_finfo.bytesconsumed;
- memmove(sh->a_in_buffer,&sh->a_in_buffer[faac_finfo.bytesconsumed],sh->a_in_buffer_len);
- }
-
- if(faac_finfo.error > 0) {
- mp_msg(MSGT_DECAUDIO,MSGL_WARN,"FAAD: error: %s, trying to resync!\n",
- faacDecGetErrorMessage(faac_finfo.error));
- if (sh->a_in_buffer_len <= 0) {
- errors = MAX_FAAD_ERRORS;
- break;
- }
- sh->a_in_buffer_len--;
- memmove(sh->a_in_buffer,&sh->a_in_buffer[1],sh->a_in_buffer_len);
- aac_sync(sh);
- errors++;
- } else
- break;
- } while(errors < MAX_FAAD_ERRORS);
- } else {
- // packetized (.mp4) aac stream:
- unsigned char* bufptr=NULL;
- double pts;
- int buflen=ds_get_packet_pts(sh->ds, &bufptr, &pts);
- if(buflen<=0) break;
- if (pts != MP_NOPTS_VALUE) {
- sh->pts = pts;
- sh->pts_bytes = 0;
- }
- faac_sample_buffer = faacDecDecode(faac_hdec, &faac_finfo, bufptr, buflen);
- }
- //for (j=0;j<faac_finfo.channels;j++) printf("%d:%d\n", j, faac_finfo.channel_position[j]);
-
- if(faac_finfo.error > 0) {
- mp_msg(MSGT_DECAUDIO,MSGL_WARN,"FAAD: Failed to decode frame: %s \n",
- faacDecGetErrorMessage(faac_finfo.error));
- } else if (faac_finfo.samples == 0) {
- mp_msg(MSGT_DECAUDIO,MSGL_DBG2,"FAAD: Decoded zero samples!\n");
- } else {
- /* XXX: samples already multiplied by channels! */
- mp_msg(MSGT_DECAUDIO,MSGL_DBG2,"FAAD: Successfully decoded frame (%ld Bytes)!\n",
- sh->samplesize*faac_finfo.samples);
-
- if (sh->channels >= 5)
- reorder_channel_copy_nch(faac_sample_buffer,
- AF_CHANNEL_LAYOUT_AAC_DEFAULT,
- buf+len, AF_CHANNEL_LAYOUT_MPLAYER_DEFAULT,
- sh->channels,
- faac_finfo.samples, sh->samplesize);
- else
- memcpy(buf+len,faac_sample_buffer, sh->samplesize*faac_finfo.samples);
- last_dec_len = sh->samplesize*faac_finfo.samples;
- len += last_dec_len;
- sh->pts_bytes += last_dec_len;
- //printf("FAAD: buffer: %d bytes consumed: %d \n", k, faac_finfo.bytesconsumed);
- }
- }
- return len;
-}
diff --git a/libmpcodecs/ad_hwac3.c b/libmpcodecs/ad_hwac3.c
deleted file mode 100644
index 44e7657107..0000000000
--- a/libmpcodecs/ad_hwac3.c
+++ /dev/null
@@ -1,577 +0,0 @@
-/*
- * DTS code based on "ac3/decode_dts.c" and "ac3/conversion.c" from "ogle 0.9"
- * (see http://www.dtek.chalmers.se/~dvd/)
- * Reference: DOCS/tech/hwac3.txt !!!!!
- *
- * This file is part of MPlayer.
- *
- * MPlayer is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * MPlayer 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with MPlayer; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#define _GNU_SOURCE
-#define _XOPEN_SOURCE 600
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/types.h>
-
-#include <libavutil/intreadwrite.h>
-#include <libavutil/common.h>
-
-#include "config.h"
-#include "mp_msg.h"
-#include "mpbswap.h"
-
-#include "ad_internal.h"
-
-
-static int isdts = -1;
-
-static const ad_info_t info =
-{
- "AC3/DTS pass-through S/PDIF",
- "hwac3",
- "Nick Kurshev/Peter Schüller",
- "???",
- ""
-};
-
-LIBAD_EXTERN(hwac3)
-
-
-static int dts_syncinfo(uint8_t *indata_ptr, int *flags, int *sample_rate, int *bit_rate);
-static int decode_audio_dts(unsigned char *indata_ptr, int len, unsigned char *buf);
-
-
-static int a52_syncinfo (uint8_t *buf, int *sample_rate, int *bit_rate)
-{
- static const uint16_t rate[] = { 32, 40, 48, 56, 64, 80, 96, 112,
- 128, 160, 192, 224, 256, 320, 384, 448,
- 512, 576, 640};
- int frmsizecod;
- int bitrate;
- int half;
-
- if (buf[0] != 0x0b || buf[1] != 0x77) /* syncword */
- return 0;
-
- if (buf[5] >= 0x60) /* bsid >= 12 */
- return 0;
- half = buf[5] >> 3;
- half = FFMAX(half - 8, 0);
-
- frmsizecod = buf[4] & 63;
- if (frmsizecod >= 38)
- return 0;
- bitrate = rate[frmsizecod >> 1];
- *bit_rate = (bitrate * 1000) >> half;
-
- switch (buf[4] & 0xc0) {
- case 0:
- *sample_rate = 48000 >> half;
- return 4 * bitrate;
- case 0x40:
- *sample_rate = 44100 >> half;
- return 2 * (320 * bitrate / 147 + (frmsizecod & 1));
- case 0x80:
- *sample_rate = 32000 >> half;
- return 6 * bitrate;
- default:
- return 0;
- }
-}
-
-static int ac3dts_fillbuff(sh_audio_t *sh_audio)
-{
- int length = 0;
- int flags = 0;
- int sample_rate = 0;
- int bit_rate = 0;
-
- sh_audio->a_in_buffer_len = 0;
- /* sync frame:*/
- while(1)
- {
- // Original code DTS has a 10 bytes header.
- // Now max 12 bytes for 14 bits DTS header.
- while(sh_audio->a_in_buffer_len < 12)
- {
- int c = demux_getc(sh_audio->ds);
- if(c<0)
- return -1; /* EOF*/
- sh_audio->a_in_buffer[sh_audio->a_in_buffer_len++] = c;
- }
-
- if (sh_audio->format == 0x2001)
- {
- length = dts_syncinfo(sh_audio->a_in_buffer, &flags, &sample_rate, &bit_rate);
- if(length >= 12)
- {
- if(isdts != 1)
- {
- mp_msg(MSGT_DECAUDIO, MSGL_STATUS, "hwac3: switched to DTS, %d bps, %d Hz\n", bit_rate, sample_rate);
- isdts = 1;
- }
- break;
- }
- }
- else
- {
- length = a52_syncinfo(sh_audio->a_in_buffer, &sample_rate, &bit_rate);
- if(length >= 7 && length <= 3840)
- {
- if(isdts != 0)
- {
- mp_msg(MSGT_DECAUDIO, MSGL_STATUS, "hwac3: switched to AC3, %d bps, %d Hz\n", bit_rate, sample_rate);
- isdts = 0;
- }
- break; /* we're done.*/
- }
- }
- /* bad file => resync*/
- memcpy(sh_audio->a_in_buffer, sh_audio->a_in_buffer + 1, 11);
- --sh_audio->a_in_buffer_len;
- }
- mp_msg(MSGT_DECAUDIO, MSGL_DBG2, "ac3dts: %s len=%d flags=0x%X %d Hz %d bit/s\n", isdts == 1 ? "DTS" : isdts == 0 ? "AC3" : "unknown", length, flags, sample_rate, bit_rate);
-
- sh_audio->samplerate = sample_rate;
- sh_audio->i_bps = bit_rate / 8;
- demux_read_data(sh_audio->ds, sh_audio->a_in_buffer + 12, length - 12);
- sh_audio->a_in_buffer_len = length;
-
- return length;
-}
-
-
-static int preinit(sh_audio_t *sh)
-{
- /* Dolby AC3 audio: */
- sh->audio_out_minsize = 128 * 32 * 2 * 2; // DTS seems to need more than AC3
- sh->audio_in_minsize = 8192;
- sh->channels = 2;
- sh->samplesize = 2;
- sh->sample_format = AF_FORMAT_AC3_BE;
- // HACK for DTS where useless swapping can't easily be removed
- if (sh->format == 0x2001)
- sh->sample_format = AF_FORMAT_AC3_NE;
- return 1;
-}
-
-static int init(sh_audio_t *sh_audio)
-{
- /* Dolby AC3 passthrough:*/
- if(ac3dts_fillbuff(sh_audio) < 0)
- {
- mp_msg(MSGT_DECAUDIO, MSGL_ERR, "AC3/DTS sync failed\n");
- return 0;
- }
- return 1;
-}
-
-static void uninit(sh_audio_t *sh)
-{
-}
-
-static int control(sh_audio_t *sh,int cmd,void* arg, ...)
-{
- switch(cmd)
- {
- case ADCTRL_RESYNC_STREAM:
- case ADCTRL_SKIP_FRAME:
- ac3dts_fillbuff(sh);
- return CONTROL_TRUE;
- }
- return CONTROL_UNKNOWN;
-}
-
-
-static int decode_audio(sh_audio_t *sh_audio,unsigned char *buf,int minlen,int maxlen)
-{
- int len = sh_audio->a_in_buffer_len;
-
- if(len <= 0)
- if((len = ac3dts_fillbuff(sh_audio)) <= 0)
- return len; /*EOF*/
- sh_audio->a_in_buffer_len = 0;
-
- if(isdts == 1)
- {
- return decode_audio_dts(sh_audio->a_in_buffer, len, buf);
- }
- else if(isdts == 0)
- {
- AV_WB16(buf, 0xF872); // iec 61937 syncword 1
- AV_WB16(buf + 2, 0x4E1F); // iec 61937 syncword 2
- buf[4] = sh_audio->a_in_buffer[5] & 0x7; // bsmod
- buf[5] = 0x01; // data-type ac3
- AV_WB16(buf + 6, len << 3); // number of bits in payload
- memcpy(buf + 8, sh_audio->a_in_buffer, len);
- memset(buf + 8 + len, 0, 6144 - 8 - len);
-
- return 6144;
- }
- else
- return -1;
-}
-
-
-static const int DTS_SAMPLEFREQS[16] =
-{
- 0,
- 8000,
- 16000,
- 32000,
- 64000,
- 128000,
- 11025,
- 22050,
- 44100,
- 88200,
- 176400,
- 12000,
- 24000,
- 48000,
- 96000,
- 192000
-};
-
-static const int DTS_BITRATES[30] =
-{
- 32000,
- 56000,
- 64000,
- 96000,
- 112000,
- 128000,
- 192000,
- 224000,
- 256000,
- 320000,
- 384000,
- 448000,
- 512000,
- 576000,
- 640000,
- 768000,
- 896000,
- 1024000,
- 1152000,
- 1280000,
- 1344000,
- 1408000,
- 1411200,
- 1472000,
- 1536000,
- 1920000,
- 2048000,
- 3072000,
- 3840000,
- 4096000
-};
-
-static int dts_decode_header(uint8_t *indata_ptr, int *rate, int *nblks, int *sfreq)
-{
- int ftype;
- int surp;
- int unknown_bit av_unused;
- int fsize;
- int amode av_unused;
-
- int word_mode;
- int le_mode;
-
- unsigned int first4bytes = indata_ptr[0] << 24 | indata_ptr[1] << 16
- | indata_ptr[2] << 8 | indata_ptr[3];
-
- switch(first4bytes)
- {
- /* 14 bits LE */
- case 0xff1f00e8:
- /* Also make sure frame type is 1. */
- if ((indata_ptr[4]&0xf0) != 0xf0 || indata_ptr[5] != 0x07)
- return -1;
- word_mode = 0;
- le_mode = 1;
- break;
- /* 14 bits BE */
- case 0x1fffe800:
- /* Also make sure frame type is 1. */
- if (indata_ptr[4] != 0x07 || (indata_ptr[5]&0xf0) != 0xf0)
- return -1;
- word_mode = 0;
- le_mode = 0;
- break;
- /* 16 bits LE */
- case 0xfe7f0180:
- word_mode = 1;
- le_mode = 1;
- break;
- /* 16 bits BE */
- case 0x7ffe8001:
- word_mode = 1;
- le_mode = 0;
- break;
- default:
- return -1;
- }
-
- if(word_mode)
- {
- /* First bit after first 32 bits:
- Frame type ( 1: Normal frame; 0: Termination frame ) */
- ftype = indata_ptr[4+le_mode] >> 7;
-
- if(ftype != 1)
- {
- mp_msg(MSGT_DECAUDIO, MSGL_ERR, "DTS: Termination frames not handled, REPORT BUG\n");
- return -1;
- }
- /* Next 5 bits: Surplus Sample Count V SURP 5 bits */
- surp = indata_ptr[4+le_mode] >> 2 & 0x1f;
- /* Number of surplus samples */
- surp = (surp + 1) % 32;
-
- /* One unknown bit, crc? */
- unknown_bit = indata_ptr[4+le_mode] >> 1 & 0x01;
-
- /* NBLKS 7 bits: Valid Range=5-127, Invalid Range=0-4 */
- *nblks = (indata_ptr[4+le_mode] & 0x01) << 6 | indata_ptr[5-le_mode] >> 2;
- /* NBLKS+1 indicates the number of 32 sample PCM audio blocks per channel
- encoded in the current frame per channel. */
- ++(*nblks);
-
- /* Frame Byte Size V FSIZE 14 bits: 0-94=Invalid, 95-8191=Valid range-1
- (ie. 96 bytes to 8192 bytes), 8192-16383=Invalid
- FSIZE defines the byte size of the current audio frame. */
- fsize = (indata_ptr[5-le_mode] & 0x03) << 12 | indata_ptr[6+le_mode] << 4
- | indata_ptr[7-le_mode] >> 4;
- ++fsize;
-
- /* Audio Channel Arrangement ACC AMODE 6 bits */
- amode = (indata_ptr[7-le_mode] & 0x0f) << 2 | indata_ptr[8+le_mode] >> 6;
-
- /* Source Sampling rate ACC SFREQ 4 bits */
- *sfreq = indata_ptr[8+le_mode] >> 2 & 0x0f;
- /* Transmission Bit Rate ACC RATE 5 bits */
- *rate = (indata_ptr[8+le_mode] & 0x03) << 3
- | (indata_ptr[9-le_mode] >> 5 & 0x07);
- }
- else
- {
- /* in the case judgement, we assure this */
- ftype = 1;
- surp = 0;
- /* 14 bits support, every 2 bytes, & 0x3fff, got used 14 bits */
- /* Bits usage:
- 32 bits: Sync code (28 + 4) 1th and 2th word, 4 bits in 3th word
- 1 bits: Frame type 1 bits in 3th word
- 5 bits: SURP 5 bits in 3th word
- 1 bits: crc? 1 bits in 3th word
- 7 bits: NBLKS 3 bits in 3th word, 4 bits in 4th word
- 14 bits: FSIZE 10 bits in 4th word, 4 bits in 5th word
- in 14 bits mode, FSIZE = FSIZE*8/14*2
- 6 bits: AMODE 6 bits in 5th word
- 4 bits: SFREQ 4 bits in 5th word
- 5 bits: RATE 5 bits in 6th word
- total bits: 75 bits */
-
- /* NBLKS 7 bits: Valid Range=5-127, Invalid Range=0-4 */
- *nblks = (indata_ptr[5-le_mode] & 0x07) << 4
- | (indata_ptr[6+le_mode] & 0x3f) >> 2;
- /* NBLKS+1 indicates the number of 32 sample PCM audio blocks per channel
- encoded in the current frame per channel. */
- ++(*nblks);
-
- /* Frame Byte Size V FSIZE 14 bits: 0-94=Invalid, 95-8191=Valid range-1
- (ie. 96 bytes to 8192 bytes), 8192-16383=Invalid
- FSIZE defines the byte size of the current audio frame. */
- fsize = (indata_ptr[6+le_mode] & 0x03) << 12 | indata_ptr[7-le_mode] << 4
- | (indata_ptr[8+le_mode] & 0x3f) >> 2;
- ++fsize;
- fsize = fsize * 8 / 14 * 2;
-
- /* Audio Channel Arrangement ACC AMODE 6 bits */
- amode = (indata_ptr[8+le_mode] & 0x03) << 4
- | (indata_ptr[9-le_mode] & 0xf0) >> 4;
-
- /* Source Sampling rate ACC SFREQ 4 bits */
- *sfreq = indata_ptr[9-le_mode] & 0x0f;
- /* Transmission Bit Rate ACC RATE 5 bits */
- *rate = (indata_ptr[10+le_mode] & 0x3f) >> 1;
- }
-#if 0
- if(*sfreq != 13)
- {
- mp_msg(MSGT_DECAUDIO, MSGL_ERR, "DTS: Only 48kHz supported, REPORT BUG\n");
- return -1;
- }
-#endif
- if((fsize > 8192) || (fsize < 96))
- {
- mp_msg(MSGT_DECAUDIO, MSGL_ERR, "DTS: fsize: %d invalid, REPORT BUG\n", fsize);
- return -1;
- }
-
- if(*nblks != 8 &&
- *nblks != 16 &&
- *nblks != 32 &&
- *nblks != 64 &&
- *nblks != 128 &&
- ftype == 1)
- {
- mp_msg(MSGT_DECAUDIO, MSGL_ERR, "DTS: nblks %d not valid for normal frame, REPORT BUG\n", *nblks);
- return -1;
- }
-
- return fsize;
-}
-
-static int dts_syncinfo(uint8_t *indata_ptr, int *flags, int *sample_rate, int *bit_rate)
-{
- int nblks;
- int fsize;
- int rate;
- int sfreq;
-
- fsize = dts_decode_header(indata_ptr, &rate, &nblks, &sfreq);
- if(fsize >= 0)
- {
- if(rate >= 0 && rate <= 29)
- *bit_rate = DTS_BITRATES[rate];
- else
- *bit_rate = 0;
- if(sfreq >= 1 && sfreq <= 15)
- *sample_rate = DTS_SAMPLEFREQS[sfreq];
- else
- *sample_rate = 0;
- }
- return fsize;
-}
-
-static int convert_14bits_to_16bits(const unsigned char *src,
- unsigned char *dest,
- int len,
- int is_le)
-{
- uint16_t *p = (uint16_t *)dest;
- uint16_t buf = 0;
- int spacebits = 16;
- if (len <= 0) return 0;
- while (len > 0) {
- uint16_t v;
- if (len == 1)
- v = is_le ? src[0] : src[0] << 8;
- else
- v = is_le ? src[1] << 8 | src[0] : src[0] << 8 | src[1];
- v <<= 2;
- src += 2;
- len -= 2;
- buf |= v >> (16 - spacebits);
- spacebits -= 14;
- if (spacebits < 0) {
- *p++ = buf;
- spacebits += 16;
- buf = v << (spacebits - 2);
- }
- }
- *p++ = buf;
- return (unsigned char *)p - dest;
-}
-
-static int decode_audio_dts(unsigned char *indata_ptr, int len, unsigned char *buf)
-{
- int nblks;
- int fsize;
- int rate;
- int sfreq;
- int nr_samples;
- int convert_16bits = 0;
- uint16_t *buf16 = (uint16_t *)buf;
-
- fsize = dts_decode_header(indata_ptr, &rate, &nblks, &sfreq);
- if(fsize < 0)
- return -1;
- nr_samples = nblks * 32;
-
- buf16[0] = 0xf872; /* iec 61937 */
- buf16[1] = 0x4e1f; /* syncword */
- switch(nr_samples)
- {
- case 512:
- buf16[2] = 0x000b; /* DTS-1 (512-sample bursts) */
- break;
- case 1024:
- buf16[2] = 0x000c; /* DTS-2 (1024-sample bursts) */
- break;
- case 2048:
- buf16[2] = 0x000d; /* DTS-3 (2048-sample bursts) */
- break;
- default:
- mp_msg(MSGT_DECAUDIO, MSGL_ERR, "DTS: %d-sample bursts not supported\n", nr_samples);
- buf16[2] = 0x0000;
- break;
- }
-
- if(fsize + 8 > nr_samples * 2 * 2)
- {
- // dts wav (14bits LE) match this condition, one way to passthrough
- // is not add iec 61937 header, decoders will notice the dts header
- // and identify the dts stream. Another way here is convert
- // the stream from 14 bits to 16 bits.
- if ((indata_ptr[0] == 0xff || indata_ptr[0] == 0x1f)
- && fsize * 14 / 16 + 8 <= nr_samples * 2 * 2) {
- // The input stream is 14 bits, we can shrink it to 16 bits
- // to save space for add the 61937 header
- fsize = convert_14bits_to_16bits(indata_ptr,
- &buf[8],
- fsize,
- indata_ptr[0] == 0xff /* is LE */
- );
- mp_msg(MSGT_DECAUDIO, MSGL_DBG3, "DTS: shrink 14 bits stream to "
- "16 bits %02x%02x%02x%02x => %02x%02x%02x%02x, new size %d.\n",
- indata_ptr[0], indata_ptr[1], indata_ptr[2], indata_ptr[3],
- buf[8], buf[9], buf[10], buf[11], fsize);
- convert_16bits = 1;
- }
- else
- mp_msg(MSGT_DECAUDIO, MSGL_ERR, "DTS: more data than fits\n");
- }
-
- buf16[3] = fsize << 3;
-
- if (!convert_16bits) {
-#ifdef BIG_ENDIAN
- /* BE stream */
- if (indata_ptr[0] == 0x1f || indata_ptr[0] == 0x7f)
-#else
- /* LE stream */
- if (indata_ptr[0] == 0xff || indata_ptr[0] == 0xfe)
-#endif
- memcpy(&buf[8], indata_ptr, fsize);
- else
- {
- swab(indata_ptr, &buf[8], fsize);
- if (fsize & 1) {
- buf[8+fsize-1] = 0;
- buf[8+fsize] = indata_ptr[fsize-1];
- fsize++;
- }
- }
- }
- memset(&buf[fsize + 8], 0, nr_samples * 2 * 2 - (fsize + 8));
-
- return nr_samples * 2 * 2;
-}
diff --git a/libmpcodecs/ad_hwmpa.c b/libmpcodecs/ad_hwmpa.c
deleted file mode 100644
index 87c00b6f42..0000000000
--- a/libmpcodecs/ad_hwmpa.c
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * This file is part of MPlayer.
- *
- * MPlayer is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * MPlayer 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with MPlayer; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include "config.h"
-
-#include "mp_msg.h"
-
-#include "libaf/af_format.h"
-#include "ad_internal.h"
-
-#include "libmpdemux/mp3_hdr.h"
-
-//based on ad_hwac3.c and ad_libmad.c
-
-static const ad_info_t info =
-{
- "MPEG audio pass-through (fake decoder)",
- "hwmpa",
- "NicoDVB",
- "NicoDVB",
- "For hardware decoders"
-};
-
-LIBAD_EXTERN(hwmpa)
-
-static int mpa_sync(sh_audio_t *sh, int no_frames, int *n, int *chans, int *srate, int *spf, int *mpa_layer, int *br)
-{
- int cnt = 0, x = 0, len, frames_count;
-
- frames_count = 0;
- do
- {
- while(cnt + 4 < sh->a_in_buffer_len)
- {
- x = mp_get_mp3_header(&(sh->a_in_buffer[cnt]), chans, srate, spf, mpa_layer, br);
- if(x > 0)
- {
- frames_count++;
- if(frames_count == no_frames)
- {
- *n = x;
- return cnt;
- }
- }
- cnt++;
- }
- len = demux_read_data(sh->ds,&sh->a_in_buffer[sh->a_in_buffer_len],sh->a_in_buffer_size-sh->a_in_buffer_len);
- if(len > 0)
- sh->a_in_buffer_len += len;
- } while(len > 0);
- mp_msg(MSGT_DECAUDIO,MSGL_INFO,"Cannot sync MPA frame: %d\r\n", len);
- return -1;
-}
-
-static int preinit(sh_audio_t *sh)
-{
- sh->audio_out_minsize = 4608;//check
- sh->audio_in_minsize = 4608;//check
- sh->sample_format = AF_FORMAT_MPEG2;
- return 1;
-}
-
-static int init(sh_audio_t *sh)
-{
- int cnt, chans, srate, spf, mpa_layer, br, len;
-
- if((cnt = mpa_sync(sh, 1, &len, &chans, &srate, &spf, &mpa_layer, &br)) < 0)
- return 0;
-
- sh->channels = chans;
- sh->samplerate = srate;
- sh->i_bps = br * 125;
- sh->samplesize = 2;
-
- mp_msg(MSGT_DECAUDIO,MSGL_V,"AC_HWMPA initialized, bitrate: %d kb/s\r\n", len);
- return 1;
-}
-
-static int decode_audio(sh_audio_t *sh,unsigned char *buf,int minlen,int maxlen)
-{
- int len, start, tot;
- int chans, srate, spf, mpa_layer, br;
- int tot2;
-
- tot = tot2 = 0;
-
- while(tot2 < maxlen)
- {
- start = mpa_sync(sh, 1, &len, &chans, &srate, &spf, &mpa_layer, &br);
- if(start < 0 || tot2 + spf * 2 * chans > maxlen)
- break;
-
- if(start + len > sh->a_in_buffer_len)
- {
- int l;
- l = FFMIN(sh->a_in_buffer_size - sh->a_in_buffer_len, start + len);
- l = demux_read_data(sh->ds,&sh->a_in_buffer[sh->a_in_buffer_len], l);
- if(! l)
- break;
- sh->a_in_buffer_len += l;
- continue;
- }
-
- memcpy(&buf[tot], &(sh->a_in_buffer[start]), len);
- tot += len;
-
- sh->a_in_buffer_len -= start + len;
- memmove(sh->a_in_buffer, &(sh->a_in_buffer[start + len]), sh->a_in_buffer_len);
- tot2 += spf * 2 * chans;
-
- /* HACK: seems to fix most A/V sync issues */
- break;
- }
-
- memset(&buf[tot], 0, tot2-tot);
- return tot2;
-}
-
-
-static int control(sh_audio_t *sh,int cmd,void* arg, ...)
-{
- int start, len;
-
- switch(cmd)
- {
- case ADCTRL_RESYNC_STREAM:
- if(mpa_sync(sh, 1, &len, NULL, NULL, NULL, NULL, NULL) >= 0)
- return CONTROL_TRUE;
- else
- return CONTROL_FALSE;
- case ADCTRL_SKIP_FRAME:
- start = mpa_sync(sh, 2, &len, NULL, NULL, NULL, NULL, NULL);
- if(start < 0)
- return CONTROL_FALSE;
-
- sh->a_in_buffer_len -= start;
- memmove(sh->a_in_buffer, &(sh->a_in_buffer[start]), sh->a_in_buffer_len);
- return CONTROL_TRUE;
- }
- return CONTROL_UNKNOWN;
-}
-
-
-static void uninit(sh_audio_t *sh)
-{
-}
diff --git a/libmpcodecs/ad_imaadpcm.c b/libmpcodecs/ad_imaadpcm.c
deleted file mode 100644
index 84f667ecd6..0000000000
--- a/libmpcodecs/ad_imaadpcm.c
+++ /dev/null
@@ -1,340 +0,0 @@
-/*
- * IMA ADPCM decoder
- *
- * This file is in charge of decoding all of the various IMA ADPCM data
- * formats that various entities have created. Details about the data
- * formats can be found here:
- * http://www.pcisys.net/~melanson/codecs/
- *
- * So far, this file handles these formats:
- * 'ima4': IMA ADPCM found in QT files
- * 0x11: IMA ADPCM found in MS AVI/ASF/WAV files
- * 0x61: DK4 ADPCM found in certain AVI files on Sega Saturn CD-ROMs;
- * note that this is a 'rogue' format number in that it was
- * never officially registered with Microsoft
- * 0x1100736d: IMA ADPCM coded like in MS AVI/ASF/WAV found in QT files
- *
- * Copyright (c) 2002 Mike Melanson
- *
- * This file is part of MPlayer.
- *
- * MPlayer is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * MPlayer 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with MPlayer; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <inttypes.h>
-
-#include <libavutil/intreadwrite.h>
-
-#include "config.h"
-#include "mpbswap.h"
-#include "ad_internal.h"
-
-#define MS_IMA_ADPCM_PREAMBLE_SIZE 4
-
-#define QT_IMA_ADPCM_PREAMBLE_SIZE 2
-#define QT_IMA_ADPCM_BLOCK_SIZE 0x22
-#define QT_IMA_ADPCM_SAMPLES_PER_BLOCK 64
-
-// pertinent tables for IMA ADPCM
-static const int16_t adpcm_step[89] =
-{
- 7, 8, 9, 10, 11, 12, 13, 14, 16, 17,
- 19, 21, 23, 25, 28, 31, 34, 37, 41, 45,
- 50, 55, 60, 66, 73, 80, 88, 97, 107, 118,
- 130, 143, 157, 173, 190, 209, 230, 253, 279, 307,
- 337, 371, 408, 449, 494, 544, 598, 658, 724, 796,
- 876, 963, 1060, 1166, 1282, 1411, 1552, 1707, 1878, 2066,
- 2272, 2499, 2749, 3024, 3327, 3660, 4026, 4428, 4871, 5358,
- 5894, 6484, 7132, 7845, 8630, 9493, 10442, 11487, 12635, 13899,
- 15289, 16818, 18500, 20350, 22385, 24623, 27086, 29794, 32767
-};
-
-static const int8_t adpcm_index[8] =
-{
- -1, -1, -1, -1, 2, 4, 6, 8,
-};
-
-// useful macros
-// clamp a number between 0 and 88
-#define CLAMP_0_TO_88(x) x = av_clip(x, 0, 88);
-// clamp a number within a signed 16-bit range
-#define CLAMP_S16(x) x = av_clip_int16(x);
-// clamp a number above 16
-#define CLAMP_ABOVE_16(x) if (x < 16) x = 16;
-
-static const ad_info_t info =
-{
- "IMA ADPCM audio decoder",
- "imaadpcm",
- "Nick Kurshev",
- "Mike Melanson",
- ""
-};
-
-LIBAD_EXTERN(imaadpcm)
-
-static int preinit(sh_audio_t *sh_audio)
-{
- // not exactly sure what this field is for
- sh_audio->audio_out_minsize = 8192;
-
- // if format is "ima4", assume the audio is coming from a QT file which
- // indicates constant block size, whereas an AVI/ASF/WAV file will fill
- // in this field with 0x11
- if ((sh_audio->format == 0x11) || (sh_audio->format == 0x61) ||
- (sh_audio->format == 0x1100736d))
- {
- sh_audio->ds->ss_div = (sh_audio->wf->nBlockAlign -
- (MS_IMA_ADPCM_PREAMBLE_SIZE * sh_audio->wf->nChannels)) * 2;
- sh_audio->ds->ss_mul = sh_audio->wf->nBlockAlign;
- }
- else
- {
- sh_audio->ds->ss_div = QT_IMA_ADPCM_SAMPLES_PER_BLOCK;
- sh_audio->ds->ss_mul = QT_IMA_ADPCM_BLOCK_SIZE * sh_audio->wf->nChannels;
- }
- sh_audio->audio_in_minsize=sh_audio->ds->ss_mul;
- return 1;
-}
-
-static int init(sh_audio_t *sh_audio)
-{
- /* IMA-ADPCM 4:1 audio codec:*/
- sh_audio->channels=sh_audio->wf->nChannels;
- sh_audio->samplerate=sh_audio->wf->nSamplesPerSec;
- /* decodes 34 byte -> 64 short*/
- sh_audio->i_bps =
- (sh_audio->ds->ss_mul * sh_audio->samplerate) / sh_audio->ds->ss_div;
- sh_audio->samplesize=2;
-
- return 1;
-}
-
-static void uninit(sh_audio_t *sh_audio)
-{
-}
-
-static int control(sh_audio_t *sh_audio,int cmd,void* arg, ...)
-{
- if(cmd==ADCTRL_SKIP_FRAME){
- demux_read_data(sh_audio->ds, sh_audio->a_in_buffer,sh_audio->ds->ss_mul);
- return CONTROL_TRUE;
- }
- return CONTROL_UNKNOWN;
-}
-
-static void decode_nibbles(unsigned short *output,
- int output_size, int channels,
- int predictor[2], int index[2])
-{
- int step[2];
- int i;
- int sign;
- int delta;
- int channel_number = 0;
-
- step[0] = adpcm_step[index[0]];
- step[1] = adpcm_step[index[1]];
-
- for (i = 0; i < output_size; i++)
- {
- delta = output[i];
- sign = delta & 8;
- delta = delta & 7;
-
- index[channel_number] += adpcm_index[delta];
- CLAMP_0_TO_88(index[channel_number]);
-
- delta = 2 * delta + 1;
- if (sign) delta = -delta;
-
- predictor[channel_number] += (delta * step[channel_number]) >> 3;
-
- CLAMP_S16(predictor[channel_number]);
- output[i] = predictor[channel_number];
- step[channel_number] = adpcm_step[index[channel_number]];
-
- // toggle channel
- channel_number ^= channels - 1;
-
- }
-}
-
-static int qt_ima_adpcm_decode_block(unsigned short *output,
- unsigned char *input, int channels, int block_size)
-{
- int initial_predictor[2] = {0};
- int initial_index[2] = {0};
- int i;
-
- if (channels != 1) channels = 2;
- if (block_size < channels * QT_IMA_ADPCM_BLOCK_SIZE)
- return -1;
-
- for (i = 0; i < channels; i++) {
- initial_index[i] = initial_predictor[i] = (int16_t)AV_RB16(&input[i * QT_IMA_ADPCM_BLOCK_SIZE]);
-
- // mask, sign-extend, and clamp the predictor portion
- initial_predictor[i] &= ~0x7F;
- CLAMP_S16(initial_predictor[i]);
-
- // mask and clamp the index portion
- initial_index[i] &= 0x7F;
- CLAMP_0_TO_88(initial_index[i]);
- }
-
- // break apart all of the nibbles in the block
- if (channels == 1)
- for (i = 0; i < QT_IMA_ADPCM_SAMPLES_PER_BLOCK / 2; i++)
- {
- output[i * 2 + 0] = input[2 + i] & 0x0F;
- output[i * 2 + 1] = input[2 + i] >> 4;
- }
- else
- for (i = 0; i < QT_IMA_ADPCM_SAMPLES_PER_BLOCK / 2; i++)
- {
- output[i * 4 + 0] = input[2 + i] & 0x0F;
- output[i * 4 + 1] = input[2 + QT_IMA_ADPCM_BLOCK_SIZE + i] & 0x0F;
- output[i * 4 + 2] = input[2 + i] >> 4;
- output[i * 4 + 3] = input[2 + QT_IMA_ADPCM_BLOCK_SIZE + i] >> 4;
- }
-
- decode_nibbles(output,
- QT_IMA_ADPCM_SAMPLES_PER_BLOCK * channels, channels,
- initial_predictor, initial_index);
-
- return QT_IMA_ADPCM_SAMPLES_PER_BLOCK * channels;
-}
-
-static int ms_ima_adpcm_decode_block(unsigned short *output,
- unsigned char *input, int channels, int block_size)
-{
- int predictor[2];
- int index[2];
- int i;
- int channel_counter;
- int channel_index;
- int channel_index_l;
- int channel_index_r;
-
- if (channels != 1) channels = 2;
- if (block_size < MS_IMA_ADPCM_PREAMBLE_SIZE * channels)
- return -1;
-
- for (i = 0; i < channels; i++) {
- predictor[i] = (int16_t)AV_RL16(&input[i * 4]);
- index[i] = input[i * 4 + 2];
- }
-
- if (channels == 1)
- for (i = 0;
- i < (block_size - MS_IMA_ADPCM_PREAMBLE_SIZE * channels); i++)
- {
- output[i * 2 + 0] = input[MS_IMA_ADPCM_PREAMBLE_SIZE + i] & 0x0F;
- output[i * 2 + 1] = input[MS_IMA_ADPCM_PREAMBLE_SIZE + i] >> 4;
- }
- else
- {
- // encoded as 8 nibbles (4 bytes) per channel; switch channel every
- // 4th byte
- channel_counter = 0;
- channel_index_l = 0;
- channel_index_r = 1;
- channel_index = channel_index_l;
- for (i = 0;
- i < (block_size - MS_IMA_ADPCM_PREAMBLE_SIZE * channels); i++)
- {
- output[channel_index + 0] =
- input[MS_IMA_ADPCM_PREAMBLE_SIZE * 2 + i] & 0x0F;
- output[channel_index + 2] =
- input[MS_IMA_ADPCM_PREAMBLE_SIZE * 2 + i] >> 4;
- channel_index += 4;
- channel_counter++;
- if (channel_counter == 4)
- {
- channel_index_l = channel_index;
- channel_index = channel_index_r;
- }
- else if (channel_counter == 8)
- {
- channel_index_r = channel_index;
- channel_index = channel_index_l;
- channel_counter = 0;
- }
- }
- }
-
- decode_nibbles(output,
- (block_size - MS_IMA_ADPCM_PREAMBLE_SIZE * channels) * 2,
- channels,
- predictor, index);
-
- return (block_size - MS_IMA_ADPCM_PREAMBLE_SIZE * channels) * 2;
-}
-
-static int dk4_ima_adpcm_decode_block(unsigned short *output,
- unsigned char *input, int channels, int block_size)
-{
- int i;
- int output_ptr;
- int predictor[2];
- int index[2];
-
- if (channels != 1) channels = 2;
- if (block_size < MS_IMA_ADPCM_PREAMBLE_SIZE * channels)
- return -1;
-
- for (i = 0; i < channels; i++) {
- // the first predictor value goes straight to the output
- predictor[i] = output[i] = (int16_t)AV_RL16(&input[i * 4]);
- index[i] = input[i * 4 + 2];
- }
-
- output_ptr = channels;
- for (i = MS_IMA_ADPCM_PREAMBLE_SIZE * channels; i < block_size; i++)
- {
- output[output_ptr++] = input[i] >> 4;
- output[output_ptr++] = input[i] & 0x0F;
- }
-
- decode_nibbles(&output[channels],
- (block_size - MS_IMA_ADPCM_PREAMBLE_SIZE * channels) * 2 - channels,
- channels,
- predictor, index);
-
- return (block_size - MS_IMA_ADPCM_PREAMBLE_SIZE * channels) * 2 - channels;
-}
-
-static int decode_audio(sh_audio_t *sh_audio,unsigned char *buf,int minlen,int maxlen)
-{
- int res = -1;
- int (*decode_func)(unsigned short *output, unsigned char *input, int channels, int block_size) = qt_ima_adpcm_decode_block;
- if (demux_read_data(sh_audio->ds, sh_audio->a_in_buffer,
- sh_audio->ds->ss_mul) !=
- sh_audio->ds->ss_mul)
- return -1;
-
- if ((sh_audio->format == 0x11) || (sh_audio->format == 0x1100736d))
- decode_func = ms_ima_adpcm_decode_block;
- else if (sh_audio->format == 0x61)
- decode_func = dk4_ima_adpcm_decode_block;
-
- res = decode_func((unsigned short*)buf, sh_audio->a_in_buffer,
- sh_audio->wf->nChannels, sh_audio->ds->ss_mul);
- return res < 0 ? res : 2 * res;
-}
diff --git a/libmpcodecs/ad_liba52.c b/libmpcodecs/ad_liba52.c
deleted file mode 100644
index 505532af6b..0000000000
--- a/libmpcodecs/ad_liba52.c
+++ /dev/null
@@ -1,339 +0,0 @@
-/*
- * This file is part of MPlayer.
- *
- * MPlayer is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * MPlayer 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with MPlayer; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#define _GNU_SOURCE
-#define _XOPEN_SOURCE 600
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <math.h>
-#include <assert.h>
-
-#include "config.h"
-#include "options.h"
-#include "mp_msg.h"
-#include "mpbswap.h"
-
-#include "ad_internal.h"
-
-#include "cpudetect.h"
-
-#include "libaf/af_format.h"
-
-#include <a52dec/a52.h>
-#include <a52dec/mm_accel.h>
-int (* a52_resample) (float * _f, int16_t * s16);
-
-static a52_state_t *a52_state;
-static uint32_t a52_flags=0;
-/** Used by a52_resample_float, it defines the mapping between liba52
- * channels and output channels. The ith nibble from the right in the
- * hex representation of channel_map is the index of the source
- * channel corresponding to the ith output channel. Source channels are
- * indexed 1-6. Silent output channels are marked by 0xf. */
-static uint32_t channel_map;
-
-#define DRC_NO_ACTION 0
-#define DRC_NO_COMPRESSION 1
-#define DRC_CALLBACK 2
-
-/** The output is multiplied by this var. Used for volume control */
-static sample_t a52_level = 1;
-static int a52_drc_action = DRC_NO_ACTION;
-
-static const ad_info_t info =
-{
- "AC3 decoding with liba52",
- "liba52",
- "Nick Kurshev",
- "Michel LESPINASSE",
- ""
-};
-
-LIBAD_EXTERN(liba52)
-
-static int a52_fillbuff(sh_audio_t *sh_audio)
-{
-int length=0;
-int flags=0;
-int sample_rate=0;
-int bit_rate=0;
-
- sh_audio->a_in_buffer_len=0;
- /* sync frame:*/
-while(1){
- while(sh_audio->a_in_buffer_len<8){
- int c=demux_getc(sh_audio->ds);
- if(c<0) return -1; /* EOF*/
- sh_audio->a_in_buffer[sh_audio->a_in_buffer_len++]=c;
- }
- if(sh_audio->format==MKTAG('d','n','e','t')) swab(sh_audio->a_in_buffer,sh_audio->a_in_buffer,8);
- length = a52_syncinfo (sh_audio->a_in_buffer, &flags, &sample_rate, &bit_rate);
- if(length>=7 && length<=3840) break; /* we're done.*/
- /* bad file => resync*/
- if(sh_audio->format==MKTAG('d','n','e','t')) swab(sh_audio->a_in_buffer,sh_audio->a_in_buffer,8);
- memmove(sh_audio->a_in_buffer,sh_audio->a_in_buffer+1,7);
- --sh_audio->a_in_buffer_len;
-}
- mp_msg(MSGT_DECAUDIO,MSGL_DBG2,"a52: len=%d flags=0x%X %d Hz %d bit/s\n",length,flags,sample_rate,bit_rate);
- sh_audio->samplerate=sample_rate;
- sh_audio->i_bps=bit_rate/8;
- sh_audio->samplesize=sh_audio->sample_format==AF_FORMAT_FLOAT_NE ? 4 : 2;
- demux_read_data(sh_audio->ds,sh_audio->a_in_buffer+8,length-8);
- if(sh_audio->format==MKTAG('d','n','e','t'))
- swab(sh_audio->a_in_buffer+8,sh_audio->a_in_buffer+8,length-8);
-
-#ifdef CONFIG_LIBA52_INTERNAL
- if(crc16_block(sh_audio->a_in_buffer+2,length-2)!=0)
- mp_msg(MSGT_DECAUDIO,MSGL_STATUS,"a52: CRC check failed! \n");
-#endif
-
- return length;
-}
-
-/* returns: number of available channels*/
-static int a52_printinfo(sh_audio_t *sh_audio){
-int flags, sample_rate, bit_rate;
-char* mode="unknown";
-int channels=0;
- a52_syncinfo (sh_audio->a_in_buffer, &flags, &sample_rate, &bit_rate);
- switch(flags&A52_CHANNEL_MASK){
- case A52_CHANNEL: mode="channel"; channels=2; break;
- case A52_MONO: mode="mono"; channels=1; break;
- case A52_STEREO: mode="stereo"; channels=2; break;
- case A52_3F: mode="3f";channels=3;break;
- case A52_2F1R: mode="2f+1r";channels=3;break;
- case A52_3F1R: mode="3f+1r";channels=4;break;
- case A52_2F2R: mode="2f+2r";channels=4;break;
- case A52_3F2R: mode="3f+2r";channels=5;break;
- case A52_CHANNEL1: mode="channel1"; channels=2; break;
- case A52_CHANNEL2: mode="channel2"; channels=2; break;
- case A52_DOLBY: mode="dolby"; channels=2; break;
- }
- mp_msg(MSGT_DECAUDIO,MSGL_V,"AC3: %d.%d (%s%s) %d Hz %3.1f kbit/s\n",
- channels, (flags&A52_LFE)?1:0,
- mode, (flags&A52_LFE)?"+lfe":"",
- sample_rate, bit_rate*0.001f);
- return (flags&A52_LFE) ? (channels+1) : channels;
-}
-
-static sample_t dynrng_call (sample_t c, void *data)
-{
- struct MPOpts *opts = data;
- //fprintf(stderr, "(%f, %f): %f\n", (double)c, (double)drc_level, (double)pow((double)c, drc_level));
- //fprintf(stderr, "(%lf, %lf): %lf\n", (double)c, opts->drc_level, pow(c, opts->drc_level));
- return pow(c, opts->drc_level);
-}
-
-
-static int preinit(sh_audio_t *sh)
-{
- struct MPOpts *opts = sh->opts;
- /* Dolby AC3 audio: */
- /* however many channels, 2 bytes in a word, 256 samples in a block, 6 blocks in a frame */
- if (sh->samplesize < 4) sh->samplesize = 4;
- sh->audio_out_minsize=opts->audio_output_channels*sh->samplesize*256*6;
- sh->audio_in_minsize=3840;
- a52_level = 1.0;
- return 1;
-}
-
-/**
- * \brief Function to convert the "planar" float format used by liba52
- * into the interleaved float format used by libaf/libao2.
- * \param in the input buffer containing the planar samples.
- * \param out the output buffer where the interleaved result is stored.
- */
-static int a52_resample_float(float *in, int16_t *out)
-{
- unsigned long i;
- float *p = (float*) out;
- for (i = 0; i != 256; i++) {
- unsigned long map = channel_map;
- do {
- unsigned long ch = map & 15;
- if (ch == 15)
- *p = 0;
- else
- *p = in[i + ((ch-1)<<8)];
- p++;
- } while ((map >>= 4));
- }
- return (int16_t*) p - out;
-}
-
-static int init(sh_audio_t *sh_audio)
-{
- struct MPOpts *opts = sh_audio->opts;
- uint32_t a52_accel=0;
- sample_t level=a52_level, bias=384;
- int flags=0;
- /* Dolby AC3 audio:*/
-#ifdef MM_ACCEL_X86_SSE
- if(gCpuCaps.hasSSE) a52_accel|=MM_ACCEL_X86_SSE;
-#endif
- if(gCpuCaps.hasMMX) a52_accel|=MM_ACCEL_X86_MMX;
- if(gCpuCaps.hasMMX2) a52_accel|=MM_ACCEL_X86_MMXEXT;
- a52_state=a52_init (a52_accel);
- if (a52_state == NULL) {
- mp_msg(MSGT_DECAUDIO,MSGL_ERR,"A52 init failed\n");
- return 0;
- }
- sh_audio->sample_format = AF_FORMAT_FLOAT_NE;
- if(a52_fillbuff(sh_audio)<0){
- mp_msg(MSGT_DECAUDIO,MSGL_ERR,"A52 sync failed\n");
- return 0;
- }
-
- /* Init a52 dynrng */
- if (opts->drc_level < 0.001) {
- /* level == 0 --> no compression, init library without callback */
- a52_drc_action = DRC_NO_COMPRESSION;
- } else if (opts->drc_level > 0.999 && opts->drc_level < 1.001) {
- /* level == 1 --> full compression, do nothing at all (library default = full compression) */
- a52_drc_action = DRC_NO_ACTION;
- } else {
- a52_drc_action = DRC_CALLBACK;
- }
- /* Library init for dynrng has to be done for each frame, see decode_audio() */
-
-
- /* 'a52 cannot upmix' hotfix:*/
- a52_printinfo(sh_audio);
- sh_audio->channels=opts->audio_output_channels;
-while(sh_audio->channels>0){
- switch(sh_audio->channels){
- case 1: a52_flags=A52_MONO; break;
-/* case 2: a52_flags=A52_STEREO; break;*/
- case 2: a52_flags=A52_DOLBY; break;
-/* case 3: a52_flags=A52_3F; break;*/
- case 3: a52_flags=A52_2F1R; break;
- case 4: a52_flags=A52_2F2R; break; /* 2+2*/
- case 5: a52_flags=A52_3F2R; break;
- case 6: a52_flags=A52_3F2R|A52_LFE; break; /* 5.1*/
- }
- /* test:*/
- flags=a52_flags|A52_ADJUST_LEVEL;
- mp_msg(MSGT_DECAUDIO,MSGL_V,"A52 flags before a52_frame: 0x%X\n",flags);
- if (a52_frame (a52_state, sh_audio->a_in_buffer, &flags, &level, bias)){
- mp_msg(MSGT_DECAUDIO,MSGL_ERR,"a52: error decoding frame -> nosound\n");
- return 0;
- }
- mp_msg(MSGT_DECAUDIO,MSGL_V,"A52 flags after a52_frame: 0x%X\n",flags);
- /* frame decoded, let's init resampler:*/
- channel_map = 0;
- if (sh_audio->sample_format == AF_FORMAT_FLOAT_NE) {
- if (!(flags & A52_LFE)) {
- switch ((flags<<3) | sh_audio->channels) {
- case (A52_MONO << 3) | 1: channel_map = 0x1; break;
- case (A52_CHANNEL << 3) | 2:
- case (A52_STEREO << 3) | 2:
- case (A52_DOLBY << 3) | 2: channel_map = 0x21; break;
- case (A52_2F1R << 3) | 3: channel_map = 0x321; break;
- case (A52_2F2R << 3) | 4: channel_map = 0x4321; break;
- case (A52_3F << 3) | 5: channel_map = 0x2ff31; break;
- case (A52_3F2R << 3) | 5: channel_map = 0x25431; break;
- }
- } else if (sh_audio->channels == 6) {
- switch (flags & ~A52_LFE) {
- case A52_MONO : channel_map = 0x12ffff; break;
- case A52_CHANNEL:
- case A52_STEREO :
- case A52_DOLBY : channel_map = 0x1fff32; break;
- case A52_3F : channel_map = 0x13ff42; break;
- case A52_2F1R : channel_map = 0x1f4432; break;
- case A52_2F2R : channel_map = 0x1f5432; break;
- case A52_3F2R : channel_map = 0x136542; break;
- }
- }
- if (channel_map) {
- a52_resample = a52_resample_float;
- break;
- }
- } else
- break;
-}
- if(sh_audio->channels<=0){
- mp_msg(MSGT_DECAUDIO,MSGL_ERR,"a52: no resampler. try different channel setup!\n");
- return 0;
- }
- return 1;
-}
-
-static void uninit(sh_audio_t *sh)
-{
- a52_free(a52_state);
-}
-
-static int control(sh_audio_t *sh,int cmd,void* arg, ...)
-{
- switch(cmd)
- {
- case ADCTRL_RESYNC_STREAM:
- case ADCTRL_SKIP_FRAME:
- a52_fillbuff(sh);
- return CONTROL_TRUE;
- case ADCTRL_SET_VOLUME: {
- float vol = *(float*)arg;
- if (vol > 60.0) vol = 60.0;
- a52_level = vol <= -200.0 ? 0 : pow(10.0,vol/20.0);
- return CONTROL_TRUE;
- }
- case ADCTRL_QUERY_FORMAT:
- if (*(int*)arg == AF_FORMAT_S16_NE ||
- *(int*)arg == AF_FORMAT_FLOAT_NE)
- return CONTROL_TRUE;
- return CONTROL_FALSE;
- }
- return CONTROL_UNKNOWN;
-}
-
-static int decode_audio(sh_audio_t *sh_audio,unsigned char *buf,int minlen,int maxlen)
-{
- sample_t level=a52_level, bias=384;
- int flags=a52_flags|A52_ADJUST_LEVEL;
- int i,len=-1;
- if (sh_audio->sample_format == AF_FORMAT_FLOAT_NE)
- bias = 0;
- if(!sh_audio->a_in_buffer_len)
- if(a52_fillbuff(sh_audio)<0) return len; /* EOF */
- sh_audio->a_in_buffer_len=0;
- if (a52_frame (a52_state, sh_audio->a_in_buffer, &flags, &level, bias)){
- mp_msg(MSGT_DECAUDIO,MSGL_WARN,"a52: error decoding frame\n");
- return len;
- }
-
- /* handle dynrng */
- if (a52_drc_action != DRC_NO_ACTION) {
- if (a52_drc_action == DRC_NO_COMPRESSION)
- a52_dynrng(a52_state, NULL, NULL);
- else
- a52_dynrng(a52_state, dynrng_call, sh_audio->opts);
- }
-
- len=0;
- for (i = 0; i < 6; i++) {
- if (a52_block (a52_state)){
- mp_msg(MSGT_DECAUDIO,MSGL_WARN,"a52: error at resampling\n");
- break;
- }
- len+=2*a52_resample(a52_samples(a52_state),(int16_t *)&buf[len]);
- }
- assert(len <= maxlen);
- return len;
-}
diff --git a/libmpcodecs/ad_libdca.c b/libmpcodecs/ad_libdca.c
deleted file mode 100644
index fcb4535126..0000000000
--- a/libmpcodecs/ad_libdca.c
+++ /dev/null
@@ -1,353 +0,0 @@
-/*
- * DTS Coherent Acoustics stream decoder using libdca
- * This file is partially based on dtsdec.c r9036 from FFmpeg and ad_liba52.c
- *
- * Copyright (C) 2007 Roberto Togni
- *
- * This file is part of MPlayer.
- *
- * MPlayer is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * MPlayer 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with MPlayer; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <assert.h>
-
-#include "config.h"
-#include "options.h"
-#include "mp_msg.h"
-#include "ad_internal.h"
-
-#include <dts.h>
-
-static const ad_info_t info =
-{
- "DTS decoding with libdca",
- "libdca",
- "Roberto Togni",
- "",
- ""
-};
-
-LIBAD_EXTERN(libdca)
-
-#define DTSBUFFER_SIZE 18726
-#define HEADER_SIZE 14
-
-#define CONVERT_LEVEL 1
-#define CONVERT_BIAS 0
-
-static const char ch2flags[6] = {
- DTS_MONO,
- DTS_STEREO,
- DTS_3F,
- DTS_2F2R,
- DTS_3F2R,
- DTS_3F2R | DTS_LFE
-};
-
-static inline int16_t convert(sample_t s)
-{
- int i = s * 0x7fff;
-
- return (i > 32767) ? 32767 : ((i < -32768) ? -32768 : i);
-}
-
-static void convert2s16_multi(sample_t *f, int16_t *s16, int flags, int ch_out)
-{
- int i;
-
- switch(flags & (DTS_CHANNEL_MASK | DTS_LFE)){
- case DTS_MONO:
- if (ch_out == 1)
- for(i = 0; i < 256; i++)
- s16[i] = convert(f[i]);
- else
- for(i = 0; i < 256; i++){
- s16[5*i] = s16[5*i+1] = s16[5*i+2] = s16[5*i+3] = 0;
- s16[5*i+4] = convert(f[i]);
- }
- break;
- case DTS_CHANNEL:
- case DTS_STEREO:
- case DTS_DOLBY:
- for(i = 0; i < 256; i++){
- s16[2*i] = convert(f[i]);
- s16[2*i+1] = convert(f[i+256]);
- }
- break;
- case DTS_3F:
- for(i = 0; i < 256; i++){
- s16[3*i] = convert(f[i+256]);
- s16[3*i+1] = convert(f[i+512]);
- s16[3*i+2] = convert(f[i]);
- }
- break;
- case DTS_2F2R:
- for(i = 0; i < 256; i++){
- s16[4*i] = convert(f[i]);
- s16[4*i+1] = convert(f[i+256]);
- s16[4*i+2] = convert(f[i+512]);
- s16[4*i+3] = convert(f[i+768]);
- }
- break;
- case DTS_3F2R:
- for(i = 0; i < 256; i++){
- s16[5*i] = convert(f[i+256]);
- s16[5*i+1] = convert(f[i+512]);
- s16[5*i+2] = convert(f[i+768]);
- s16[5*i+3] = convert(f[i+1024]);
- s16[5*i+4] = convert(f[i]);
- }
- break;
- case DTS_MONO | DTS_LFE:
- for(i = 0; i < 256; i++){
- s16[6*i] = s16[6*i+1] = s16[6*i+2] = s16[6*i+3] = 0;
- s16[6*i+4] = convert(f[i]);
- s16[6*i+5] = convert(f[i+256]);
- }
- break;
- case DTS_CHANNEL | DTS_LFE:
- case DTS_STEREO | DTS_LFE:
- case DTS_DOLBY | DTS_LFE:
- for(i = 0; i < 256; i++){
- s16[6*i] = convert(f[i]);
- s16[6*i+1] = convert(f[i+256]);
- s16[6*i+2] = s16[6*i+3] = s16[6*i+4] = 0;
- s16[6*i+5] = convert(f[i+512]);
- }
- break;
- case DTS_3F | DTS_LFE:
- for(i = 0; i < 256; i++){
- s16[6*i] = convert(f[i+256]);
- s16[6*i+1] = convert(f[i+512]);
- s16[6*i+2] = s16[6*i+3] = 0;
- s16[6*i+4] = convert(f[i]);
- s16[6*i+5] = convert(f[i+768]);
- }
- break;
- case DTS_2F2R | DTS_LFE:
- for(i = 0; i < 256; i++){
- s16[6*i] = convert(f[i]);
- s16[6*i+1] = convert(f[i+256]);
- s16[6*i+2] = convert(f[i+512]);
- s16[6*i+3] = convert(f[i+768]);
- s16[6*i+4] = 0;
- s16[6*i+5] = convert(f[1024]);
- }
- break;
- case DTS_3F2R | DTS_LFE:
- for(i = 0; i < 256; i++){
- s16[6*i] = convert(f[i+256]);
- s16[6*i+1] = convert(f[i+512]);
- s16[6*i+2] = convert(f[i+768]);
- s16[6*i+3] = convert(f[i+1024]);
- s16[6*i+4] = convert(f[i]);
- s16[6*i+5] = convert(f[i+1280]);
- }
- break;
- }
-}
-
-static void channels_info(int flags)
-{
- int lfe = 0;
- char lfestr[5] = "";
-
- if (flags & DTS_LFE) {
- lfe = 1;
- strcpy(lfestr, "+lfe");
- }
- mp_msg(MSGT_DECAUDIO, MSGL_V, "DTS: ");
- switch(flags & DTS_CHANNEL_MASK){
- case DTS_MONO:
- mp_msg(MSGT_DECAUDIO, MSGL_V, "1.%d (mono%s)", lfe, lfestr);
- break;
- case DTS_CHANNEL:
- mp_msg(MSGT_DECAUDIO, MSGL_V, "2.%d (channel%s)", lfe, lfestr);
- break;
- case DTS_STEREO:
- mp_msg(MSGT_DECAUDIO, MSGL_V, "2.%d (stereo%s)", lfe, lfestr);
- break;
- case DTS_3F:
- mp_msg(MSGT_DECAUDIO, MSGL_V, "3.%d (3f%s)", lfe, lfestr);
- break;
- case DTS_2F2R:
- mp_msg(MSGT_DECAUDIO, MSGL_V, "4.%d (2f+2r%s)", lfe, lfestr);
- break;
- case DTS_3F2R:
- mp_msg(MSGT_DECAUDIO, MSGL_V, "5.%d (3f+2r%s)", lfe, lfestr);
- break;
- default:
- mp_msg(MSGT_DECAUDIO, MSGL_V, "x.%d (unknown%s)", lfe, lfestr);
- }
- mp_msg(MSGT_DECAUDIO, MSGL_V, "\n");
-}
-
-static int dts_sync(sh_audio_t *sh, int *flags)
-{
- dts_state_t *s = sh->context;
- int length;
- int sample_rate;
- int frame_length;
- int bit_rate;
-
- sh->a_in_buffer_len=0;
-
- while(1) {
- while(sh->a_in_buffer_len < HEADER_SIZE) {
- int c = demux_getc(sh->ds);
-
- if(c < 0)
- return -1;
- sh->a_in_buffer[sh->a_in_buffer_len++] = c;
- }
-
- length = dts_syncinfo(s, sh->a_in_buffer, flags, &sample_rate,
- &bit_rate, &frame_length);
-
- if(length >= HEADER_SIZE)
- break;
-
-// mp_msg(MSGT_DECAUDIO, MSGL_V, "skip\n");
- memmove(sh->a_in_buffer, sh->a_in_buffer+1, HEADER_SIZE-1);
- --sh->a_in_buffer_len;
- }
-
- demux_read_data(sh->ds, sh->a_in_buffer + HEADER_SIZE, length - HEADER_SIZE);
-
- sh->samplerate = sample_rate;
- sh->i_bps = bit_rate/8;
-
- return length;
-}
-
-static int decode_audio(sh_audio_t *sh, unsigned char *buf, int minlen, int maxlen)
-{
- dts_state_t *s = sh->context;
- int16_t *out_samples = (int16_t*)buf;
- int flags;
- level_t level;
- sample_t bias;
- int nblocks;
- int i;
- int data_size = 0;
-
- if(!sh->a_in_buffer_len)
- if(dts_sync(sh, &flags) < 0) return -1; /* EOF */
- sh->a_in_buffer_len=0;
-
- flags &= ~(DTS_CHANNEL_MASK | DTS_LFE);
- flags |= ch2flags[sh->channels - 1];
-
- level = CONVERT_LEVEL;
- bias = CONVERT_BIAS;
- flags |= DTS_ADJUST_LEVEL;
- if(dts_frame(s, sh->a_in_buffer, &flags, &level, bias)) {
- mp_msg(MSGT_DECAUDIO, MSGL_ERR, "dts_frame() failed\n");
- goto end;
- }
-
- nblocks = dts_blocks_num(s);
-
- for(i = 0; i < nblocks; i++) {
- if(dts_block(s)) {
- mp_msg(MSGT_DECAUDIO, MSGL_ERR, "dts_block() failed\n");
- goto end;
- }
-
- convert2s16_multi(dts_samples(s), out_samples, flags, sh->channels);
-
- out_samples += 256 * sh->channels;
- data_size += 256 * sizeof(int16_t) * sh->channels;
- }
-
-end:
- return data_size;
-}
-
-static int preinit(sh_audio_t *sh)
-{
- struct MPOpts *opts = sh->opts;
-
- /* 256 = samples per block, 16 = max number of blocks */
- int channels = opts->audio_output_channels;
- if (channels > 6)
- channels = 6;
- sh->audio_out_minsize = channels * sizeof(int16_t) * 256 * 16;
- sh->audio_in_minsize = DTSBUFFER_SIZE;
- sh->samplesize=2;
-
- return 1;
-}
-
-static int init(sh_audio_t *sh)
-{
- struct MPOpts *opts = sh->opts;
- dts_state_t *s;
- int flags;
- int decoded_bytes;
-
- s = dts_init(0);
- if(s == NULL) {
- mp_msg(MSGT_DECAUDIO, MSGL_ERR, "dts_init() failed\n");
- return 0;
- }
- sh->context = s;
-
- if(dts_sync(sh, &flags) < 0) {
- mp_msg(MSGT_DECAUDIO, MSGL_ERR, "dts sync failed\n");
- dts_free(s);
- return 0;
- }
- channels_info(flags);
-
- int channels = opts->audio_output_channels;
- if (channels > 6)
- channels = 6;
- assert(channels >= 1 && channels <= 6);
- sh->channels = channels;
-
- decoded_bytes = decode_audio(sh, sh->a_buffer, 1, sh->a_buffer_size);
- if(decoded_bytes > 0)
- sh->a_buffer_len = decoded_bytes;
- else {
- mp_msg(MSGT_DECAUDIO, MSGL_ERR, "dts decode failed on first frame (up/downmix problem?)\n");
- dts_free(s);
- return 0;
- }
-
- return 1;
-}
-
-static void uninit(sh_audio_t *sh)
-{
- dts_state_t *s = sh->context;
-
- dts_free(s);
-}
-
-static int control(sh_audio_t *sh,int cmd,void* arg, ...)
-{
- int flags;
-
- switch(cmd){
- case ADCTRL_RESYNC_STREAM:
- dts_sync(sh, &flags);
- return CONTROL_TRUE;
- }
- return CONTROL_UNKNOWN;
-}
diff --git a/libmpcodecs/ad_libmad.c b/libmpcodecs/ad_libmad.c
deleted file mode 100644
index 81475374e1..0000000000
--- a/libmpcodecs/ad_libmad.c
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- * This file is part of MPlayer.
- *
- * MPlayer is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * MPlayer 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with MPlayer; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-#include "config.h"
-
-#include "ad_internal.h"
-
-static const ad_info_t info = {
- "libmad mpeg audio decoder",
- "libmad",
- "A'rpi",
- "libmad...",
- "based on Xine's libmad/xine_decoder.c"
-};
-
-LIBAD_EXTERN(libmad)
-
-#include <mad.h>
-
-typedef struct mad_decoder_s {
-
- struct mad_synth synth;
- struct mad_stream stream;
- struct mad_frame frame;
-
- int have_frame;
-
- int output_sampling_rate;
- int output_open;
- int output_mode;
-
-} mad_decoder_t;
-
-static int preinit(sh_audio_t *sh){
-
- mad_decoder_t *this = calloc(1, sizeof(mad_decoder_t));
- sh->context = this;
-
- mad_synth_init (&this->synth);
- mad_stream_init (&this->stream);
- mad_frame_init (&this->frame);
-
- sh->audio_out_minsize=2*4608;
- sh->audio_in_minsize=4096;
-
- return 1;
-}
-
-static int read_frame(sh_audio_t *sh){
- mad_decoder_t *this = sh->context;
- int len;
-
-while((len=demux_read_data(sh->ds,&sh->a_in_buffer[sh->a_in_buffer_len],
- sh->a_in_buffer_size-sh->a_in_buffer_len))>0){
- sh->a_in_buffer_len+=len;
- while(1){
- int ret;
- mad_stream_buffer (&this->stream, sh->a_in_buffer, sh->a_in_buffer_len);
- ret=mad_frame_decode (&this->frame, &this->stream);
- if (this->stream.next_frame) {
- int num_bytes =
- (char*)sh->a_in_buffer+sh->a_in_buffer_len - (char*)this->stream.next_frame;
- memmove(sh->a_in_buffer, this->stream.next_frame, num_bytes);
- mp_msg(MSGT_DECAUDIO,MSGL_DBG2,"libmad: %d bytes processed\n",sh->a_in_buffer_len-num_bytes);
- sh->a_in_buffer_len = num_bytes;
- }
- if (ret == 0) return 1; // OK!!!
- // error! try to resync!
- if(this->stream.error==MAD_ERROR_BUFLEN) break;
- }
-}
-mp_msg(MSGT_DECAUDIO,MSGL_INFO,"Cannot sync MAD frame\n");
-return 0;
-}
-
-static int init(sh_audio_t *sh){
- mad_decoder_t *this = sh->context;
-
- this->have_frame=read_frame(sh);
- if(!this->have_frame) return 0; // failed to sync...
-
- sh->channels=(this->frame.header.mode == MAD_MODE_SINGLE_CHANNEL) ? 1 : 2;
- sh->samplerate=this->frame.header.samplerate;
- if (sh->i_bps < 1)
- sh->i_bps=this->frame.header.bitrate/8;
- sh->samplesize=2;
-
- return 1;
-}
-
-static void uninit(sh_audio_t *sh){
- mad_decoder_t *this = sh->context;
- mad_synth_finish (&this->synth);
- mad_frame_finish (&this->frame);
- mad_stream_finish(&this->stream);
- free(sh->context);
-}
-
-/* utility to scale and round samples to 16 bits */
-static inline signed int scale(mad_fixed_t sample) {
- /* round */
- sample += (1L << (MAD_F_FRACBITS - 16));
-
- /* clip */
- if (sample >= MAD_F_ONE)
- sample = MAD_F_ONE - 1;
- else if (sample < -MAD_F_ONE)
- sample = -MAD_F_ONE;
-
- /* quantize */
- return sample >> (MAD_F_FRACBITS + 1 - 16);
-}
-
-static int decode_audio(sh_audio_t *sh,unsigned char *buf,int minlen,int maxlen){
- mad_decoder_t *this = sh->context;
- int len=0;
-
- while(len<minlen && len+4608<=maxlen){
- if(!this->have_frame) this->have_frame=read_frame(sh);
- if(!this->have_frame) break; // failed to sync... or EOF
- this->have_frame=0;
-
- mad_synth_frame (&this->synth, &this->frame);
-
- { unsigned int nchannels, nsamples;
- mad_fixed_t const *left_ch, *right_ch;
- struct mad_pcm *pcm = &this->synth.pcm;
- uint16_t *output = (uint16_t*) buf;
-
- nchannels = pcm->channels;
- nsamples = pcm->length;
- left_ch = pcm->samples[0];
- right_ch = pcm->samples[1];
-
- len+=2*nchannels*nsamples;
- buf+=2*nchannels*nsamples;
-
- while (nsamples--) {
- /* output sample(s) in 16-bit signed little-endian PCM */
-
- *output++ = scale(*left_ch++);
-
- if (nchannels == 2)
- *output++ = scale(*right_ch++);
-
- }
- }
- }
-
- return len?len:-1;
-}
-
-static int control(sh_audio_t *sh,int cmd,void* arg, ...){
- mad_decoder_t *this = sh->context;
- // various optional functions you MAY implement:
- switch(cmd){
- case ADCTRL_RESYNC_STREAM:
- this->have_frame=0;
- mad_synth_init (&this->synth);
- mad_stream_init (&this->stream);
- mad_frame_init (&this->frame);
- return CONTROL_TRUE;
- case ADCTRL_SKIP_FRAME:
- this->have_frame=read_frame(sh);
- return CONTROL_TRUE;
- }
- return CONTROL_UNKNOWN;
-}
diff --git a/libmpcodecs/ad_msadpcm.c b/libmpcodecs/ad_msadpcm.c
deleted file mode 100644
index eee89de2ea..0000000000
--- a/libmpcodecs/ad_msadpcm.c
+++ /dev/null
@@ -1,237 +0,0 @@
-/*
- * MS ADPCM decoder
- *
- * This file is responsible for decoding Microsoft ADPCM data.
- * Details about the data format can be found here:
- * http://www.pcisys.net/~melanson/codecs/
- *
- * Copyright (c) 2002 Mike Melanson
- *
- * This file is part of MPlayer.
- *
- * MPlayer is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * MPlayer 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with MPlayer; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-#include <libavutil/common.h>
-#include <libavutil/intreadwrite.h>
-
-#include "config.h"
-#include "mpbswap.h"
-#include "ad_internal.h"
-
-static const ad_info_t info =
-{
- "MS ADPCM audio decoder",
- "msadpcm",
- "Nick Kurshev",
- "Mike Melanson",
- ""
-};
-
-LIBAD_EXTERN(msadpcm)
-
-static const int ms_adapt_table[] =
-{
- 230, 230, 230, 230, 307, 409, 512, 614,
- 768, 614, 512, 409, 307, 230, 230, 230
-};
-
-static const uint8_t ms_adapt_coeff1[] =
-{
- 64, 128, 0, 48, 60, 115, 98
-};
-
-static const int8_t ms_adapt_coeff2[] =
-{
- 0, -64, 0, 16, 0, -52, -58
-};
-
-#define MS_ADPCM_PREAMBLE_SIZE 6
-
-#define LE_16(x) ((int16_t)AV_RL16(x))
-
-// clamp a number between 0 and 88
-#define CLAMP_0_TO_88(x) x = av_clip(x, 0, 88);
-// clamp a number within a signed 16-bit range
-#define CLAMP_S16(x) x = av_clip_int16(x);
-// clamp a number above 16
-#define CLAMP_ABOVE_16(x) if (x < 16) x = 16;
-// sign extend a 4-bit value
-#define SE_4BIT(x) if (x & 0x8) x -= 0x10;
-
-static int preinit(sh_audio_t *sh_audio)
-{
- sh_audio->audio_out_minsize = sh_audio->wf->nBlockAlign * 4;
- sh_audio->ds->ss_div =
- (sh_audio->wf->nBlockAlign - MS_ADPCM_PREAMBLE_SIZE) * 2;
- sh_audio->audio_in_minsize =
- sh_audio->ds->ss_mul = sh_audio->wf->nBlockAlign;
- return 1;
-}
-
-static int init(sh_audio_t *sh_audio)
-{
- sh_audio->channels=sh_audio->wf->nChannels;
- sh_audio->samplerate=sh_audio->wf->nSamplesPerSec;
- sh_audio->i_bps = sh_audio->wf->nBlockAlign *
- (sh_audio->channels*sh_audio->samplerate) / sh_audio->ds->ss_div;
- sh_audio->samplesize=2;
-
- return 1;
-}
-
-static void uninit(sh_audio_t *sh_audio)
-{
-}
-
-static int control(sh_audio_t *sh_audio,int cmd,void* arg, ...)
-{
- if(cmd==ADCTRL_SKIP_FRAME){
- demux_read_data(sh_audio->ds, sh_audio->a_in_buffer,sh_audio->ds->ss_mul);
- return CONTROL_TRUE;
- }
- return CONTROL_UNKNOWN;
-}
-
-static inline int check_coeff(uint8_t c) {
- if (c > 6) {
- mp_msg(MSGT_DECAUDIO, MSGL_WARN,
- "MS ADPCM: coefficient (%d) out of range (should be [0..6])\n",
- c);
- c = 6;
- }
- return c;
-}
-
-static int ms_adpcm_decode_block(unsigned short *output, unsigned char *input,
- int channels, int block_size)
-{
- int current_channel = 0;
- int coeff_idx;
- int idelta[2];
- int sample1[2];
- int sample2[2];
- int coeff1[2];
- int coeff2[2];
- int stream_ptr = 0;
- int out_ptr = 0;
- int upper_nibble = 1;
- int nibble;
- int snibble; // signed nibble
- int predictor;
-
- if (channels != 1) channels = 2;
- if (block_size < 7 * channels)
- return -1;
-
- // fetch the header information, in stereo if both channels are present
- coeff_idx = check_coeff(input[stream_ptr]);
- coeff1[0] = ms_adapt_coeff1[coeff_idx];
- coeff2[0] = ms_adapt_coeff2[coeff_idx];
- stream_ptr++;
- if (channels == 2)
- {
- coeff_idx = check_coeff(input[stream_ptr]);
- coeff1[1] = ms_adapt_coeff1[coeff_idx];
- coeff2[1] = ms_adapt_coeff2[coeff_idx];
- stream_ptr++;
- }
-
- idelta[0] = LE_16(&input[stream_ptr]);
- stream_ptr += 2;
- if (channels == 2)
- {
- idelta[1] = LE_16(&input[stream_ptr]);
- stream_ptr += 2;
- }
-
- sample1[0] = LE_16(&input[stream_ptr]);
- stream_ptr += 2;
- if (channels == 2)
- {
- sample1[1] = LE_16(&input[stream_ptr]);
- stream_ptr += 2;
- }
-
- sample2[0] = LE_16(&input[stream_ptr]);
- stream_ptr += 2;
- if (channels == 2)
- {
- sample2[1] = LE_16(&input[stream_ptr]);
- stream_ptr += 2;
- }
-
- if (channels == 1)
- {
- output[out_ptr++] = sample2[0];
- output[out_ptr++] = sample1[0];
- } else {
- output[out_ptr++] = sample2[0];
- output[out_ptr++] = sample2[1];
- output[out_ptr++] = sample1[0];
- output[out_ptr++] = sample1[1];
- }
-
- while (stream_ptr < block_size)
- {
- // get the next nibble
- if (upper_nibble)
- nibble = snibble = input[stream_ptr] >> 4;
- else
- nibble = snibble = input[stream_ptr++] & 0x0F;
- upper_nibble ^= 1;
- SE_4BIT(snibble);
-
- // should this really be a division and not a shift?
- // coefficients were originally scaled by for, which might have
- // been an optimization for 8-bit CPUs _if_ a shift is correct
- predictor = (
- ((sample1[current_channel] * coeff1[current_channel]) +
- (sample2[current_channel] * coeff2[current_channel])) / 64) +
- (snibble * idelta[current_channel]);
- CLAMP_S16(predictor);
- sample2[current_channel] = sample1[current_channel];
- sample1[current_channel] = predictor;
- output[out_ptr++] = predictor;
-
- // compute the next adaptive scale factor (a.k.a. the variable idelta)
- idelta[current_channel] =
- (ms_adapt_table[nibble] * idelta[current_channel]) / 256;
- CLAMP_ABOVE_16(idelta[current_channel]);
-
- // toggle the channel
- current_channel ^= channels - 1;
- }
-
- return (block_size - (MS_ADPCM_PREAMBLE_SIZE * channels)) * 2;
-}
-
-static int decode_audio(sh_audio_t *sh_audio,unsigned char *buf,int minlen,int maxlen)
-{
- int res;
- if (demux_read_data(sh_audio->ds, sh_audio->a_in_buffer,
- sh_audio->ds->ss_mul) !=
- sh_audio->ds->ss_mul)
- return -1; /* EOF */
-
- res = ms_adpcm_decode_block(
- (unsigned short*)buf, sh_audio->a_in_buffer,
- sh_audio->wf->nChannels, sh_audio->wf->nBlockAlign);
- return res < 0 ? res : 2 * res;
-}
diff --git a/libmpcodecs/ad_pcm.c b/libmpcodecs/ad_pcm.c
deleted file mode 100644
index 9ff4d6a90c..0000000000
--- a/libmpcodecs/ad_pcm.c
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
- * This file is part of MPlayer.
- *
- * MPlayer is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * MPlayer 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with MPlayer; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <stdbool.h>
-
-#include "talloc.h"
-#include "config.h"
-#include "ad_internal.h"
-#include "libaf/af_format.h"
-#include "libaf/reorder_ch.h"
-
-static const ad_info_t info = {
- "Uncompressed PCM audio decoder",
- "pcm",
- "Nick Kurshev",
- "A'rpi",
- ""
-};
-
-struct ad_pcm_context {
- unsigned char *buffer;
- int buffer_pos;
- int buffer_len;
- int buffer_size;
-};
-
-LIBAD_EXTERN(pcm)
-
-static int init(sh_audio_t * sh_audio)
-{
- WAVEFORMATEX *h = sh_audio->wf;
- if (!h)
- return 0;
- sh_audio->i_bps = h->nAvgBytesPerSec;
- sh_audio->channels = h->nChannels;
- sh_audio->samplerate = h->nSamplesPerSec;
- sh_audio->samplesize = (h->wBitsPerSample + 7) / 8;
- sh_audio->sample_format = AF_FORMAT_S16_LE; // default
- switch (sh_audio->format) { /* hardware formats: */
- case 0x0:
- case 0x1: // Microsoft PCM
- case 0xfffe: // Extended
- switch (sh_audio->samplesize) {
- case 1: sh_audio->sample_format = AF_FORMAT_U8; break;
- case 2: sh_audio->sample_format = AF_FORMAT_S16_LE; break;
- case 3: sh_audio->sample_format = AF_FORMAT_S24_LE; break;
- case 4: sh_audio->sample_format = AF_FORMAT_S32_LE; break;
- }
- break;
- case 0x3: // IEEE float
- sh_audio->sample_format = AF_FORMAT_FLOAT_LE;
- break;
- case 0x6: sh_audio->sample_format = AF_FORMAT_A_LAW; break;
- case 0x7: sh_audio->sample_format = AF_FORMAT_MU_LAW; break;
- case 0x11: sh_audio->sample_format = AF_FORMAT_IMA_ADPCM; break;
- case 0x50: sh_audio->sample_format = AF_FORMAT_MPEG2; break;
-/* case 0x2000: sh_audio->sample_format=AFMT_AC3; */
- case 0x20776172: // 'raw '
- sh_audio->sample_format = AF_FORMAT_S16_BE;
- if (sh_audio->samplesize == 1)
- sh_audio->sample_format = AF_FORMAT_U8;
- break;
- case 0x736F7774: // 'twos'
- sh_audio->sample_format = AF_FORMAT_S16_BE;
- // intended fall-through
- case 0x74776F73: // 'sowt'
- if (sh_audio->samplesize == 1)
- sh_audio->sample_format = AF_FORMAT_S8;
- break;
- case 0x32336c66: // 'fl32', bigendian float32
- case 0x32334C46: // 'FL32', bigendian float32 in aiff
- sh_audio->sample_format = AF_FORMAT_FLOAT_BE;
- sh_audio->samplesize = 4;
- break;
- case 0x666c3332: // '23lf', little endian float32, MPlayer internal fourCC
- case 0x6D63706C: // 'lpcm'
- sh_audio->sample_format = AF_FORMAT_FLOAT_LE;
- sh_audio->samplesize = 4;
- break;
-/* case 0x34366c66: // 'fl64', bigendian float64
- sh_audio->sample_format=AF_FORMAT_FLOAT_BE;
- sh_audio->samplesize=8;
- break;
- case 0x666c3634: // '46lf', little endian float64, MPlayer internal fourCC
- sh_audio->sample_format=AF_FORMAT_FLOAT_LE;
- sh_audio->samplesize=8;
- break;*/
- case 0x34326e69: // 'in24', bigendian int24
- sh_audio->sample_format = AF_FORMAT_S24_BE;
- sh_audio->samplesize = 3;
- break;
- case 0x696e3234: // '42ni', little endian int24, MPlayer internal fourCC
- sh_audio->sample_format = AF_FORMAT_S24_LE;
- sh_audio->samplesize = 3;
- break;
- case 0x32336e69: // 'in32', bigendian int32
- sh_audio->sample_format = AF_FORMAT_S32_BE;
- sh_audio->samplesize = 4;
- break;
- case 0x696e3332: // '23ni', little endian int32, MPlayer internal fourCC
- sh_audio->sample_format = AF_FORMAT_S32_LE;
- sh_audio->samplesize = 4;
- break;
- default:
- if (sh_audio->samplesize != 2)
- sh_audio->sample_format = AF_FORMAT_U8;
- }
- if (!sh_audio->samplesize) // this would cause MPlayer to hang later
- sh_audio->samplesize = 2;
- sh_audio->context = talloc_zero(NULL, struct ad_pcm_context);
- return 1;
-}
-
-static int preinit(sh_audio_t *sh)
-{
- sh->audio_out_minsize = 2048;
- return 1;
-}
-
-static void uninit(sh_audio_t *sh)
-{
- talloc_free(sh->context);
-}
-
-static int control(sh_audio_t *sh, int cmd, void *arg, ...)
-{
- struct ad_pcm_context *ctx = sh->context;
- int skip;
- switch (cmd) {
- case ADCTRL_RESYNC_STREAM:
- ctx->buffer_len = 0;
- return true;
- case ADCTRL_SKIP_FRAME:
- skip = sh->i_bps / 16;
- skip = skip & (~3);
- demux_read_data(sh->ds, NULL, skip);
- return CONTROL_TRUE;
- }
- return CONTROL_UNKNOWN;
-}
-
-static int decode_audio(sh_audio_t *sh_audio, unsigned char *buf, int minlen,
- int maxlen)
-{
- int unitsize = sh_audio->channels * sh_audio->samplesize;
- minlen = (minlen + unitsize - 1) / unitsize * unitsize;
- if (minlen > maxlen)
- // if someone needs hundreds of channels adjust audio_out_minsize
- // based on channels in preinit()
- return -1;
-
- int len = 0;
- struct ad_pcm_context *ctx = sh_audio->context;
- while (len < minlen) {
- if (ctx->buffer_len - ctx->buffer_pos <= 0) {
- double pts;
- unsigned char *ptr;
- int plen = ds_get_packet_pts(sh_audio->ds, &ptr, &pts);
- if (plen < 0)
- break;
- if (ctx->buffer_size < plen) {
- talloc_free(ctx->buffer);
- ctx->buffer = talloc_size(ctx, plen);
- ctx->buffer_size = plen;
- }
- memcpy(ctx->buffer, ptr, plen);
- ctx->buffer_len = plen;
- ctx->buffer_pos = 0;
- if (pts != MP_NOPTS_VALUE) {
- sh_audio->pts = pts;
- sh_audio->pts_bytes = 0;
- }
- }
- int from_stored = ctx->buffer_len - ctx->buffer_pos;
- if (from_stored > minlen - len)
- from_stored = minlen - len;
- memcpy(buf + len, ctx->buffer + ctx->buffer_pos, from_stored);
- ctx->buffer_pos += from_stored;
- sh_audio->pts_bytes += from_stored;
- len += from_stored;
- }
- if (len % unitsize) {
- mp_msg(MSGT_DECAUDIO, MSGL_WARN, "[ad_pcm] discarding partial sample "
- "at end\n");
- len -= len % unitsize;
- }
- if (len == 0)
- len = -1; // The loop above only exits at error/EOF
- if (len > 0 && sh_audio->channels >= 5) {
- reorder_channel_nch(buf, AF_CHANNEL_LAYOUT_WAVEEX_DEFAULT,
- AF_CHANNEL_LAYOUT_MPLAYER_DEFAULT,
- sh_audio->channels, len / sh_audio->samplesize,
- sh_audio->samplesize);
- }
- return len;
-}
diff --git a/libmpcodecs/ad_sample.c b/libmpcodecs/ad_sample.c
deleted file mode 100644
index 69f4b20dfc..0000000000
--- a/libmpcodecs/ad_sample.c
+++ /dev/null
@@ -1,145 +0,0 @@
-// SAMPLE audio decoder - you can use this file as template when creating new codec!
-
-/*
- * This file is part of MPlayer.
- *
- * MPlayer is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * MPlayer 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with MPlayer; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-#include "config.h"
-#include "ad_internal.h"
-
-static const ad_info_t info = {
- "Sample audio decoder", // name of the driver
- "sample", // driver name. should be the same as filename without ad_
- "A'rpi", // writer/maintainer of _this_ file
- "", // writer/maintainer/site of the _codec_
- "" // comments
-};
-
-LIBAD_EXTERN(sample)
-
-#include "libsample/sample.h" // include your codec's .h files here
-
-static int preinit(sh_audio_t *sh){
- // let's check if the driver is available, return 0 if not.
- // (you should do that if you use external lib(s) which is optional)
- ...
-
- // there are default values set for buffering, but you can override them:
-
- // minimum output buffer size (should be the uncompressed max. frame size)
- sh->audio_out_minsize=4*2*1024; // in this sample, we assume max 4 channels,
- // 2 bytes/sample and 1024 samples/frame
- // Default: 8192
-
- // minimum input buffer size (set only if you need input buffering)
- // (should be the max compressed frame size)
- sh->audio_in_minsize=2048; // Default: 0 (no input buffer)
-
- // if you set audio_in_minsize non-zero, the buffer will be allocated
- // before the init() call by the core, and you can access it via
- // pointer: sh->audio_in_buffer
- // it will free'd after uninit(), so you don't have to use malloc/free here!
-
- // the next few parameters define the audio format (channels, sample type,
- // in/out bitrate etc.). it's OK to move these to init() if you can set
- // them only after some initialization:
-
- sh->samplesize=2; // bytes (not bits!) per sample per channel
- sh->channels=2; // number of channels
- sh->samplerate=44100; // samplerate
- sh->sample_format=AF_FORMAT_S16_LE; // sample format, see libao2/afmt.h
-
- sh->i_bps=64000/8; // input data rate (compressed bytes per second)
- // Note: if you have VBR or unknown input rate, set it to some common or
- // average value, instead of zero. it's used to predict time delay of
- // buffered compressed bytes, so it must be more-or-less real!
-
-//sh->o_bps=... // output data rate (uncompressed bytes per second)
- // Note: you DON'T need to set o_bps in most cases, as it defaults to:
- // sh->samplesize*sh->channels*sh->samplerate;
-
- // for constant rate compressed QuickTime (.mov files) codecs you MUST
- // set the compressed and uncompressed packet size (used by the demuxer):
- sh->ds->ss_mul = 34; // compressed packet size
- sh->ds->ss_div = 64; // samples per packet
-
- return 1; // return values: 1=OK 0=ERROR
-}
-
-static int init(sh_audio_t *sh_audio){
- // initialize the decoder, set tables etc...
-
- // you can store HANDLE or private struct pointer at sh->context
- // you can access WAVEFORMATEX header at sh->wf
-
- // set sample format/rate parameters if you didn't do it in preinit() yet.
-
- return 1; // return values: 1=OK 0=ERROR
-}
-
-static void uninit(sh_audio_t *sh){
- // uninit the decoder etc...
- // again: you don't have to free() a_in_buffer here! it's done by the core.
-}
-
-static int decode_audio(sh_audio_t *sh_audio,unsigned char *buf,int minlen,int maxlen){
-
- // audio decoding. the most important thing :)
- // parameters you get:
- // buf = pointer to the output buffer, you have to store uncompressed
- // samples there
- // minlen = requested minimum size (in bytes!) of output. it's just a
- // _recommendation_, you can decode more or less, it just tell you that
- // the caller process needs 'minlen' bytes. if it gets less, it will
- // call decode_audio() again.
- // maxlen = maximum size (bytes) of output. you MUST NOT write more to the
- // buffer, it's the upper-most limit!
- // note: maxlen will be always greater or equal to sh->audio_out_minsize
-
- // now, let's decode...
-
- // you can read the compressed stream using the demux stream functions:
- // demux_read_data(sh->ds, buffer, length) - read 'length' bytes to 'buffer'
- // ds_get_packet(sh->ds, &buffer) - set ptr buffer to next data packet
- // (both func return number of bytes or 0 for error)
-
- return len; // return value: number of _bytes_ written to output buffer,
- // or -1 for EOF (or uncorrectable error)
-}
-
-static int control(sh_audio_t *sh,int cmd,void* arg, ...){
- // various optional functions you MAY implement:
- switch(cmd){
- case ADCTRL_RESYNC_STREAM:
- // it is called once after seeking, to resync.
- // Note: sh_audio->a_in_buffer_len=0; is done _before_ this call!
- ...
- return CONTROL_TRUE;
- case ADCTRL_SKIP_FRAME:
- // it is called to skip (jump over) small amount (1/10 sec or 1 frame)
- // of audio data - used to sync audio to video after seeking
- // if you don't return CONTROL_TRUE, it will defaults to:
- // ds_fill_buffer(sh_audio->ds); // skip 1 demux packet
- ...
- return CONTROL_TRUE;
- }
- return CONTROL_UNKNOWN;
-}
diff --git a/libmpcodecs/native/alaw.h b/libmpcodecs/native/alaw.h
deleted file mode 100644
index e086e1d151..0000000000
--- a/libmpcodecs/native/alaw.h
+++ /dev/null
@@ -1,76 +0,0 @@
-// Generated by TOOLS/alaw-gen.c
-
-#ifndef MPLAYER_ALAW_H
-#define MPLAYER_ALAW_H
-
-const short alaw2short[]={
- -5504, -5248, -6016, -5760, -4480, -4224, -4992, -4736,
- -7552, -7296, -8064, -7808, -6528, -6272, -7040, -6784,
- -2752, -2624, -3008, -2880, -2240, -2112, -2496, -2368,
- -3776, -3648, -4032, -3904, -3264, -3136, -3520, -3392,
- -22016, -20992, -24064, -23040, -17920, -16896, -19968, -18944,
- -30208, -29184, -32256, -31232, -26112, -25088, -28160, -27136,
- -11008, -10496, -12032, -11520, -8960, -8448, -9984, -9472,
- -15104, -14592, -16128, -15616, -13056, -12544, -14080, -13568,
- -344, -328, -376, -360, -280, -264, -312, -296,
- -472, -456, -504, -488, -408, -392, -440, -424,
- -88, -72, -120, -104, -24, -8, -56, -40,
- -216, -200, -248, -232, -152, -136, -184, -168,
- -1376, -1312, -1504, -1440, -1120, -1056, -1248, -1184,
- -1888, -1824, -2016, -1952, -1632, -1568, -1760, -1696,
- -688, -656, -752, -720, -560, -528, -624, -592,
- -944, -912, -1008, -976, -816, -784, -880, -848,
- 5504, 5248, 6016, 5760, 4480, 4224, 4992, 4736,
- 7552, 7296, 8064, 7808, 6528, 6272, 7040, 6784,
- 2752, 2624, 3008, 2880, 2240, 2112, 2496, 2368,
- 3776, 3648, 4032, 3904, 3264, 3136, 3520, 3392,
- 22016, 20992, 24064, 23040, 17920, 16896, 19968, 18944,
- 30208, 29184, 32256, 31232, 26112, 25088, 28160, 27136,
- 11008, 10496, 12032, 11520, 8960, 8448, 9984, 9472,
- 15104, 14592, 16128, 15616, 13056, 12544, 14080, 13568,
- 344, 328, 376, 360, 280, 264, 312, 296,
- 472, 456, 504, 488, 408, 392, 440, 424,
- 88, 72, 120, 104, 24, 8, 56, 40,
- 216, 200, 248, 232, 152, 136, 184, 168,
- 1376, 1312, 1504, 1440, 1120, 1056, 1248, 1184,
- 1888, 1824, 2016, 1952, 1632, 1568, 1760, 1696,
- 688, 656, 752, 720, 560, 528, 624, 592,
- 944, 912, 1008, 976, 816, 784, 880, 848
-};
-
-const short ulaw2short[]={
- -32124, -31100, -30076, -29052, -28028, -27004, -25980, -24956,
- -23932, -22908, -21884, -20860, -19836, -18812, -17788, -16764,
- -15996, -15484, -14972, -14460, -13948, -13436, -12924, -12412,
- -11900, -11388, -10876, -10364, -9852, -9340, -8828, -8316,
- -7932, -7676, -7420, -7164, -6908, -6652, -6396, -6140,
- -5884, -5628, -5372, -5116, -4860, -4604, -4348, -4092,
- -3900, -3772, -3644, -3516, -3388, -3260, -3132, -3004,
- -2876, -2748, -2620, -2492, -2364, -2236, -2108, -1980,
- -1884, -1820, -1756, -1692, -1628, -1564, -1500, -1436,
- -1372, -1308, -1244, -1180, -1116, -1052, -988, -924,
- -876, -844, -812, -780, -748, -716, -684, -652,
- -620, -588, -556, -524, -492, -460, -428, -396,
- -372, -356, -340, -324, -308, -292, -276, -260,
- -244, -228, -212, -196, -180, -164, -148, -132,
- -120, -112, -104, -96, -88, -80, -72, -64,
- -56, -48, -40, -32, -24, -16, -8, 0,
- 32124, 31100, 30076, 29052, 28028, 27004, 25980, 24956,
- 23932, 22908, 21884, 20860, 19836, 18812, 17788, 16764,
- 15996, 15484, 14972, 14460, 13948, 13436, 12924, 12412,
- 11900, 11388, 10876, 10364, 9852, 9340, 8828, 8316,
- 7932, 7676, 7420, 7164, 6908, 6652, 6396, 6140,
- 5884, 5628, 5372, 5116, 4860, 4604, 4348, 4092,
- 3900, 3772, 3644, 3516, 3388, 3260, 3132, 3004,
- 2876, 2748, 2620, 2492, 2364, 2236, 2108, 1980,
- 1884, 1820, 1756, 1692, 1628, 1564, 1500, 1436,
- 1372, 1308, 1244, 1180, 1116, 1052, 988, 924,
- 876, 844, 812, 780, 748, 716, 684, 652,
- 620, 588, 556, 524, 492, 460, 428, 396,
- 372, 356, 340, 324, 308, 292, 276, 260,
- 244, 228, 212, 196, 180, 164, 148, 132,
- 120, 112, 104, 96, 88, 80, 72, 64,
- 56, 48, 40, 32, 24, 16, 8, 0
-};
-
-#endif /* MPLAYER_ALAW_H */
diff --git a/libmpcodecs/vd.c b/libmpcodecs/vd.c
index 1d35566cc3..48e2b0627e 100644
--- a/libmpcodecs/vd.c
+++ b/libmpcodecs/vd.c
@@ -37,34 +37,14 @@
#include "vf.h"
#include "libvo/video_out.h"
-extern const vd_functions_t mpcodecs_vd_null;
extern const vd_functions_t mpcodecs_vd_ffmpeg;
-extern const vd_functions_t mpcodecs_vd_raw;
-extern const vd_functions_t mpcodecs_vd_hmblck;
-extern const vd_functions_t mpcodecs_vd_mpng;
-extern const vd_functions_t mpcodecs_vd_ijpg;
-extern const vd_functions_t mpcodecs_vd_mtga;
-extern const vd_functions_t mpcodecs_vd_realvid;
-extern const vd_functions_t mpcodecs_vd_lzo;
-extern const vd_functions_t mpcodecs_vd_qtvideo;
/* Please do not add any new decoders here. If you want to implement a new
* decoder, add it to libavcodec, except for wrappers around external
* libraries and decoders requiring binary support. */
const vd_functions_t * const mpcodecs_vd_drivers[] = {
- &mpcodecs_vd_null,
&mpcodecs_vd_ffmpeg,
- &mpcodecs_vd_lzo,
- &mpcodecs_vd_raw,
- &mpcodecs_vd_hmblck,
-#ifdef CONFIG_PNG
- &mpcodecs_vd_mpng,
-#endif
-#ifdef CONFIG_JPEG
- &mpcodecs_vd_ijpg,
-#endif
- &mpcodecs_vd_mtga,
/* Please do not add any new decoders here. If you want to implement a new
* decoder, add it to libavcodec, except for wrappers around external
* libraries and decoders requiring binary support. */
diff --git a/libmpcodecs/vd_hmblck.c b/libmpcodecs/vd_hmblck.c
deleted file mode 100644
index a9a871cae2..0000000000
--- a/libmpcodecs/vd_hmblck.c
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * This file is part of MPlayer.
- *
- * MPlayer is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * MPlayer 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with MPlayer; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "config.h"
-#include "mp_msg.h"
-
-#include "vd_internal.h"
-
-static const vd_info_t info = {
- "Hauppauge Macroblock/NV12/NV21 Decoder",
- "hmblck",
- "Alex <d18c7db@hotmail.com>, A'rpi, Alex Beregszaszi",
- "Alex <d18c7db@hotmail.com>",
- "uncompressed"
-};
-
-LIBVD_EXTERN(hmblck)
-
-static void de_macro_y(unsigned char* dst,unsigned char* src,int dstride,int w,int h){
- unsigned int y;
- // descramble Y plane
- for (y=0; y<h; y+=16) {
- unsigned int x;
- for (x=0; x<w; x+=16) {
- unsigned int i;
- for (i=0; i<16; i++) {
- memcpy(dst + x + (y+i)*dstride, src, 16);
- src+=16;
- }
- }
- }
-}
-
-static void de_macro_uv(unsigned char* dstu,unsigned char* dstv,unsigned char* src,int dstride,int w,int h){
- unsigned int y;
- // descramble U/V plane
- for (y=0; y<h; y+=16) {
- unsigned int x;
- for (x=0; x<w; x+=8) {
- unsigned int i;
- for (i=0; i<16; i++) {
- int idx=x + (y+i)*dstride;
- dstu[idx+0]=src[0]; dstv[idx+0]=src[1];
- dstu[idx+1]=src[2]; dstv[idx+1]=src[3];
- dstu[idx+2]=src[4]; dstv[idx+2]=src[5];
- dstu[idx+3]=src[6]; dstv[idx+3]=src[7];
- dstu[idx+4]=src[8]; dstv[idx+4]=src[9];
- dstu[idx+5]=src[10]; dstv[idx+5]=src[11];
- dstu[idx+6]=src[12]; dstv[idx+6]=src[13];
- dstu[idx+7]=src[14]; dstv[idx+7]=src[15];
- src+=16;
- }
- }
- }
-}
-
-/*************************************************************************
- * convert a nv12 buffer to yv12
- */
-static int nv12_to_yv12(unsigned char *data, int len, mp_image_t* mpi, int swapped) {
- unsigned int Y_size = mpi->width * mpi->height;
- unsigned int UV_size = mpi->chroma_width * mpi->chroma_height;
- unsigned int idx;
- unsigned char *dst_Y = mpi->planes[0];
- unsigned char *dst_U = mpi->planes[1];
- unsigned char *dst_V = mpi->planes[2];
- unsigned char *src = data + Y_size;
-
- // sanity check raw stream
- if ( (len != (Y_size + (UV_size<<1))) ) {
- mp_msg(MSGT_DECVIDEO, MSGL_ERR,
- "hmblck: Image size inconsistent with data size.\n");
- return 0;
- }
- if (mpi->num_planes != 3) {
- mp_msg(MSGT_DECVIDEO,MSGL_ERR,
- "hmblck: Incorrect number of image planes.\n");
- return 0;
- }
-
- // luma data is easy, just copy it
- memcpy(dst_Y, data, Y_size);
-
- // chroma data is interlaced UVUV... so deinterlace it
- for(idx=0; idx<UV_size; idx++ ) {
- *(dst_U + idx) = *(src + (idx<<1) + (swapped ? 1 : 0));
- *(dst_V + idx) = *(src + (idx<<1) + (swapped ? 0 : 1));
- }
- return 1;
-}
-
-/*************************************************************************
- * set/get/query special features/parameters
- */
-static int control(sh_video_t *sh,int cmd, void *arg,...){
- return CONTROL_UNKNOWN;
-}
-/*************************************************************************
- * init driver
- */
-static int init(sh_video_t *sh){
- return mpcodecs_config_vo(sh,sh->disp_w,sh->disp_h,sh->format);
-}
-/*************************************************************************
- * uninit driver
- */
-static void uninit(sh_video_t *sh){
-}
-/*************************************************************************
- * decode a frame
- */
-static mp_image_t* decode(sh_video_t *sh,void* data,int len,int flags){
- mp_image_t* mpi;
-
- if(len<=0) return NULL; // skipped frame
-
- mpi=mpcodecs_get_image(sh, MP_IMGTYPE_TEMP, MP_IMGFLAG_ACCEPT_STRIDE,
- sh->disp_w, sh->disp_h);
- if(!mpi) return NULL;
-
- if(sh->format == IMGFMT_HM12) {
- //if(!de_macro(sh, data, len, flags, mpi)) return NULL;
- de_macro_y(mpi->planes[0],data,mpi->stride[0],mpi->w,mpi->h);
- de_macro_uv(mpi->planes[1],mpi->planes[2],
- (unsigned char *)data+mpi->w*mpi->h,mpi->stride[1],
- mpi->w/2,mpi->h/2);
- } else {
- if(!nv12_to_yv12(data, len, mpi,(sh->format == IMGFMT_NV21))) return NULL;
- }
-
- return mpi;
-}
-/*************************************************************************/
diff --git a/libmpcodecs/vd_ijpg.c b/libmpcodecs/vd_ijpg.c
deleted file mode 100644
index 2bfefb405d..0000000000
--- a/libmpcodecs/vd_ijpg.c
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
- * This file is part of MPlayer.
- *
- * MPlayer is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * MPlayer 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with MPlayer; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "config.h"
-#include "mp_msg.h"
-
-#include <jpeglib.h>
-#define UINT16 IJPG_UINT16
-#define INT16 IJPG_INT16
-
-#include <setjmp.h>
-
-#include "mpbswap.h"
-
-#include "vd_internal.h"
-
-static const vd_info_t info = {
- "JPEG Images decoder",
- "ijpg",
- "Pontscho",
- "based on vd_mpng.c",
- "uses Independent JPEG Group's jpeglib"
-};
-
-LIBVD_EXTERN(ijpg)
-
-static int last_w=-1;
-static int last_h=-1;
-static int last_depth=-1;
-
-// to set/get/query special features/parameters
-static int control(sh_video_t *sh,int cmd,void* arg,...){
- if (cmd == VDCTRL_QUERY_FORMAT) {
- int format = *(int *)arg;
- if ((last_depth == 24 && format == IMGFMT_RGB24) ||
- (last_depth == 8 && format == IMGFMT_Y8 ))
- return CONTROL_TRUE;
- return CONTROL_FALSE;
- }
- return CONTROL_UNKNOWN;
-}
-
-// init driver
-static int init(sh_video_t *sh){
- last_w=-1;
- return 1;
-}
-
-// uninit driver
-static void uninit(sh_video_t *sh){
-}
-
-//mp_image_t* mpcodecs_get_image(sh_video_t *sh, int mp_imgtype, int mp_imgflag, int w, int h);
-
-typedef struct
-{
- struct jpeg_source_mgr pub;
- unsigned char * inbuf;
- int bufsize;
-} my_source_mgr;
-
-typedef my_source_mgr * my_src_ptr;
-
-METHODDEF(void) init_source (j_decompress_ptr cinfo)
-{
-}
-
-METHODDEF(boolean) fill_input_buffer (j_decompress_ptr cinfo)
-{
- my_src_ptr src = (my_src_ptr) cinfo->src;
- src->pub.next_input_byte = src->inbuf;
- src->pub.bytes_in_buffer = src->bufsize;
- return TRUE;
-}
-
-METHODDEF(void) skip_input_data (j_decompress_ptr cinfo, long num_bytes)
-{
- my_src_ptr src = (my_src_ptr) cinfo->src;
-
- if (num_bytes > 0)
- {
- while (num_bytes > (long) src->pub.bytes_in_buffer)
- {
- num_bytes -= (long) src->pub.bytes_in_buffer;
- (void) fill_input_buffer(cinfo);
- }
- src->pub.next_input_byte += (size_t) num_bytes;
- src->pub.bytes_in_buffer -= (size_t) num_bytes;
- }
-}
-
-METHODDEF(void) term_source (j_decompress_ptr cinfo) { }
-
-static void jpeg_buf_src (j_decompress_ptr cinfo, char * inbuf, int bufsize)
-{
- my_src_ptr src;
- if (cinfo->src == NULL) cinfo->src=malloc( sizeof( my_source_mgr ) );
- src = (my_src_ptr) cinfo->src;
- src->pub.init_source = init_source;
- src->pub.fill_input_buffer = fill_input_buffer;
- src->pub.skip_input_data = skip_input_data;
- src->pub.resync_to_restart = jpeg_resync_to_restart;
- src->pub.term_source = term_source;
- src->inbuf = inbuf;
- src->bufsize=bufsize;
- src->pub.bytes_in_buffer = 0;
- src->pub.next_input_byte = NULL;
-}
-
-struct my_error_mgr
-{
- struct jpeg_error_mgr pub;
- jmp_buf setjmp_buffer;
-};
-
-typedef struct my_error_mgr * my_error_ptr;
-
-METHODDEF(void) my_error_exit (j_common_ptr cinfo)
-{
- my_error_ptr myerr=(my_error_ptr) cinfo->err;
- (*cinfo->err->output_message) (cinfo);
- longjmp(myerr->setjmp_buffer, 1);
-}
-
-// decode a frame
-static mp_image_t* decode(sh_video_t *sh,void* data,int len,int flags){
- struct jpeg_decompress_struct cinfo;
- struct my_error_mgr jerr;
- mp_image_t * mpi = NULL;
- int width,height,depth,i;
-
- if ( len <= 0 ) return NULL; // skipped frame
-
- memset(&cinfo, 0, sizeof(cinfo));
- memset(&jerr, 0, sizeof(jerr));
- cinfo.err=jpeg_std_error( &jerr.pub );
- jerr.pub.error_exit=my_error_exit;
- if( setjmp( jerr.setjmp_buffer ) )
- {
- mp_msg( MSGT_DECVIDEO,MSGL_ERR,"[ijpg] setjmp error ...\n" );
- return NULL;
- }
-
- jpeg_create_decompress( &cinfo );
- jpeg_buf_src( &cinfo,data,len );
- jpeg_read_header( &cinfo,TRUE );
- sh->disp_w=width=cinfo.image_width;
- sh->disp_h=height=cinfo.image_height;
- jpeg_start_decompress( &cinfo );
- depth=cinfo.output_components * 8;
-
- switch( depth ) {
- case 8:
- case 24: break;
- default: mp_msg( MSGT_DECVIDEO,MSGL_ERR,"Sorry, unsupported JPEG colorspace: %d.\n",depth ); return NULL;
- }
-
- if ( last_w!=width || last_h!=height || last_depth != depth )
- {
- last_depth = depth;
- if(!mpcodecs_config_vo( sh,width,height, depth == 8 ? IMGFMT_Y8 : IMGFMT_RGB24 )) return NULL;
- last_w=width; last_h=height;
- }
-
- mpi=mpcodecs_get_image( sh,MP_IMGTYPE_TEMP,MP_IMGFLAG_ACCEPT_STRIDE,width,height );
- if ( !mpi ) return NULL;
-
- for ( i=0;i < height;i++ )
- {
- unsigned char * drow = mpi->planes[0] + mpi->stride[0] * i;
- jpeg_read_scanlines( &cinfo,(JSAMPLE**)&drow,1 );
- }
-
- jpeg_finish_decompress(&cinfo);
- jpeg_destroy_decompress(&cinfo);
-
- return mpi;
-}
diff --git a/libmpcodecs/vd_lzo.c b/libmpcodecs/vd_lzo.c
deleted file mode 100644
index fb926895cc..0000000000
--- a/libmpcodecs/vd_lzo.c
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * This file is part of MPlayer.
- *
- * MPlayer is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * MPlayer 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with MPlayer; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "config.h"
-#include "mp_msg.h"
-
-#include "vd_internal.h"
-#include "libavutil/lzo.h"
-
-#define MOD_NAME "DecLZO"
-
-static const vd_info_t info = {
- "LZO compressed Video",
- "lzo",
- "Tilmann Bitterberg",
- "Transcode development team <http://www.theorie.physik.uni-goettingen.de/~ostreich/transcode/>",
- "based on liblzo: http://www.oberhumer.com/opensource/lzo/"
-};
-
-LIBVD_EXTERN(lzo)
-
-typedef struct {
- uint8_t *buffer;
- int bufsz;
- int codec;
-} lzo_context_t;
-
-// to set/get/query special features/parameters
-static int control (sh_video_t *sh, int cmd, void* arg, ...)
-{
- lzo_context_t *priv = sh->context;
- switch(cmd){
- case VDCTRL_QUERY_FORMAT:
- if (*(int *)arg == priv->codec) return CONTROL_TRUE;
- return CONTROL_FALSE;
- }
- return CONTROL_UNKNOWN;
-}
-
-
-// init driver
-static int init(sh_video_t *sh)
-{
- lzo_context_t *priv;
-
- if (sh->bih->biSizeImage <= 0) {
- mp_msg (MSGT_DECVIDEO, MSGL_ERR, "[%s] Invalid frame size\n", MOD_NAME);
- return 0;
- }
-
- priv = malloc(sizeof(lzo_context_t));
- if (!priv)
- {
- mp_msg (MSGT_DECVIDEO, MSGL_ERR, "[%s] memory allocation failed\n", MOD_NAME);
- return 0;
- }
- priv->bufsz = sh->bih->biSizeImage;
- priv->buffer = malloc(priv->bufsz + AV_LZO_OUTPUT_PADDING);
- priv->codec = -1;
- sh->context = priv;
-
- return 1;
-}
-
-// uninit driver
-static void uninit(sh_video_t *sh)
-{
- lzo_context_t *priv = sh->context;
-
- if (priv)
- {
- free(priv->buffer);
- free(priv);
- }
-
- sh->context = NULL;
-}
-
-// decode a frame
-static mp_image_t* decode(sh_video_t *sh,void* data,int len,int flags)
-{
- int r;
- mp_image_t* mpi;
- lzo_context_t *priv = sh->context;
- int w = priv->bufsz;
-
- if (len <= 0) {
- return NULL; // skipped frame
- }
-
- r = av_lzo1x_decode(priv->buffer, &w, data, &len);
- if (r) {
- /* this should NEVER happen */
- mp_msg (MSGT_DECVIDEO, MSGL_ERR,
- "[%s] internal error - decompression failed: %d\n", MOD_NAME, r);
- return NULL;
- }
-
- if (priv->codec == -1) {
- // detect RGB24 vs. YV12 via decoded size
- mp_msg (MSGT_DECVIDEO, MSGL_V, "[%s] 2 depth %d, format %d data %p len (%d) (%d)\n",
- MOD_NAME, sh->bih->biBitCount, sh->format, data, len, sh->bih->biSizeImage
- );
-
- if (w == 0) {
- priv->codec = IMGFMT_BGR24;
- mp_msg (MSGT_DECVIDEO, MSGL_V, "[%s] codec chosen is BGR24\n", MOD_NAME);
- } else if (w == (sh->bih->biSizeImage)/2) {
- priv->codec = IMGFMT_YV12;
- mp_msg (MSGT_DECVIDEO, MSGL_V, "[%s] codec chosen is YV12\n", MOD_NAME);
- } else {
- priv->codec = -1;
- mp_msg(MSGT_DECVIDEO,MSGL_ERR,"[%s] Unsupported out_fmt\n", MOD_NAME);
- return NULL;
- }
-
- if(!mpcodecs_config_vo(sh,sh->disp_w,sh->disp_h,priv->codec)) {
- priv->codec = -1;
- return NULL;
- }
- }
-
- mpi = mpcodecs_get_image(sh, MP_IMGTYPE_EXPORT, 0,
- sh->disp_w, sh->disp_h);
-
-
- if (!mpi) {
- mp_msg (MSGT_DECVIDEO, MSGL_ERR, "[%s] mpcodecs_get_image failed\n", MOD_NAME);
- return NULL;
- }
-
- mpi->planes[0] = priv->buffer;
- if (priv->codec == IMGFMT_BGR24)
- mpi->stride[0] = 3 * sh->disp_w;
- else {
- mpi->stride[0] = sh->disp_w;
- mpi->planes[2] = priv->buffer + sh->disp_w*sh->disp_h;
- mpi->stride[2] = sh->disp_w / 2;
- mpi->planes[1] = priv->buffer + sh->disp_w*sh->disp_h*5/4;
- mpi->stride[1] = sh->disp_w / 2;
- }
-
- mp_msg (MSGT_DECVIDEO, MSGL_DBG2,
- "[%s] decompressed %lu bytes into %lu bytes\n", MOD_NAME,
- (long) len, (long)w);
-
- return mpi;
-}
diff --git a/libmpcodecs/vd_mpng.c b/libmpcodecs/vd_mpng.c
deleted file mode 100644
index c430566c70..0000000000
--- a/libmpcodecs/vd_mpng.c
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- * This file is part of MPlayer.
- *
- * MPlayer is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * MPlayer 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with MPlayer; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "config.h"
-#include "mp_msg.h"
-
-#include <png.h>
-
-#include "libavutil/common.h"
-#include "mpbswap.h"
-#include "libvo/fastmemcpy.h"
-
-#include "vd_internal.h"
-
-static const vd_info_t info = {
- "PNG Images decoder",
- "mpng",
- "A'rpi",
- ".so, based on mpng.c",
- "uses libpng, 8bpp modes not supported yet"
-};
-
-LIBVD_EXTERN(mpng)
-
-static unsigned int out_fmt=0;
-
-static int last_w=-1;
-static int last_h=-1;
-static int last_c=-1;
-
-// to set/get/query special features/parameters
-static int control(sh_video_t *sh,int cmd,void* arg,...){
- switch (cmd)
- {
- case VDCTRL_QUERY_FORMAT:
- if (*((int *) arg) == out_fmt) return CONTROL_TRUE;
- return CONTROL_FALSE;
- }
- return CONTROL_UNKNOWN;
-}
-
-// init driver
-static int init(sh_video_t *sh){
- last_w=-1;
- return 1;
-}
-
-// uninit driver
-static void uninit(sh_video_t *sh){
-}
-
-//mp_image_t* mpcodecs_get_image(sh_video_t *sh, int mp_imgtype, int mp_imgflag, int w, int h);
-
-static int pngPointer;
-static int pngLength;
-
-static void pngReadFN( png_structp pngstr,png_bytep buffer,png_size_t size )
-{
- char * p = png_get_io_ptr(pngstr);
- if(size>pngLength-pngPointer && pngLength>=pngPointer) size=pngLength-pngPointer;
- fast_memcpy( buffer,(char *)&p[pngPointer],size );
- pngPointer+=size;
-}
-
-// decode a frame
-static mp_image_t* decode(sh_video_t *sh,void* data,int len,int flags){
- png_structp png;
- png_infop info;
- png_infop endinfo;
-// png_bytep data;
- png_bytep * row_p;
- png_uint_32 png_width=0,png_height=0;
- int depth,color;
- png_uint_32 i;
- png_byte color_type;
- mp_image_t* mpi;
-
- int cols;
- png_colorp pal;
- unsigned char *p;
-
- if(len<=0) return NULL; // skipped frame
-
- png=png_create_read_struct( PNG_LIBPNG_VER_STRING,NULL,NULL,NULL );
- info=png_create_info_struct( png );
- endinfo=png_create_info_struct( png );
-
- pngPointer=8;
- pngLength=len;
- png_set_read_fn( png,data,pngReadFN );
- png_set_strip_16( png );
- png_set_sig_bytes( png,8 );
- png_read_info( png,info );
- png_get_IHDR( png,info,&png_width,&png_height,&depth,&color,NULL,NULL,NULL );
- png_set_bgr( png );
-
- color_type=png_get_color_type(png, info);
-
- switch( color_type ) {
- case PNG_COLOR_TYPE_GRAY_ALPHA:
- mp_msg( MSGT_DECVIDEO,MSGL_INFO,"Sorry gray scaled png with alpha channel not supported at moment.\n" );
- break;
- case PNG_COLOR_TYPE_GRAY:
- out_fmt=IMGFMT_Y800;
- break;
- case PNG_COLOR_TYPE_PALETTE:
- out_fmt=IMGFMT_BGR8;
- break;
- case PNG_COLOR_TYPE_RGB_ALPHA:
- out_fmt=IMGFMT_BGR32;
- break;
- case PNG_COLOR_TYPE_RGB:
- out_fmt=IMGFMT_BGR24;
- break;
- default:
- mp_msg( MSGT_DECVIDEO,MSGL_INFO,"Sorry, unsupported PNG colorspace: %d.\n" ,color_type);
- }
-
- // (re)init libvo if image parameters changed (width/height/colorspace)
- if(last_w!=png_width || last_h!=png_height || last_c!=out_fmt){
- last_w=png_width; last_h=png_height; last_c=out_fmt;
- if(!out_fmt) return NULL;
- if(!mpcodecs_config_vo(sh,png_width,png_height,out_fmt)) return NULL;
- }
-
-#if 0
- switch( info->color_type )
- {
- case PNG_COLOR_TYPE_GRAY_ALPHA: printf( "[png] used GrayA -> stripping alpha channel\n" ); break;
- case PNG_COLOR_TYPE_GRAY: printf( "[png] used Gray -> rgb\n" ); break;
- case PNG_COLOR_TYPE_PALETTE: printf( "[png] used palette -> rgb\n" ); break;
- case PNG_COLOR_TYPE_RGB_ALPHA: printf( "[png] used RGBA -> stripping alpha channel\n" ); break;
- case PNG_COLOR_TYPE_RGB: printf( "[png] read rgb datas.\n" ); break;
- }
-#endif
-
- mpi=mpcodecs_get_image(sh, MP_IMGTYPE_TEMP, MP_IMGFLAG_ACCEPT_STRIDE,
- png_width,png_height);
- if(!mpi) return NULL;
-
-// Let's DECODE!
- row_p=malloc( sizeof( png_bytep ) * png_height );
-//png_get_rowbytes( png,info )
- for ( i=0; i < png_height; i++ ) row_p[i]=mpi->planes[0] + mpi->stride[0]*i;
- png_read_image( png,row_p );
- free( row_p );
-
- if (out_fmt==IMGFMT_BGR8) {
- png_get_PLTE( png,info,&pal,&cols );
- mpi->planes[1] = realloc(mpi->planes[1], 4*cols);
- p = mpi->planes[1];
- for (i = 0; i < cols; i++) {
- *p++ = pal[i].blue;
- *p++ = pal[i].green;
- *p++ = pal[i].red;
- *p++ = 0;
- }
- }
-
- png_read_end( png,endinfo );
- png_destroy_read_struct( &png,&info,&endinfo );
-
- return mpi;
-}
diff --git a/libmpcodecs/vd_mtga.c b/libmpcodecs/vd_mtga.c
deleted file mode 100644
index 861f898f80..0000000000
--- a/libmpcodecs/vd_mtga.c
+++ /dev/null
@@ -1,252 +0,0 @@
-/*
- * based on: XreaL's x_r_img_tga.* (http://www.sourceforge.net/projects/xreal/)
- * libtarga.*
- * xli's tga.*
- *
- * Copyright (c) 2002 Tilman Sauerbeck <tsauerbeck@users.sourceforge.net>
- *
- * This file is part of MPlayer.
- *
- * MPlayer is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * MPlayer 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with MPlayer; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <libavutil/intreadwrite.h>
-
-#include "config.h"
-#include "mp_msg.h"
-
-#include "libvo/fastmemcpy.h"
-
-#include "vd_internal.h"
-
-static const vd_info_t info =
-{
- "TGA Images decoder",
- "mtga",
- "Tilman Sauerbeck, A'rpi",
- "Tilman Sauerbeck",
- "only 24bpp and 32bpp RGB targa files support so far"
-};
-
-LIBVD_EXTERN(mtga)
-
-typedef enum
-{
- TGA_NO_DATA,
- TGA_UNCOMP_PALETTED,
- TGA_UNCOMP_TRUECOLOR,
- TGA_UNCOMP_GRAYSCALE,
- TGA_RLE_PALETTED = 9,
- TGA_RLE_TRUECOLOR,
- TGA_RLE_GRAYSCALE
-} TGAImageType;
-
-typedef struct
-{
- unsigned char id_len;
- unsigned short img_type;
-
- unsigned short width;
- unsigned short height;
-
- unsigned char bpp;
- unsigned char origin; /* 0 = lower left, 1 = upper left */
- unsigned short start_row;
- short increment;
-} TGAInfo;
-
-static unsigned int out_fmt = 0;
-
-static int last_w = -1;
-static int last_h = -1;
-static int last_c = -1;
-
-
-/* to set/get/query special features/parameters */
-static int control(sh_video_t *sh, int cmd, void *arg, ...)
-{
- switch (cmd)
- {
- case VDCTRL_QUERY_FORMAT:
- if (*((int *) arg) == out_fmt) return CONTROL_TRUE;
- return CONTROL_FALSE;
- }
- return CONTROL_UNKNOWN;
-}
-
-/* init driver */
-static int init(sh_video_t *sh)
-{
- sh->context = calloc(1, sizeof(TGAInfo));
- last_w = -1;
-
- return 1;
-}
-
-
-/* uninit driver */
-static void uninit(sh_video_t *sh)
-{
- TGAInfo *info = sh->context;
- free(info);
- return;
-}
-
-
-/* decode a runlength-encoded tga */
-static void decode_rle_tga(TGAInfo *info, unsigned char *data, mp_image_t *mpi)
-{
- int row, col, replen, i, num_bytes = info->bpp / 8;
- unsigned char repetitions, packet_header, *final;
-
- /* see line 207 to see why this loop is set up like this */
- for (row = info->start_row; (!info->origin && row) || (info->origin && row < info->height); row += info->increment)
- {
- final = mpi->planes[0] + mpi->stride[0] * row;
-
- for (col = 0; col < info->width; col += repetitions)
- {
- packet_header = *data++;
- repetitions = (1 + (packet_header & 0x7f));
- replen = repetitions * num_bytes;
-
- if (packet_header & 0x80) /* runlength encoded packet */
- {
- memcpy(final, data, num_bytes);
-
- // Note: this will be slow when DR to vram!
- i=num_bytes;
- while(2*i<=replen){
- memcpy(final+i,final,i);
- i*=2;
- }
- memcpy(final+i,final,replen-i);
- data += num_bytes;
- }
- else /* raw packet */
- {
- fast_memcpy(final, data, replen);
- data += replen;
- }
-
- final += replen;
- }
- }
-
- return;
-}
-
-
-static void decode_uncompressed_tga(TGAInfo *info, unsigned char *data, mp_image_t *mpi)
-{
- unsigned char *final;
- int row, num_bytes = info->bpp / 8;
-
- /* see line 207 to see why this loop is set up like this */
- for (row = info->start_row; (!info->origin && row) || (info->origin && row < info->height); row += info->increment)
- {
- final = mpi->planes[0] + mpi->stride[0] * row;
- fast_memcpy(final, data, info->width * num_bytes);
- data += info->width * num_bytes;
- }
-
- return;
-}
-
-
-static short read_tga_header(unsigned char *buf, TGAInfo *info)
-{
- info->id_len = buf[0];
-
- info->img_type = buf[2];
-
- /* targa data is always stored in little endian byte order */
- info->width = AV_RL16(&buf[12]);
- info->height = AV_RL16(&buf[14]);
-
- info->bpp = buf[16];
-
- info->origin = (buf[17] & 0x20) >> 5;
-
- /* FIXME check for valid targa data */
-
- return 0;
-}
-
-
-/* decode a frame */
-static mp_image_t *decode(sh_video_t *sh, void *raw, int len, int flags)
-{
- TGAInfo *info = sh->context;
- unsigned char *data = raw;
- mp_image_t *mpi;
-
-
- if (len <= 0)
- return NULL; /* skip frame */
-
- read_tga_header(data, info); /* read information about the file */
-
- if (info->bpp == 24)
- out_fmt = IMGFMT_BGR24;
- else if (info->bpp == 32)
- out_fmt = IMGFMT_BGR32;
- else
- {
- mp_msg(MSGT_DECVIDEO, MSGL_INFO, "Unsupported TGA type! depth=%d\n",info->bpp);
- return NULL;
- }
-
- if (info->img_type != TGA_UNCOMP_TRUECOLOR && info->img_type != TGA_RLE_TRUECOLOR) /* not a true color image */
- {
- mp_msg(MSGT_DECVIDEO, MSGL_INFO, "Unsupported TGA type: %i!\n", info->img_type);
- return NULL;
- }
-
- /* if img.origin is 0, we decode from bottom to top. if it's 1, we decode from top to bottom */
- info->start_row = (info->origin) ? 0 : info->height - 1;
- info->increment = (info->origin) ? 1 : -1;
-
- /* set data to the beginning of the image data */
- data += 18 + info->id_len;
-
- /* (re)init libvo if image parameters changed (width/height/colorspace) */
- if (last_w != info->width || last_h != info->height || last_c != out_fmt)
- {
- last_w = info->width;
- last_h = info->height;
- last_c = out_fmt;
-
- if (!out_fmt || !mpcodecs_config_vo(sh, info->width, info->height, out_fmt))
- return NULL;
- }
-
- if (!(mpi = mpcodecs_get_image(sh, MP_IMGTYPE_TEMP, MP_IMGFLAG_ACCEPT_STRIDE, info->width, info->height)))
- return NULL;
-
- /* finally decode the image */
- if (info->img_type == TGA_UNCOMP_TRUECOLOR)
- decode_uncompressed_tga(info, data, mpi);
- else if (info->img_type == TGA_RLE_TRUECOLOR)
- decode_rle_tga(info, data, mpi);
-// else
-// mpi = NULL;
-
- return mpi;
-}
diff --git a/libmpcodecs/vd_raw.c b/libmpcodecs/vd_raw.c
deleted file mode 100644
index 4b18ab301e..0000000000
--- a/libmpcodecs/vd_raw.c
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * This file is part of MPlayer.
- *
- * MPlayer is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * MPlayer 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with MPlayer; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "config.h"
-#include "mp_msg.h"
-
-#include "vd_internal.h"
-
-static const vd_info_t info = {
- "RAW Uncompressed Video",
- "raw",
- "A'rpi",
- "A'rpi & Alex",
- "uncompressed"
-};
-
-LIBVD_EXTERN(raw)
-
-// to set/get/query special features/parameters
-static int control(sh_video_t *sh,int cmd,void* arg,...){
- int format = sh->bih ? sh->bih->biCompression : sh->format;
- switch(cmd){
- case VDCTRL_QUERY_FORMAT:
- if (*(int *)arg == format) return CONTROL_TRUE;
- if (*(int *)arg == IMGFMT_YUY2 && format == MKTAG('y', 'u', 'v', '2')) return CONTROL_TRUE;
- return CONTROL_FALSE;
- }
- return CONTROL_UNKNOWN;
-}
-
-// init driver
-static int init(sh_video_t *sh){
- // set format fourcc for raw RGB:
- if(sh->bih && sh->bih->biCompression==0){ // set based on bit depth
- switch(sh->bih->biBitCount){
- case 1: sh->bih->biCompression=IMGFMT_BGR1; break;
- case 4: sh->bih->biCompression=IMGFMT_BGR4; break;
- case 8: sh->bih->biCompression=IMGFMT_BGR8; break;
- case 15: sh->bih->biCompression=IMGFMT_BGR15; break;
- // workaround bitcount==16 => bgr15 case for avi files:
- case 16: sh->bih->biCompression=(sh->format)?IMGFMT_BGR16:IMGFMT_BGR15; break;
- case 24: sh->bih->biCompression=IMGFMT_BGR24; break;
- case 32: sh->bih->biCompression=IMGFMT_BGR32; break;
- default:
- mp_msg(MSGT_DECVIDEO,MSGL_WARN,"RAW: depth %d not supported\n",sh->bih->biBitCount);
- }
- }
- return mpcodecs_config_vo(sh,sh->disp_w,sh->disp_h,sh->bih ? sh->bih->biCompression : sh->format);
-}
-
-// uninit driver
-static void uninit(sh_video_t *sh){
-}
-
-//mp_image_t* mpcodecs_get_image(sh_video_t *sh, int mp_imgtype, int mp_imgflag, int w, int h);
-
-// decode a frame
-static mp_image_t* decode(sh_video_t *sh,void* data,int len,int flags){
- mp_image_t* mpi;
- int frame_size;
- int format = sh->bih ? sh->bih->biCompression : sh->format;
-
- if(len<=0) return NULL; // skipped frame
-
- mpi=mpcodecs_get_image(sh, MP_IMGTYPE_EXPORT, 0,
- sh->disp_w, sh->disp_h);
- if(!mpi) return NULL;
-
- if(mpi->flags&MP_IMGFLAG_PLANAR){
- // TODO !!!
- mpi->planes[0]=data;
- mpi->stride[0]=mpi->width;
- frame_size=mpi->stride[0]*mpi->h;
- if((mpi->imgfmt == IMGFMT_NV12) || (mpi->imgfmt == IMGFMT_NV21))
- {
- mpi->planes[1]=mpi->planes[0]+mpi->width*mpi->height;
- mpi->stride[1]=mpi->chroma_width;
- frame_size+=mpi->chroma_width*mpi->chroma_height;
- } else if(mpi->flags&MP_IMGFLAG_YUV) {
- int cb=2, cr=1;
- if(mpi->flags&MP_IMGFLAG_SWAPPED) {
- cb=1; cr=2;
- }
- // Support for some common Planar YUV formats
- /* YV12,I420,IYUV */
- mpi->planes[cb]=mpi->planes[0]+mpi->width*mpi->height;
- mpi->stride[cb]=mpi->chroma_width;
- mpi->planes[cr]=mpi->planes[cb]+mpi->chroma_width*mpi->chroma_height;
- mpi->stride[cr]=mpi->chroma_width;
- frame_size+=2*mpi->chroma_width*mpi->chroma_height;
- }
- } else {
- mpi->planes[0]=data;
- mpi->stride[0]=mpi->width*(mpi->bpp/8);
- // .AVI files has uncompressed lines 4-byte aligned:
- if(sh->format==0 || sh->format==3) mpi->stride[0]=(mpi->stride[0]+3)&(~3);
- if(mpi->imgfmt==IMGFMT_RGB8 || mpi->imgfmt==IMGFMT_BGR8){
- // export palette:
- mpi->planes[1]=sh->bih ? (unsigned char*)(sh->bih+1) : NULL;
-#if 0
- printf("Exporting palette: %p !!\n",mpi->planes[1]);
- { unsigned char* p=mpi->planes[1];
- int i;
- for(i=0;i<64;i++) printf("%3d: %02X %02X %02X (%02X)\n",i,p[4*i],p[4*i+1],p[4*i+2],p[4*i+3]);
- }
-#endif
- }
- frame_size=mpi->stride[0]*mpi->h;
- if (len >= frame_size && format == MKTAG('y', 'u', 'v', '2')) {
- int i;
- for (i = 1; i < frame_size; i += 2)
- mpi->planes[0][i] ^= 128;
- }
- if(mpi->bpp<8) frame_size=frame_size*mpi->bpp/8;
- }
-
- if(len<frame_size){
- mp_msg(MSGT_DECVIDEO,MSGL_WARN,"Frame too small! (%d<%d) Wrong format?\n",
- len,frame_size);
- return NULL;
- }
-
- return mpi;
-}