[FFmpeg-soc] [soc]: r2023 - in dcaenc: . checkout.sh dcaenc.c dcaenc.h ffmpeg.patch readme

banan subversion at mplayerhq.hu
Thu Mar 20 14:40:50 CET 2008


Author: banan
Date: Thu Mar 20 14:40:49 2008
New Revision: 2023

Log:
dca encoder skeleton

Added:
   dcaenc/
   dcaenc/checkout.sh   (contents, props changed)
   dcaenc/dcaenc.c
   dcaenc/dcaenc.h
   dcaenc/ffmpeg.patch
   dcaenc/readme

Added: dcaenc/checkout.sh
==============================================================================
--- (empty file)
+++ dcaenc/checkout.sh	Thu Mar 20 14:40:49 2008
@@ -0,0 +1,11 @@
+echo "checking out ffmpeg svn"
+svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk/ ffmpeg -r 12510
+echo "Done, now just do a regular configure and make to build."
+echo "patching ffmpeg"
+cd ffmpeg
+patch -p0 <../ffmpeg.patch
+cd ..
+echo "linkling the dca files to ffmpeg/libavcodec"
+ln -s ../../dcaenc.c ffmpeg/libavcodec/dcaenc.c
+ln -s ../../dcaenc.h ffmpeg/libavcodec/dcaenc.h
+echo "all done recompile ffmpeg"

Added: dcaenc/dcaenc.c
==============================================================================
--- (empty file)
+++ dcaenc/dcaenc.c	Thu Mar 20 14:40:49 2008
@@ -0,0 +1,379 @@
+/*
+ * DCA encoder
+ * Copyright (C) 2008 Alexander E. Patrakov
+ *
+ * This file is part of FFmpeg.
+ *
+ * When this file is part of FFmpeg it can be licensed under the LGPL 2.1
+ * currently it is a wip
+ */
+
+/* FFmpeg port by Benjamin Larsson */
+
+
+#include "avcodec.h"
+#include "bitstream.h"
+#include "dcaenc.h"
+
+#define MAX_CHANNELS (2)
+#define DCA_SUBBANDS_32 (32)
+#define DCA_MAX_FRAME_SIZE (16383)
+#define FIXED_FRAME_SIZE (7167)
+
+typedef struct {
+    PutBitContext pb;
+    int32_t history[MAX_CHANNELS][512]; /* This is a circular buffer */
+    int start[MAX_CHANNELS];
+
+    int32_t pcm[DCA_SUBBANDS_32];
+    int32_t subband[64][MAX_CHANNELS][DCA_SUBBANDS_32]; /* [sample][channel][subband] */
+    int16_t st_samples[4096];
+    int     fill_samples;
+} DCAContext;
+
+static int32_t cos_table[128];
+
+
+static inline int32_t mul32(int32_t a, int32_t b)
+{
+    /* on >=i686, gcc compiles this into a single "imull" instruction */
+    int64_t r = (int64_t)a * b;
+    /* round the result before truncating - improves accuracy */
+    return (r + 0x80000000) >> 32;
+}
+
+/* Integer version of the cosine modulated Pseudo QMF */
+
+void qmf_init(void)
+{
+    int i;
+    int32_t c[17], s[17];
+    s[0] = 0;       /* sin(index * PI / 64) * 0x7fffffff */
+    c[0] = 0x7fffffff;  /* cos(index * PI / 64) * 0x7fffffff */
+
+    for (i = 1; i <= 16; i++) {
+        s[i] = 2 * (mul32(c[i-1], 105372028) + mul32(s[i-1], 2144896908));
+        c[i] = 2 * (mul32(c[i-1], 2144896908) - mul32(s[i-1], 105372028));
+    }
+
+    for (i = 0; i < 16; i++) {
+        cos_table[i] = c[i] >> 3; /* so that the output doesn't overflow */
+        cos_table[i+16] = s[16-i] >> 3;
+        cos_table[i+32] = -s[i] >> 3;
+        cos_table[i+48] = -c[16-i] >> 3;
+        cos_table[i+64] = -c[i] >> 3;
+        cos_table[i+80] = -s[16-i] >> 3;
+        cos_table[i+96] = s[i] >> 3;
+        cos_table[i+112] = c[16-i] >> 3;
+    }
+}
+
+static int32_t band_delta_factor(int band, int sample_num)
+{
+    int index = band * (2 * sample_num + 1);
+    if (band == 0)
+        return 0x07ffffff;
+    else
+        return cos_table[index & 127];
+}
+
+static void qmf_decompose(DCAContext *c, int32_t in[32], int32_t out[32], int channel)
+{
+    int band, i, j, k;
+    int32_t resp;
+    int32_t accum[DCA_SUBBANDS_32];
+
+    /* Place new samples into the history buffer */
+    for (i = 0; i < DCA_SUBBANDS_32; i++)
+        c->history[channel][c->start[channel] + i] = in[i];
+    c->start[channel] += DCA_SUBBANDS_32;
+    if (c->start[channel] == 512)
+        c->start[channel] = 0;
+
+    /* Calculate the dot product of the signal with the (possibly inverted)
+       reference decoder's response to this vector:
+       (0.0, 0.0, ..., 0.0, -1.0, 1.0, 0.0, ..., 0.0)
+       so that -1.0 cancels 1.0 from the previous step */
+
+    memset(accum,0,sizeof(int32_t));
+
+    for (k = 48, j = 0, i = c->start[channel]; i < 512; k++, j++, i++)
+        accum[(k & 32) ? (31 - (k & 31)) : (k & 31)] += mul32(c->history[channel][i], UnQMF[j]);
+    for (i = 0; i < c->start[channel]; k++, j++, i++)
+        accum[(k & 32) ? (31 - (k & 31)) : (k & 31)] += mul32(c->history[channel][i], UnQMF[j]);
+
+    resp = 0;
+    /* TODO: implement FFT instead of this naive calculation */
+    for (band = 0; band < DCA_SUBBANDS_32; band++) {
+        for (j = 0; j < 32; j++)
+            resp += mul32(accum[j], band_delta_factor(band, j));
+
+        out[band] = (band & 2) ? (-resp) : resp;
+    }
+}
+
+static void put_frame_header(DCAContext *c)
+{
+    /* SYNC */
+    put_bits(&c->pb, 16, 0x7ffe);
+    put_bits(&c->pb, 16, 0x8001);
+
+    /* Frame type: normal */
+    put_bits(&c->pb, 1, 1);
+
+    /* Deficit sample count: none */
+    put_bits(&c->pb, 5, 31);
+
+    /* CRC is not present */
+    put_bits(&c->pb, 1, 0);
+
+    /* Number of PCM sample blocks: 64
+       (larger values are unusable with 1:1 compression due to high bitrate
+       and frame size limitation) */
+    put_bits(&c->pb, 7, 63);
+
+    /* Primary frame byte size: 7168 */
+    put_bits(&c->pb, 14, FIXED_FRAME_SIZE);
+
+    /* Audio channel arrangement: L + R (stereo) */
+    put_bits(&c->pb, 6, 2);
+
+    /* Core audio sampling frequency: 44100 Hz */
+    put_bits(&c->pb, 4, 8);
+
+    /* Transmission bit rate: 1411.2 kbps */
+    put_bits(&c->pb, 5, 0x16);
+
+    /* Embedded down mix: disabled */
+    put_bits(&c->pb, 1, 0);
+
+    /* Embedded dynamic range flag: not present */
+    put_bits(&c->pb, 1, 0);
+
+    /* Embedded time stamp flag: not present */
+    put_bits(&c->pb, 1, 0);
+
+    /* Auxiliary data flag: not present */
+    put_bits(&c->pb, 1, 0);
+
+    /* HDCD source: no */
+    put_bits(&c->pb, 1, 0);
+
+    /* Extension audio ID: N/A */
+    put_bits(&c->pb, 3, 0);
+
+    /* Extended audio data: not present */
+    put_bits(&c->pb, 1, 0);
+
+    /* Audio sync word insertion flag: after each sub-frame */
+    put_bits(&c->pb, 1, 0);
+
+    /* Low frequency effects flag: not present */
+    put_bits(&c->pb, 2, 0);
+
+    /* Predictor history switch flag: on */
+    put_bits(&c->pb, 1, 1);
+
+    /* No CRC */
+    /* Multirate interpolator switch: non-perfect reconstruction */
+    put_bits(&c->pb, 1, 0);
+
+    /* Encoder software revision: 7 */
+    put_bits(&c->pb, 4, 7);
+
+    /* Copy history: 0 */
+    put_bits(&c->pb, 2, 0);
+
+    /* Source PCM resolution: 16 bits, not DTS ES */
+    put_bits(&c->pb, 3, 0);
+
+    /* Front sum/difference coding: no */
+    put_bits(&c->pb, 1, 0);
+
+    /* Surrounds sum/difference coding: no */
+    put_bits(&c->pb, 1, 0);
+
+    /* Dialog normalization: 0 dB */
+    put_bits(&c->pb, 4, 0);
+}
+
+static void put_primary_audio_header(DCAContext *c)
+{
+    /* Number of subframes: 2 */
+    put_bits(&c->pb, 4, 1);
+
+    /* Number of primary audio channels: 2 */
+    put_bits(&c->pb, 3, 1);
+
+    /* Subband activity count: 27 + 27 */
+    put_bits(&c->pb, 5, 25);
+    put_bits(&c->pb, 5, 25);
+
+    /* High frequency VQ start subband: 27, 27 */
+    put_bits(&c->pb, 5, 26);
+    put_bits(&c->pb, 5, 26);
+
+    /* Joint intensity coding index: 0, 0 */
+    put_bits(&c->pb, 3, 0);
+    put_bits(&c->pb, 3, 0);
+
+    /* Transient mode codebook: A4, A4 (arbitrary) */
+    put_bits(&c->pb, 2, 0);
+    put_bits(&c->pb, 2, 0);
+
+    /* Scale factor code book: 7 bit linear, 7-bit sqrt table (for each channel) */
+    put_bits(&c->pb, 3, 6);
+    put_bits(&c->pb, 3, 6);
+
+    /* Bit allocation quantizer select: linear 5-bit */
+    put_bits(&c->pb, 3, 6);
+    put_bits(&c->pb, 3, 6);
+
+    /* Quantization index codebook select: dummy data
+       to avoid transmission of scale factor adjustment */
+    put_bits(&c->pb, 1, 1); put_bits(&c->pb, 1, 1);
+    put_bits(&c->pb, 2, 3); put_bits(&c->pb, 2, 3);
+    put_bits(&c->pb, 2, 3); put_bits(&c->pb, 2, 3);
+    put_bits(&c->pb, 2, 3); put_bits(&c->pb, 2, 3);
+    put_bits(&c->pb, 2, 3); put_bits(&c->pb, 2, 3);
+    put_bits(&c->pb, 3, 7); put_bits(&c->pb, 3, 7);
+    put_bits(&c->pb, 3, 7); put_bits(&c->pb, 3, 7);
+    put_bits(&c->pb, 3, 7); put_bits(&c->pb, 3, 7);
+    put_bits(&c->pb, 3, 7); put_bits(&c->pb, 3, 7);
+    put_bits(&c->pb, 3, 7); put_bits(&c->pb, 3, 7);
+
+    /* Scale factor adjustment index: not transmitted */
+}
+
+/* TODO: don't hardcode 16-bit quantization */
+static uint32_t quantize(int32_t d)
+{
+    d = d >> 16;
+    return d & 0xffff;
+}
+
+
+static void put_subframe(DCAContext *c, int32_t subband_data[32][2][32])
+{
+    int i, sub, ss, ch;
+
+    /* Subsubframes count: 4 */
+    put_bits(&c->pb, 2, 3);
+
+    /* Partial subsubframe sample count: dummy */
+    put_bits(&c->pb, 3, 0);
+
+    /* Prediction mode: no ADPCM, in each channel and subband */
+    for (ch = 0; ch < 2; ch++)
+        for (sub = 0; sub < 27; sub++)
+            put_bits(&c->pb, 1, 0);
+
+    /* Prediction VQ addres: not transmitted */
+    /* Bit allocation index: 19 = "16 bits", for each channel and subband */
+    for (ch = 0; ch < 2; ch++)
+        for (sub = 0; sub < 27; sub++)
+            put_bits(&c->pb, 5, 19);
+
+    /* Transition mode: none for each channel and subband */
+    for (ch = 0; ch < 2; ch++)
+        for (sub = 0; sub < 27; sub++)
+            put_bits(&c->pb, 1, 0); /* according to Huffman codebook A4 */
+
+    /* Scale factors: the same for each channel and subband,
+       encoded according to Table D.1.2 */
+    for (ch = 0; ch < 2; ch++)
+        for (sub = 0; sub < 27; sub++)
+            put_bits(&c->pb, 7, 110);
+
+    /* Joint subband scale factor codebook select: not transmitted */
+    /* Scale factors for joint subband coding: not transmitted */
+    /* Stereo down-mix coefficients: not transmitted */
+    /* Dynamic range coefficient: not transmitted */
+    /* Stde information CRC check word: not transmitted */
+    /* VQ encoded high frequency subbands: not transmitted */
+    /* LFE data: none */
+    /* Audio data: 4 subsubframes */
+
+    for (ss = 0; ss < 4 ; ss++)
+        for (ch = 0; ch < 2; ch++)
+            for (sub = 0; sub < 27; sub++)
+                for (i = 0; i < 8; i++)
+                    put_bits(&c->pb, 16, quantize(subband_data[ss * 8 + i][ch][sub]));
+    /* DSYNC */
+    align_put_bits(&c->pb);
+    put_bits(&c->pb, 0xffff, 16);
+}
+
+void put_frame(DCAContext *c, int32_t subband_data[64][2][32], uint8_t *frame)
+{
+    int channel;
+    init_put_bits(&c->pb, frame, DCA_MAX_FRAME_SIZE);
+
+    put_frame_header(c);
+    put_primary_audio_header(c);
+    for (channel=0 ; channel<2; channel++)
+        put_subframe(c, &subband_data[32 * channel]);
+
+    flush_put_bits(&c->pb);
+}
+
+static int DCA_encode_frame(AVCodecContext *avctx,
+                            uint8_t *frame, int buf_size, void *data)
+{
+    int i,k,channel;
+    DCAContext *c = avctx->priv_data;
+//    int16_t *samples = data;
+
+//    if (buf_size < MAX_CHANNELS*2048*sizeof(int16_t))
+//        return -1;
+
+    // We always get 2048 16bit samples per call so save then until next call
+
+    if (c->fill_samples) {
+        memcpy(c->st_samples, data, 2048*sizeof(int16_t));
+        c->fill_samples = 0;
+        return 0;
+    }
+    memcpy(&c->st_samples[2048], data, 2048*sizeof(int16_t));
+    c->fill_samples = 0;
+
+    for (i = 0; i < 64; i ++) /* i is the decimated sample number */
+        for (channel=0; channel<2 ; channel++) {
+            /* Get 32 PCM samples */
+            for (k = 0; k < 32; k++) { /* k is the sample number in a 32-sample block */
+                c->pcm[k] = c->st_samples[4 * (32*i+k) + 2 * channel] << 16;
+            }
+        /* Put subband samples into the proper place */
+        qmf_decompose(c, c->pcm, &c->subband[i][channel][0], channel);
+    }
+
+    put_frame(c, c->subband, frame);
+
+    return 4000;
+}
+
+static int DCA_encode_init(AVCodecContext *avctx) {
+    DCAContext *c = avctx->priv_data;
+
+    if(avctx->channels != 2 || avctx->sample_rate != 44100) {
+        av_log(avctx, AV_LOG_ERROR, "Only 44.1 kHz stereo is supported at the moment!\n");
+        return -1;
+    }
+
+    // Make sure that the first call to encode is a fill call
+    c->fill_samples = 1;
+
+    qmf_init();
+    return 0;
+}
+
+AVCodec dca_encoder = {
+    "dca",
+    CODEC_TYPE_AUDIO,
+    CODEC_ID_DTS,
+    sizeof(DCAContext),
+    DCA_encode_init,
+    DCA_encode_frame,
+    NULL,
+    NULL,
+};

Added: dcaenc/dcaenc.h
==============================================================================
--- (empty file)
+++ dcaenc/dcaenc.h	Thu Mar 20 14:40:49 2008
@@ -0,0 +1,539 @@
+/*
+ * DCA encoder tables
+ * Copyright (C) 2008 Alexander E. Patrakov
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+/* This is a scaled version of the response of the reference decoder to
+   this vector of subband samples: ( 1.0 0.0 0.0 ... 0.0 )
+   */
+
+static const int32_t UnQMF[512] = {
+7,
+4,
+-961,
+-2844,
+-8024,
+-18978,
+-32081,
+-15635,
+-16582,
+-18359,
+-17180,
+-14868,
+-11664,
+-8051,
+-4477,
+-1327,
+-1670,
+-6019,
+-11590,
+-18030,
+-24762,
+-30965,
+-35947,
+-36145,
+-37223,
+-86311,
+-57024,
+-27215,
+-11274,
+-4684,
+42,
+108,
+188,
+250,
+-1007,
+-596,
+-2289,
+-12218,
+-27191,
+-124367,
+-184256,
+-250538,
+-323499,
+-397784,
+-468855,
+-532072,
+-583000,
+-618041,
+-777916,
+-783868,
+-765968,
+-724740,
+-662468,
+-583058,
+-490548,
+-401623,
+-296090,
+-73154,
+-36711,
+-7766,
+-2363,
+-4905,
+2388,
+2681,
+5651,
+4086,
+71110,
+139742,
+188067,
+151237,
+101355,
+309917,
+343690,
+358839,
+357555,
+334606,
+289625,
+224152,
+142063,
+48725,
+74996,
+238425,
+411666,
+584160,
+744276,
+880730,
+983272,
+1041933,
+1054396,
+789531,
+851022,
+864032,
+675431,
+418134,
+35762,
+66911,
+103502,
+136403,
+-55147,
+-245269,
+-499595,
+-808470,
+-1136858,
+-2010912,
+-2581654,
+-3151901,
+-3696328,
+-4196599,
+-4633761,
+-4993229,
+-5262495,
+-5436311,
+-477650,
+-901314,
+-1308090,
+-1677468,
+-1985525,
+-2212848,
+-2341196,
+-2373915,
+-2269552,
+-2620489,
+-2173858,
+-1629954,
+-946595,
+-193499,
+1119459,
+1138657,
+1335311,
+1126544,
+2765033,
+3139603,
+3414913,
+3599213,
+3676363,
+3448981,
+3328726,
+3111551,
+2810887,
+2428657,
+1973684,
+1457278,
+893848,
+300995,
+-292521,
+-867621,
+-1404936,
+-1871278,
+-2229831,
+-2440932,
+-2462684,
+-2255006,
+-1768898,
+-1079574,
+82115,
+1660302,
+3660715,
+6123610,
+8329598,
+11888744,
+15722147,
+19737089,
+25647773,
+31039399,
+36868007,
+43124253,
+49737161,
+56495958,
+63668945,
+71039511,
+78540240,
+86089058,
+93600041,
+100981151,
+108136061,
+114970055,
+121718321,
+127566038,
+132774642,
+137247294,
+140894737,
+143635018,
+145395599,
+146114032,
+145742999,
+144211606,
+141594341,
+137808404,
+132914122,
+126912246,
+120243281,
+112155281,
+103338368,
+93904953,
+83439152,
+72921548,
+62192990,
+51434918,
+40894003,
+30786726,
+21384955,
+12939112,
+5718193,
+-5790,
+-3959261,
+-5870978,
+-5475538,
+-2517061,
+3247310,
+12042937,
+24076729,
+39531397,
+58562863,
+81297002,
+107826748,
+138209187,
+172464115,
+210569037,
+252468018,
+298045453,
+347168648,
+399634888,
+455137189,
+513586535,
+574537650,
+637645129,
+702597163,
+768856566,
+836022040,
+903618096,
+971159680,
+1038137214,
+1103987353,
+1168195035,
+1230223053,
+1289539180,
+1345620373,
+1397957958,
+1446063657,
+1489474689,
+1527740502,
+1560502307,
+1587383079,
+1608071145,
+1622301248,
+1629859340,
+1630584888,
+1624373875,
+1611178348,
+1591018893,
+1563948667,
+1530105004,
+1489673227,
+1442904075,
+1390107674,
+1331590427,
+1267779478,
+1199115126,
+1126053392,
+1049146257,
+968928307,
+885965976,
+800851610,
+714186243,
+626590147,
+538672486,
+451042824,
+364299927,
+279026812,
+195785029,
+115109565,
+37503924,
+-36564551,
+-106668063,
+-172421668,
+-233487283,
+-289575706,
+-340448569,
+-385919511,
+-425854915,
+-460174578,
+-488840702,
+-511893328,
+-529405118,
+-541489888,
+-548312207,
+-550036471,
+-547005316,
+-539436808,
+-527630488,
+-512084785,
+-492941605,
+-470665204,
+-445668379,
+-418328829,
+-389072810,
+-358293846,
+-326396227,
+-293769619,
+-260792276,
+-227825056,
+-195208961,
+-163262121,
+-132280748,
+-102533727,
+-74230062,
+-47600637,
+-22817785,
+-25786,
+20662895,
+39167253,
+55438413,
+69453741,
+81242430,
+90795329,
+98213465,
+103540643,
+106917392,
+108861938,
+108539682,
+106780704,
+103722568,
+99043289,
+93608686,
+87266209,
+80212203,
+72590022,
+64603428,
+56362402,
+48032218,
+39749162,
+31638971,
+23814664,
+16376190,
+9409836,
+2988017,
+-2822356,
+-7976595,
+-12454837,
+-16241147,
+-19331944,
+-21735011,
+-23468284,
+-24559822,
+-25042936,
+-25035583,
+-24429587,
+-23346408,
+-21860411,
+-20015718,
+-17025330,
+-14968728,
+-12487138,
+-9656319,
+-7846681,
+-5197816,
+-2621904,
+-144953,
+2144746,
+3990570,
+5845884,
+7454650,
+8820394,
+9929891,
+10784445,
+11390921,
+11762056,
+11916017,
+12261189,
+12117604,
+11815303,
+11374622,
+10815301,
+10157241,
+9418799,
+8629399,
+7780776,
+7303680,
+6353499,
+5392738,
+4457895,
+3543062,
+1305978,
+1402521,
+1084092,
+965652,
+-151008,
+-666667,
+-1032157,
+-1231475,
+-1319043,
+-1006023,
+-915720,
+-773426,
+-612377,
+-445864,
+-291068,
+-161337,
+-66484,
+-11725,
+133453,
+388184,
+615856,
+804033,
+942377,
+1022911,
+1041247,
+995854,
+891376,
+572246,
+457992,
+316365,
+172738,
+43037,
+-117662,
+-98542,
+-70279,
+-41458,
+-535790,
+-959038,
+-1364456,
+-1502265,
+-1568530,
+-2378681,
+-2701111,
+-2976407,
+-3182552,
+-3314415,
+-3366600,
+-3337701,
+-3232252,
+-3054999,
+1984841,
+1925903,
+1817377,
+1669153,
+1490069,
+1292040,
+1086223,
+890983,
+699163,
+201358,
+266971,
+296990,
+198419,
+91119,
+4737,
+5936,
+2553,
+2060,
+-3828,
+-1664,
+-4917,
+-20796,
+-36822,
+-131247,
+-154923,
+-162055,
+-161354,
+-148762,
+-125754,
+-94473,
+-57821,
+-19096,
+15172,
+43004,
+65624,
+81354,
+89325,
+89524,
+82766,
+71075,
+55128,
+13686,
+6921,
+1449,
+420,
+785,
+-215,
+-179,
+-113,
+-49,
+6002,
+16007,
+42978,
+100662,
+171472,
+83975,
+93702,
+108813,
+111893,
+110272,
+103914,
+93973,
+81606,
+68041,
+-54058,
+-60695,
+-65277,
+-67224,
+-66213,
+-62082,
+-55574,
+-42988,
+-35272,
+-63735,
+-33501,
+-12671,
+-4038,
+-1232,
+5,
+7
+};

Added: dcaenc/ffmpeg.patch
==============================================================================
--- (empty file)
+++ dcaenc/ffmpeg.patch	Thu Mar 20 14:40:49 2008
@@ -0,0 +1,63 @@
+Index: libavcodec/Makefile
+===================================================================
+--- libavcodec/Makefile	(revision 12509)
++++ libavcodec/Makefile	(working copy)
+@@ -53,6 +53,7 @@
+ OBJS-$(CONFIG_CSCD_DECODER)            += cscd.o
+ OBJS-$(CONFIG_CYUV_DECODER)            += cyuv.o
+ OBJS-$(CONFIG_DCA_DECODER)             += dca.o
++OBJS-$(CONFIG_DCA_ENCODER)             += dcaenc.o
+ OBJS-$(CONFIG_DNXHD_DECODER)           += dnxhddec.o dnxhddata.o
+ OBJS-$(CONFIG_DNXHD_ENCODER)           += dnxhdenc.o dnxhddata.o mpegvideo_enc.o motion_est.o ratecontrol.o mpeg12data.o mpegvideo.o
+ OBJS-$(CONFIG_DSICINAUDIO_DECODER)     += dsicinav.o
+Index: libavcodec/allcodecs.c
+===================================================================
+--- libavcodec/allcodecs.c	(revision 12509)
++++ libavcodec/allcodecs.c	(working copy)
+@@ -179,7 +179,7 @@
+     REGISTER_DECODER (APE, ape);
+     REGISTER_DECODER (ATRAC3, atrac3);
+     REGISTER_DECODER (COOK, cook);
+-    REGISTER_DECODER (DCA, dca);
++    REGISTER_ENCDEC  (DCA, dca);
+     REGISTER_DECODER (DSICINAUDIO, dsicinaudio);
+     REGISTER_ENCDEC  (FLAC, flac);
+     REGISTER_DECODER (IMC, imc);
+Index: libavformat/raw.c
+===================================================================
+--- libavformat/raw.c	(revision 12509)
++++ libavformat/raw.c	(working copy)
+@@ -513,6 +513,20 @@
+     raw_write_packet,
+     .flags= AVFMT_NOTIMESTAMPS,
+ };
++
++AVOutputFormat dts_muxer = {
++    "dts",
++    "raw dts",
++    "audio/x-dca",
++    "dts",
++    0,
++    CODEC_ID_DTS,
++    0,
++    NULL,
++    raw_write_packet,
++    .flags= AVFMT_NOTIMESTAMPS,
++};
++
+ #endif //CONFIG_MUXERS
+ 
+ AVInputFormat dts_demuxer = {
+Index: libavformat/allformats.c
+===================================================================
+--- libavformat/allformats.c	(revision 12509)
++++ libavformat/allformats.c	(working copy)
+@@ -69,7 +69,7 @@
+     REGISTER_MUXER    (CRC, crc);
+     REGISTER_DEMUXER  (DAUD, daud);
+     REGISTER_DEMUXER  (DSICIN, dsicin);
+-    REGISTER_DEMUXER  (DTS, dts);
++    REGISTER_MUXDEMUX (DTS, dts);
+     REGISTER_MUXDEMUX (DV, dv);
+     REGISTER_DEMUXER  (DXA, dxa);
+     REGISTER_DEMUXER  (EA, ea);

Added: dcaenc/readme
==============================================================================
--- (empty file)
+++ dcaenc/readme	Thu Mar 20 14:40:49 2008
@@ -0,0 +1,5 @@
+This source is based on code from here:
+
+http://roundup.mplayerhq.hu/roundup/ffmpeg/file153/edts-20080207.tar.gz
+
+



More information about the FFmpeg-soc mailing list