[FFmpeg-devel] [PATCH] QCELP decoder
Michael Niedermayer
michaelni
Fri Nov 21 12:33:26 CET 2008
On Thu, Nov 20, 2008 at 08:53:37PM -0800, Kenan Gillet wrote:
> On Thu, Nov 20, 2008 at 5:08 PM, Michael Niedermayer <michaelni at gmx.at> wrote:
> > On Thu, Nov 20, 2008 at 10:46:49AM -0800, Kenan Gillet wrote:
> >> On Sat, Nov 15, 2008 at 3:10 PM, Michael Niedermayer <michaelni at gmx.at> wrote:
> >> > On Fri, Nov 14, 2008 at 03:32:51PM -0800, Kenan Gillet wrote:
> >> >> Hi,
> >> >> On Fri, Nov 14, 2008 at 2:27 PM, Michael Niedermayer <michaelni at gmx.at> wrote:
> >> >> > On Fri, Nov 14, 2008 at 12:17:50PM -0800, Kenan Gillet wrote:
> >> >> >>
> >> >> >> On Nov 14, 2008, at 2:14 AM, Michael Niedermayer wrote:
>
> [...]
> >> >> +
> >> >> +/// @defgroup qcelp_unpacked_data_frame QCELP unpacked data frame
> >> >> +/// @{
> >> >> + uint8_t cbsign[16];
> >> >
> >> >> + uint8_t cbgain[16];
> >> >> + uint8_t cindex[16];
> >> >> + uint8_t plag[4];
> >> >> + uint8_t pfrac[4];
> >> >> + uint8_t pgain[4];
> >> >> + uint8_t lspv[10]; /*!< LSP for RATE_OCTAVE, LSPV for other rates */
> >> >> + uint8_t reserved; /*!< on all but rate 1/2 packets */
> >> >> +/// @}
> >> >> +
> >> >> + uint8_t erasure_count;
> >> >> + uint8_t octave_count; /*!< count the consecutive RATE_OCTAVE frames */
> >> >> + float prev_lspf[10];
> >> >> + float predictor_lspf[10]; /*!< LSP predictor,
> >> >> + only use for RATE_OCTAVE and I_F_Q */
> >> >> + float pitch_synthesis_filter_mem[303];
> >> >> + float pitch_pre_filter_mem[303];
> >> >> + float rnd_fir_filter_mem[180];
> >> >> + float formant_mem[170];
> >> >> + float last_codebook_gain;
> >> >> + int prev_g1[2];
> >> >> + int prev_framerate;
> >> >> + float prev_pitch_gain[4];
> >> >> + uint8_t prev_pitch_lag[4];
> >> >> + uint16_t first16bits;
> >> >> +} QCELPContext;
> >> >
> >> > i somehow think this struct does not belong in qcelpdata.h
> >> > but rather qcelpdec.c
> >> >
> >>
> >> I agree, but it is needed by the unpacking table.
> >> should I just put the struct in qcelpdec.c and include qcelpdata.h after ?
> >
> > ok (maybe diego will want it to be renamed to .c though ...)
>
> ok to keep it the way it is?
>
> or to move the QCELPContext in qcelpdec.c ?
ok to move QCELPContext to qcelpdec.c
also if someone wants to rename qcelpdata.h to qcelpdata.c iam ok with that
(and no, iam not truely happy about the result if someone has a better idea,
but keeping it .h will likely break check headers)
spliting the structs though may be an alternative ...
>
> >
> >
> > [...]
> >> >
> >> > [...]
> >> >
> >> >
> >> >> static void warn_insufficient_frame_quality(AVCodecContext *avctx,
> >> >> const char *message) {
> >> >> av_log(avctx, AV_LOG_WARNING, "Frame #%d, IFQ: %s\n", avctx->frame_number, message);
> >> >> }
> >> >>
> >> >> +static int qcelp_decode_frame(AVCodecContext *avctx,
> >> >> + void *data,
> >> >> + int *data_size,
> >> >> + uint8_t *buf,
> >> >> + const int buf_size) {
> >> >> + QCELPContext *q = avctx->priv_data;
> >> >> + float *outbuffer = data;
> >> >> + int i;
> >> >> + float quantized_lspf[10], lpc[10];
> >> >> + float gain[16];
> >> >> + float *formant_mem;
> >> >> +
> >> >> + if ((q->framerate = determine_framerate(avctx, buf_size, &buf)) == I_F_Q) {
> >> >> + warn_insufficient_frame_quality(avctx, "Framerate cannot be determined.");
> >> >> + goto erasure;
> >> >> + }
> >> >> +
> >> >> + if (q->framerate == RATE_OCTAVE &&
> >> >> + (q->first16bits = AV_RB16(buf)) == 0xFFFF) {
> >> >> + warn_insufficient_frame_quality(avctx, "Framerate is 1/8 and first 16 bits are on.");
> >> >> + goto erasure;
> >> >> + }
> >> >> +
> >> >> + if (q->framerate > SILENCE) {
> >> >> + const QCELPBitmap *bitmaps = qcelp_unpacking_bitmaps_per_rate[q->framerate];
> >> >> + const QCELPBitmap *bitmaps_end = qcelp_unpacking_bitmaps_per_rate[q->framerate]
> >> >> + + qcelp_bits_per_rate[q->framerate];
> >> >> + uint8_t *unpacked_data = (uint8_t *)q;
> >> >> +
> >> >
> >> >> + init_get_bits(&q->gb, buf, qcelp_bits_per_rate[q->framerate]);
> >> >
> >> > qcelp_bits_per_rate does not seem correct here nor does its name seem
> >> > to match what it contains
> >>
> >>
> >> yes changed back to buf_size.
> >>
> >> what about changing qcelp_bits_per_rate to qcelp_unpacking_bitmaps_per_rate_len
> >> because it really is the len of the unpacking bitmaps, or do you have
> >> a better suggestion ?
> >
> > the suggested name is too long IMHO
>
> qcelp_unpacking_bitmaps_lengths ?
ok
[...]
--
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
Good people do not need laws to tell them to act responsibly, while bad
people will find a way around the laws. -- Plato
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20081121/e9f281ab/attachment.pgp>
More information about the ffmpeg-devel
mailing list