FFmpeg-soc
Threads by month
- ----- 2026 -----
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
January 2009
- 12 participants
- 118 discussions
Author: faust3
Date: Sat Jan 31 19:08:18 2009
New Revision: 4014
Log:
use vector_fmul_window for the windowing
Modified:
wmapro/wma3dec.c
Modified: wmapro/wma3dec.c
==============================================================================
--- wmapro/wma3dec.c Tue Jan 27 21:57:50 2009 (r4013)
+++ wmapro/wma3dec.c Sat Jan 31 19:08:18 2009 (r4014)
@@ -1074,43 +1074,22 @@ static void wma_window(WMA3DecodeContext
for(i=0;i<s->channels_for_cur_subframe;i++){
int c = s->channel_indexes_for_cur_subframe[i];
int j = s->channel[c].cur_subframe;
- int x;
- // FIXME: use dsp.vector_fmul_window
float* start;
- float* end;
float* window;
int prev_block_len = s->channel[c].prev_block_len;
int block_len = s->channel[c].subframe_len[j];
- int len;
- int winlen;
+ int winlen = prev_block_len;
start = &s->channel[c].out[s->samples_per_frame/2 + s->channel[c].subframe_offset[j] - prev_block_len /2 ];
- end = &s->channel[c].out[s->samples_per_frame/2 + s->channel[c].subframe_offset[j] + block_len /2 - 1];
if(block_len <= prev_block_len){
start += (prev_block_len - block_len)/2;
- len = block_len/2;
winlen = block_len;
- }else{
- end -= (block_len - prev_block_len)/2;
- len = prev_block_len /2;
- winlen = prev_block_len;
}
-// float* rs = &s->channel[c].out[s->samples_per_frame/2 + s->channel[c].subframe_offset[i]];
-// printf("Dstart %i %i end %i win %i prev %i\n",s->frame_num+1, start - rs,end -rs,winlen,prev_block_len);
-
- // FIXME: untangle the windowing so DSP functions can be used
window = s->windows[av_log2(winlen)-BLOCK_MIN_BITS];
- for(x=0;x<len;x++){
- float ts = *start;
- float te = *end;
- float sin_v = window[x];
- float cos_v = window[winlen - x -1];
- *start = cos_v * ts - sin_v * te;
- *end = cos_v * te + sin_v * ts;
- ++start;
- --end;
- }
+
+ s->dsp.vector_fmul_window(start, start, start + winlen/2, window, 0, winlen/2);
+
s->channel[c].prev_block_len = block_len;
}
}
3
2
Author: vitor
Date: Tue Jan 27 21:57:50 2009
New Revision: 4013
Log:
Fix build when not using --enable-avfilter.
Patch by Cédric Schieli - cschieli <> gmail com
Modified:
libavfilter/diffs/02_ffmpeg_filters.diff
Modified: libavfilter/diffs/02_ffmpeg_filters.diff
==============================================================================
--- libavfilter/diffs/02_ffmpeg_filters.diff Tue Jan 27 06:34:33 2009 (r4012)
+++ libavfilter/diffs/02_ffmpeg_filters.diff Tue Jan 27 21:57:50 2009 (r4013)
@@ -250,15 +250,17 @@ Index: ffmpeg.c
if (ost->video_pad) {
av_picture_pad((AVPicture*)final_picture, (AVPicture *)padding_src,
-@@ -1190,6 +1383,7 @@
+@@ -1190,6 +1383,9 @@
static short *samples= NULL;
AVSubtitle subtitle, *subtitle_to_free;
int got_subtitle;
++#if CONFIG_AVFILTER
+ int loop;
++#endif
if(ist->next_pts == AV_NOPTS_VALUE)
ist->next_pts= ist->pts;
-@@ -1307,6 +1501,15 @@
+@@ -1307,6 +1503,15 @@
&buffer_to_free);
}
@@ -274,13 +276,15 @@ Index: ffmpeg.c
// preprocess audio (volume)
if (ist->st->codec->codec_type == CODEC_TYPE_AUDIO) {
if (audio_volume != 256) {
-@@ -1328,10 +1531,16 @@
+@@ -1328,10 +1533,18 @@
if (pts > now)
usleep(pts - now);
}
-
++#if CONFIG_AVFILTER
+ loop = ist->st->codec->codec_type != CODEC_TYPE_VIDEO ||
+ !ist->out_video_filter || avfilter_poll_frame(ist->out_video_filter->inputs[0]);
++#endif
/* if output time reached then transcode raw format,
encode packets and output them */
if (start_time == 0 || ist->pts >= start_time)
@@ -302,12 +306,14 @@ Index: ffmpeg.c
do_video_out(os, ost, ist, &picture, &frame_size);
if (vstats_filename && frame_size)
do_video_stats(os, ost, frame_size);
-@@ -1411,7 +1623,15 @@
+@@ -1411,7 +1627,17 @@
av_free_packet(&opkt);
}
}
++#if CONFIG_AVFILTER
+ loop = (ist->st->codec->codec_type == CODEC_TYPE_VIDEO) &&
+ ist->out_video_filter && avfilter_poll_frame(ist->out_video_filter->inputs[0]);
++#endif
}
+
+#if CONFIG_AVFILTER
1
0
27 Jan '09
Hi!
I just read about your efforts, including jpeg2000 in ffmpeg.
Sadly I could neither find a downloadable version, nor sth. like
'comming soon'..:-(
Would you tell me, how far things are?! Is the development going on?
Can I help in any way!?
All the best and keep on rokkin'!
Stefan Klein
--
Beste Grüße!
2
1
Author: kmalaussene
Date: Tue Jan 27 06:34:33 2009
New Revision: 4012
Log:
Fix decoding of pitch lag frac to match reference implementation.
Some of its value were widely out of bound.
Modified:
amr/amrnbfloatdec.c
Modified: amr/amrnbfloatdec.c
==============================================================================
--- amr/amrnbfloatdec.c Mon Jan 26 22:44:11 2009 (r4011)
+++ amr/amrnbfloatdec.c Tue Jan 27 06:34:33 2009 (r4012)
@@ -501,8 +501,9 @@ static void decode_pitch_lag_3(AMRContex
p->pitch_lag_frac = 0;
}else if(pitch_index < 12) {
// 1/3 fractional precision for [t1_temp-1 2/3, t1_temp+2/3]
- p->pitch_lag_int = ( ((pitch_index - 5)*10923)>>15 ) + t1_temp - 1;
+ p->pitch_lag_int = ( ((pitch_index - 5)*10923)>>15 ) - 1;
p->pitch_lag_frac = pitch_index - p->pitch_lag_int*3 - 9;
+ p->pitch_lag_int += t1_temp;
}else {
// integer only precision for [t1_temp+1, t1_temp+4]
p->pitch_lag_int = pitch_index + t1_temp - 11;
1
0
[soc]: r4011 - in libavfilter/diffs: 01_ffplay_filters.diff 02_ffmpeg_filters.diff
by stefano 26 Jan '09
by stefano 26 Jan '09
26 Jan '09
Author: stefano
Date: Mon Jan 26 22:44:11 2009
New Revision: 4011
Log:
Add checks for the validity of the parsed graph, fix crashes.
Modified:
libavfilter/diffs/01_ffplay_filters.diff
libavfilter/diffs/02_ffmpeg_filters.diff
Modified: libavfilter/diffs/01_ffplay_filters.diff
==============================================================================
--- libavfilter/diffs/01_ffplay_filters.diff Mon Jan 26 22:28:54 2009 (r4010)
+++ libavfilter/diffs/01_ffplay_filters.diff Mon Jan 26 22:44:11 2009 (r4011)
@@ -211,7 +211,7 @@ Index: ffplay.c
/* update the bitmap content */
SDL_UnlockYUVOverlay(vp->bmp);
-@@ -1335,54 +1406,264 @@
+@@ -1335,54 +1406,266 @@
return queue_picture(is, src_frame, pts);
}
@@ -435,6 +435,8 @@ Index: ffplay.c
+ }
+ avfilter_graph_add_filter(graph, filt_src);
+ avfilter_graph_add_filter(graph, filt_out);
++
++ if(avfilter_graph_check_validity(graph, NULL)) goto the_end;
+ if(avfilter_graph_config_formats(graph)) goto the_end;
+ if(avfilter_config_links(filt_out)) goto the_end;
+
@@ -507,7 +509,7 @@ Index: ffplay.c
av_free(frame);
return 0;
}
-@@ -2168,6 +2449,12 @@
+@@ -2168,6 +2451,12 @@
/* free all pictures */
for(i=0;i<VIDEO_PICTURE_QUEUE_SIZE; i++) {
vp = &is->pictq[i];
@@ -520,7 +522,7 @@ Index: ffplay.c
if (vp->bmp) {
SDL_FreeYUVOverlay(vp->bmp);
vp->bmp = NULL;
-@@ -2505,6 +2792,9 @@
+@@ -2505,6 +2794,9 @@
{ "ec", OPT_INT | HAS_ARG | OPT_EXPERT, {(void*)&error_concealment}, "set error concealment options", "bit_mask" },
{ "sync", HAS_ARG | OPT_FUNC2 | OPT_EXPERT, {(void*)opt_sync}, "set audio-video sync. type (type=audio/video/ext)", "type" },
{ "threads", HAS_ARG | OPT_FUNC2 | OPT_EXPERT, {(void*)opt_thread_count}, "thread count", "count" },
@@ -530,7 +532,7 @@ Index: ffplay.c
{ "default", OPT_FUNC2 | HAS_ARG | OPT_AUDIO | OPT_VIDEO | OPT_EXPERT, {(void*)opt_default}, "generic catch all option", "" },
{ NULL, },
};
-@@ -2553,7 +2843,9 @@
+@@ -2553,7 +2845,9 @@
avctx_opts[i]= avcodec_alloc_context2(i);
}
avformat_opts = av_alloc_format_context();
Modified: libavfilter/diffs/02_ffmpeg_filters.diff
==============================================================================
--- libavfilter/diffs/02_ffmpeg_filters.diff Mon Jan 26 22:28:54 2009 (r4010)
+++ libavfilter/diffs/02_ffmpeg_filters.diff Mon Jan 26 22:44:11 2009 (r4011)
@@ -40,7 +40,7 @@ Index: ffmpeg.c
} AVInputStream;
typedef struct AVInputFile {
-@@ -301,6 +318,174 @@
+@@ -301,6 +318,176 @@
static struct termios oldtty;
#endif
@@ -200,6 +200,8 @@ Index: ffmpeg.c
+ }
+
+ /* configure all the filter links */
++ if(avfilter_graph_check_validity(filt_graph_all, NULL))
++ return -1;
+ if(avfilter_graph_config_formats(filt_graph_all))
+ return -1;
+ if(avfilter_config_links(ist->out_video_filter))
@@ -215,7 +217,7 @@ Index: ffmpeg.c
static void term_exit(void)
{
#if HAVE_TERMIOS_H
-@@ -886,6 +1071,9 @@
+@@ -886,6 +1073,9 @@
if (nb_frames <= 0)
return;
@@ -225,7 +227,7 @@ Index: ffmpeg.c
if (ost->video_crop) {
if (av_picture_crop((AVPicture *)&picture_crop_temp, (AVPicture *)in_picture, dec->pix_fmt, ost->topBand, ost->leftBand) < 0) {
av_log(NULL, AV_LOG_ERROR, "error cropping picture\n");
-@@ -897,6 +1085,7 @@
+@@ -897,6 +1087,7 @@
} else {
formatted_picture = in_picture;
}
@@ -233,7 +235,7 @@ Index: ffmpeg.c
final_picture = formatted_picture;
padding_src = formatted_picture;
-@@ -914,12 +1103,14 @@
+@@ -914,12 +1105,14 @@
}
}
@@ -248,7 +250,7 @@ Index: ffmpeg.c
if (ost->video_pad) {
av_picture_pad((AVPicture*)final_picture, (AVPicture *)padding_src,
-@@ -1190,6 +1381,7 @@
+@@ -1190,6 +1383,7 @@
static short *samples= NULL;
AVSubtitle subtitle, *subtitle_to_free;
int got_subtitle;
@@ -256,7 +258,7 @@ Index: ffmpeg.c
if(ist->next_pts == AV_NOPTS_VALUE)
ist->next_pts= ist->pts;
-@@ -1307,6 +1499,15 @@
+@@ -1307,6 +1501,15 @@
&buffer_to_free);
}
@@ -272,7 +274,7 @@ Index: ffmpeg.c
// preprocess audio (volume)
if (ist->st->codec->codec_type == CODEC_TYPE_AUDIO) {
if (audio_volume != 256) {
-@@ -1328,10 +1529,16 @@
+@@ -1328,10 +1531,16 @@
if (pts > now)
usleep(pts - now);
}
@@ -290,7 +292,7 @@ Index: ffmpeg.c
for(i=0;i<nb_ostreams;i++) {
int frame_size;
-@@ -1354,6 +1561,9 @@
+@@ -1354,6 +1563,9 @@
do_audio_out(os, ost, ist, data_buf, data_size);
break;
case CODEC_TYPE_VIDEO:
@@ -300,7 +302,7 @@ Index: ffmpeg.c
do_video_out(os, ost, ist, &picture, &frame_size);
if (vstats_filename && frame_size)
do_video_stats(os, ost, frame_size);
-@@ -1411,7 +1621,15 @@
+@@ -1411,7 +1623,15 @@
av_free_packet(&opkt);
}
}
@@ -316,7 +318,7 @@ Index: ffmpeg.c
av_free(buffer_to_free);
/* XXX: allocate the subtitles in the codec ? */
if (subtitle_to_free) {
-@@ -1842,10 +2060,21 @@
+@@ -1842,10 +2062,21 @@
fprintf(stderr, "Cannot get resampling context\n");
av_exit(1);
}
@@ -338,7 +340,7 @@ Index: ffmpeg.c
break;
case CODEC_TYPE_SUBTITLE:
ost->encoding_needed = 1;
-@@ -3835,6 +4064,9 @@
+@@ -3835,6 +4066,9 @@
#if CONFIG_VHOOK
{ "vhook", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)add_frame_hooker}, "insert video processing module", "module" },
#endif
1
0
[soc]: r4010 - in libavfilter: allfilters.c checkout.sh diffs/01_ffplay_filters.diff diffs/02_ffmpeg_filters.diff
by stefano 26 Jan '09
by stefano 26 Jan '09
26 Jan '09
Author: stefano
Date: Mon Jan 26 22:28:54 2009
New Revision: 4010
Log:
Update to FFmpeg r16809.
Modified:
libavfilter/allfilters.c
libavfilter/checkout.sh
libavfilter/diffs/01_ffplay_filters.diff
libavfilter/diffs/02_ffmpeg_filters.diff
Modified: libavfilter/allfilters.c
==============================================================================
--- libavfilter/allfilters.c Mon Jan 26 20:20:40 2009 (r4009)
+++ libavfilter/allfilters.c Mon Jan 26 22:28:54 2009 (r4010)
@@ -24,7 +24,7 @@
#define REGISTER_FILTER(X,x,y) { \
extern AVFilter avfilter_##y##_##x ; \
- if(ENABLE_##X##_FILTER ) avfilter_register(&avfilter_##y##_##x ); }
+ if(CONFIG_##X##_FILTER ) avfilter_register(&avfilter_##y##_##x ); }
void avfilter_register_all(void)
{
Modified: libavfilter/checkout.sh
==============================================================================
--- libavfilter/checkout.sh Mon Jan 26 20:20:40 2009 (r4009)
+++ libavfilter/checkout.sh Mon Jan 26 22:28:54 2009 (r4010)
@@ -1,7 +1,7 @@
#! /bin/sh
echo "checking out pristine ffmpeg"
-svn checkout svn://svn.ffmpeg.org/ffmpeg/trunk/ ffmpeg -r16562
+svn checkout svn://svn.ffmpeg.org/ffmpeg/trunk/ ffmpeg -r16809
echo "patching ffmpeg"
for diff in $(ls $(pwd)/diffs/*.diff); do patch -d ffmpeg -p0 -i $diff; done
Modified: libavfilter/diffs/01_ffplay_filters.diff
==============================================================================
--- libavfilter/diffs/01_ffplay_filters.diff Mon Jan 26 20:20:40 2009 (r4009)
+++ libavfilter/diffs/01_ffplay_filters.diff Mon Jan 26 22:28:54 2009 (r4010)
@@ -1,12 +1,12 @@
Index: ffplay.c
===================================================================
---- ffplay.c (revision 16562)
+--- ffplay.c (revision 16809)
+++ ffplay.c (working copy)
@@ -29,6 +29,12 @@
#include "libavcodec/audioconvert.h"
#include "libavcodec/opt.h"
-+#if ENABLE_AVFILTER
++#if CONFIG_AVFILTER
+# include "libavfilter/avfilter.h"
+# include "libavfilter/avfiltergraph.h"
+# include "libavfilter/graphparser.h"
@@ -19,7 +19,7 @@ Index: ffplay.c
/* NOTE: the size must be big enough to compensate the hardware audio buffersize size */
#define SAMPLE_ARRAY_SIZE (2*65536)
-+#if !ENABLE_AVFILTER
++#if !CONFIG_AVFILTER
static int sws_flags = SWS_BICUBIC;
+#endif
@@ -32,7 +32,7 @@ Index: ffplay.c
+ enum PixelFormat pix_fmt;
int allocated;
+
-+#if ENABLE_AVFILTER
++#if CONFIG_AVFILTER
+ AVFilterPicRef *picref;
+#endif
} VideoPicture;
@@ -43,7 +43,7 @@ Index: ffplay.c
char filename[1024];
int width, height, xleft, ytop;
+
-+#if ENABLE_AVFILTER
++#if CONFIG_AVFILTER
+ AVFilterContext *out_video_filter; ///<the last filter in the video chain
+#endif
} VideoState;
@@ -53,7 +53,7 @@ Index: ffplay.c
static int error_recognition = FF_ER_CAREFUL;
static int error_concealment = 3;
static int decoder_reorder_pts= 0;
-+#if ENABLE_AVFILTER
++#if CONFIG_AVFILTER
+static char *vfilters = NULL;
+#endif
@@ -63,7 +63,7 @@ Index: ffplay.c
vp = &is->pictq[is->pictq_rindex];
if (vp->bmp) {
-+#if ENABLE_AVFILTER
++#if CONFIG_AVFILTER
+ if (vp->picref->pixel_aspect.num == 0)
+ aspect_ratio = 0;
+ else
@@ -89,7 +89,7 @@ Index: ffplay.c
} else if(!is_full_screen && screen_width){
w = screen_width;
h = screen_height;
-+#if ENABLE_AVFILTER
++#if CONFIG_AVFILTER
+ }else if (is->out_video_filter && is->out_video_filter->inputs[0]){
+ w = is->out_video_filter->inputs[0]->w;
+ h = is->out_video_filter->inputs[0]->h;
@@ -105,7 +105,7 @@ Index: ffplay.c
if (vp->bmp)
SDL_FreeYUVOverlay(vp->bmp);
-+#if ENABLE_AVFILTER
++#if CONFIG_AVFILTER
+ if (vp->picref)
+ avfilter_unref_pic(vp->picref);
+ vp->picref = NULL;
@@ -140,7 +140,7 @@ Index: ffplay.c
VideoPicture *vp;
int dst_pix_fmt;
AVPicture pict;
-+#if ENABLE_AVFILTER
++#if CONFIG_AVFILTER
+ AVPicture pict_src;
+#else
static struct SwsContext *img_convert_ctx;
@@ -153,7 +153,7 @@ Index: ffplay.c
/* alloc or resize hardware picture buffer */
if (!vp->bmp ||
-+#if ENABLE_AVFILTER
++#if CONFIG_AVFILTER
+ vp->width != is->out_video_filter->inputs[0]->w ||
+ vp->height != is->out_video_filter->inputs[0]->h) {
+#else
@@ -167,7 +167,7 @@ Index: ffplay.c
/* if the frame is not skipped, then display it */
if (vp->bmp) {
-+#if ENABLE_AVFILTER
++#if CONFIG_AVFILTER
+ if(vp->picref)
+ avfilter_unref_pic(vp->picref);
+ vp->picref = src_frame->opaque;
@@ -181,7 +181,7 @@ Index: ffplay.c
pict.linesize[1] = vp->bmp->pitches[2];
pict.linesize[2] = vp->bmp->pitches[1];
+
-+#if ENABLE_AVFILTER
++#if CONFIG_AVFILTER
+ pict_src.data[0] = src_frame->data[0];
+ pict_src.data[1] = src_frame->data[1];
+ pict_src.data[2] = src_frame->data[2];
@@ -253,7 +253,7 @@ Index: ffplay.c
+ return 0;
+}
+
-+#if ENABLE_AVFILTER
++#if CONFIG_AVFILTER
+typedef struct {
+ VideoState *is;
+ AVFrame *frame;
@@ -388,7 +388,7 @@ Index: ffplay.c
+ { .name = NULL }},
+ .outputs = (AVFilterPad[]) {{ .name = NULL }},
+};
-+#endif /* ENABLE_AVFILTER */
++#endif /* CONFIG_AVFILTER */
+
static int video_thread(void *arg)
{
@@ -401,7 +401,7 @@ Index: ffplay.c
+ int ret;
+
-+#if ENABLE_AVFILTER
++#if CONFIG_AVFILTER
+ AVFilterContext *filt_src = NULL, *filt_out = NULL;
+ AVFilterGraph *graph = av_mallocz(sizeof(AVFilterGraph));
+
@@ -443,7 +443,7 @@ Index: ffplay.c
+
for(;;) {
- while (is->paused && !is->videoq.abort_request) {
-+#if !ENABLE_AVFILTER
++#if !CONFIG_AVFILTER
+ AVPacket pkt;
+#endif
+ while (is->paused && !is->videoq.abort_request)
@@ -451,7 +451,7 @@ Index: ffplay.c
- }
- if (packet_queue_get(&is->videoq, pkt, 1) < 0)
- break;
-+#if ENABLE_AVFILTER
++#if CONFIG_AVFILTER
+ ret = get_filtered_video_frame(filt_out, frame, &pts_int);
+#else
+ ret = get_video_frame(is, frame, &pts_int, &pkt);
@@ -474,7 +474,7 @@ Index: ffplay.c
+ pts = pts_int;
+ pts /= AV_TIME_BASE;
+ ret = output_picture2(is, frame, pts);
-+#if !ENABLE_AVFILTER
++#if !CONFIG_AVFILTER
+ av_free_packet(&pkt);
+#endif
+ if (ret < 0)
@@ -501,17 +501,17 @@ Index: ffplay.c
stream_pause(cur_stream);
}
the_end:
-+ #if ENABLE_AVFILTER
++ #if CONFIG_AVFILTER
+ avfilter_destroy_graph(graph);
+ #endif
av_free(frame);
return 0;
}
-@@ -2170,6 +2451,12 @@
+@@ -2168,6 +2449,12 @@
/* free all pictures */
for(i=0;i<VIDEO_PICTURE_QUEUE_SIZE; i++) {
vp = &is->pictq[i];
-+#if ENABLE_AVFILTER
++#if CONFIG_AVFILTER
+ if (vp->picref) {
+ avfilter_unref_pic(vp->picref);
+ vp->picref = NULL;
@@ -520,21 +520,21 @@ Index: ffplay.c
if (vp->bmp) {
SDL_FreeYUVOverlay(vp->bmp);
vp->bmp = NULL;
-@@ -2507,6 +2794,9 @@
+@@ -2505,6 +2792,9 @@
{ "ec", OPT_INT | HAS_ARG | OPT_EXPERT, {(void*)&error_concealment}, "set error concealment options", "bit_mask" },
{ "sync", HAS_ARG | OPT_FUNC2 | OPT_EXPERT, {(void*)opt_sync}, "set audio-video sync. type (type=audio/video/ext)", "type" },
{ "threads", HAS_ARG | OPT_FUNC2 | OPT_EXPERT, {(void*)opt_thread_count}, "thread count", "count" },
-+#if ENABLE_AVFILTER
++#if CONFIG_AVFILTER
+ { "vfilters", OPT_STRING | HAS_ARG, {(void*)&vfilters}, "video filters", "filter list" },
+#endif
{ "default", OPT_FUNC2 | HAS_ARG | OPT_AUDIO | OPT_VIDEO | OPT_EXPERT, {(void*)opt_default}, "generic catch all option", "" },
{ NULL, },
};
-@@ -2555,7 +2845,9 @@
+@@ -2553,7 +2843,9 @@
avctx_opts[i]= avcodec_alloc_context2(i);
}
avformat_opts = av_alloc_format_context();
-+#if !ENABLE_AVFILTER
++#if !CONFIG_AVFILTER
sws_opts = sws_getContext(16,16,0, 16,16,0, sws_flags, NULL,NULL,NULL);
+#endif
Modified: libavfilter/diffs/02_ffmpeg_filters.diff
==============================================================================
--- libavfilter/diffs/02_ffmpeg_filters.diff Mon Jan 26 20:20:40 2009 (r4009)
+++ libavfilter/diffs/02_ffmpeg_filters.diff Mon Jan 26 22:28:54 2009 (r4010)
@@ -1,26 +1,26 @@
Index: ffmpeg.c
===================================================================
---- ffmpeg.c (revision 16562)
+--- ffmpeg.c (revision 16809)
+++ ffmpeg.c (working copy)
@@ -41,6 +41,13 @@
#include "libavutil/avstring.h"
#include "libavformat/os_support.h"
-+#if ENABLE_AVFILTER
++#if CONFIG_AVFILTER
+# include "libavfilter/avfilter.h"
+# include "libavfilter/avfiltergraph.h"
+# include "libavfilter/graphparser.h"
+# include "libavfilter/vsrc_buffer.h"
+#endif
+
- #ifdef HAVE_SYS_RESOURCE_H
+ #if HAVE_SYS_RESOURCE_H
#include <sys/types.h>
#include <sys/resource.h>
@@ -148,6 +155,9 @@
static int loop_input = 0;
static int loop_output = AVFMT_NOOUTPUTLOOP;
static int qp_hist = 0;
-+#if ENABLE_AVFILTER
++#if CONFIG_AVFILTER
+static char *vfilters = NULL;
+#endif
@@ -30,7 +30,7 @@ Index: ffmpeg.c
is not defined */
int64_t pts; /* current pts */
int is_start; /* is 1 at the start and after a discontinuity */
-+#if ENABLE_AVFILTER
++#if CONFIG_AVFILTER
+ AVFilterContext *out_video_filter;
+ AVFilterContext *input_video_filter;
+ AVFrame *filter_frame;
@@ -44,7 +44,7 @@ Index: ffmpeg.c
static struct termios oldtty;
#endif
-+#if ENABLE_AVFILTER
++#if CONFIG_AVFILTER
+typedef struct {
+ int pix_fmt;
+} FilterOutPriv;
@@ -210,16 +210,16 @@ Index: ffmpeg.c
+
+ return 0;
+}
-+#endif /* ENABLE_AVFILTER */
++#endif /* CONFIG_AVFILTER */
+
static void term_exit(void)
{
- #ifdef HAVE_TERMIOS_H
+ #if HAVE_TERMIOS_H
@@ -886,6 +1071,9 @@
if (nb_frames <= 0)
return;
-+#if ENABLE_AVFILTER
++#if CONFIG_AVFILTER
+ formatted_picture = in_picture;
+#else
if (ost->video_crop) {
@@ -237,7 +237,7 @@ Index: ffmpeg.c
}
}
-+#if !ENABLE_AVFILTER
++#if !CONFIG_AVFILTER
if (ost->video_resample) {
padding_src = NULL;
final_picture = &ost->pict_tmp;
@@ -260,7 +260,7 @@ Index: ffmpeg.c
&buffer_to_free);
}
-+#if ENABLE_AVFILTER
++#if CONFIG_AVFILTER
+ if (ist->st->codec->codec_type == CODEC_TYPE_VIDEO && ist->input_video_filter) {
+ // add it to be filtered
+ av_vsrc_buffer_add_frame(ist->input_video_filter, &picture,
@@ -282,7 +282,7 @@ Index: ffmpeg.c
/* if output time reached then transcode raw format,
encode packets and output them */
if (start_time == 0 || ist->pts >= start_time)
-+#if ENABLE_AVFILTER
++#if CONFIG_AVFILTER
+ while(loop) {
+ if (ist->st->codec->codec_type == CODEC_TYPE_VIDEO && ist->out_video_filter)
+ get_filtered_video_pic(ist->out_video_filter, &ist->picref, &picture, &ist->pts);
@@ -294,7 +294,7 @@ Index: ffmpeg.c
do_audio_out(os, ost, ist, data_buf, data_size);
break;
case CODEC_TYPE_VIDEO:
-+#if ENABLE_AVFILTER
++#if CONFIG_AVFILTER
+ ost->st->codec->sample_aspect_ratio = ist->picref->pixel_aspect;
+#endif
do_video_out(os, ost, ist, &picture, &frame_size);
@@ -308,7 +308,7 @@ Index: ffmpeg.c
+ ist->out_video_filter && avfilter_poll_frame(ist->out_video_filter->inputs[0]);
}
+
-+#if ENABLE_AVFILTER
++#if CONFIG_AVFILTER
+ if(ist->picref)
+ avfilter_unref_pic(ist->picref);
+ }
@@ -316,11 +316,11 @@ Index: ffmpeg.c
av_free(buffer_to_free);
/* XXX: allocate the subtitles in the codec ? */
if (subtitle_to_free) {
-@@ -1840,10 +2058,21 @@
+@@ -1842,10 +2060,21 @@
fprintf(stderr, "Cannot get resampling context\n");
av_exit(1);
}
-+#if ENABLE_AVFILTER
++#if CONFIG_AVFILTER
+ ost->resample_height = icodec->height;
+#else
ost->resample_height = icodec->height - (frame_topBand + frame_bottomBand);
@@ -329,7 +329,7 @@ Index: ffmpeg.c
ost->encoding_needed = 1;
ist->decoding_needed = 1;
+
-+#if ENABLE_AVFILTER
++#if CONFIG_AVFILTER
+ if (configure_filters(ist, ost)) {
+ fprintf(stderr, "Error opening filters!\n");
+ exit(1);
@@ -338,11 +338,11 @@ Index: ffmpeg.c
break;
case CODEC_TYPE_SUBTITLE:
ost->encoding_needed = 1;
-@@ -3831,6 +4060,9 @@
- #ifdef CONFIG_VHOOK
+@@ -3835,6 +4064,9 @@
+ #if CONFIG_VHOOK
{ "vhook", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)add_frame_hooker}, "insert video processing module", "module" },
#endif
-+#if ENABLE_AVFILTER
++#if CONFIG_AVFILTER
+ { "vfilters", OPT_STRING | HAS_ARG, {(void*)&vfilters}, "video filters", "filter list" },
+#endif
{ "intra_matrix", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)opt_intra_matrix}, "specify intra matrix coeffs", "matrix" },
1
0
Author: vitor
Date: Mon Jan 26 20:20:40 2009
New Revision: 4009
Log:
Fix "-vcodec copy" when using a libavfilter patched ffmpeg.
Patch by Cédric Schieli cschieli ! gmail ! com
Modified:
libavfilter/diffs/02_ffmpeg_filters.diff
Modified: libavfilter/diffs/02_ffmpeg_filters.diff
==============================================================================
--- libavfilter/diffs/02_ffmpeg_filters.diff Mon Jan 26 15:07:28 2009 (r4008)
+++ libavfilter/diffs/02_ffmpeg_filters.diff Mon Jan 26 20:20:40 2009 (r4009)
@@ -261,7 +261,7 @@ Index: ffmpeg.c
}
+#if ENABLE_AVFILTER
-+ if (ist->st->codec->codec_type == CODEC_TYPE_VIDEO) {
++ if (ist->st->codec->codec_type == CODEC_TYPE_VIDEO && ist->input_video_filter) {
+ // add it to be filtered
+ av_vsrc_buffer_add_frame(ist->input_video_filter, &picture,
+ ist->pts,
@@ -278,13 +278,13 @@ Index: ffmpeg.c
}
-
+ loop = ist->st->codec->codec_type != CODEC_TYPE_VIDEO ||
-+ avfilter_poll_frame(ist->out_video_filter->inputs[0]);
++ !ist->out_video_filter || avfilter_poll_frame(ist->out_video_filter->inputs[0]);
/* if output time reached then transcode raw format,
encode packets and output them */
if (start_time == 0 || ist->pts >= start_time)
+#if ENABLE_AVFILTER
+ while(loop) {
-+ if (ist->st->codec->codec_type == CODEC_TYPE_VIDEO)
++ if (ist->st->codec->codec_type == CODEC_TYPE_VIDEO && ist->out_video_filter)
+ get_filtered_video_pic(ist->out_video_filter, &ist->picref, &picture, &ist->pts);
+#endif
for(i=0;i<nb_ostreams;i++) {
@@ -305,7 +305,7 @@ Index: ffmpeg.c
}
}
+ loop = (ist->st->codec->codec_type == CODEC_TYPE_VIDEO) &&
-+ avfilter_poll_frame(ist->out_video_filter->inputs[0]);
++ ist->out_video_filter && avfilter_poll_frame(ist->out_video_filter->inputs[0]);
}
+
+#if ENABLE_AVFILTER
1
0
26 Jan '09
Author: kostya
Date: Mon Jan 26 15:07:28 2009
New Revision: 4008
Log:
Split out from AAC encoder core file all functions with heuristics for selecting
scalefactors, band codebooks, etc.
Added:
aacenc/aaccoder.c
- copied, changed from r4006, aacenc/aacenc.c
aacenc/aacenc.h
- copied, changed from r4006, aacenc/aacenc.c
Modified:
aacenc/aac_enc.patch
aacenc/aacenc.c
Modified: aacenc/aac_enc.patch
==============================================================================
--- aacenc/aac_enc.patch Mon Jan 26 15:00:57 2009 (r4007)
+++ aacenc/aac_enc.patch Mon Jan 26 15:07:28 2009 (r4008)
@@ -2,14 +2,14 @@ diff --git a/libavcodec/Makefile b/libav
index d4f6d1c..0ed9057 100644
--- a/libavcodec/Makefile
+++ b/libavcodec/Makefile
-@@ -25,6 +25,7 @@
-
- OBJS-$(CONFIG_ENCODERS) += faandct.o jfdctfst.o jfdctint.o
+@@ -33,6 +33,7 @@
-+OBJS-$(CONFIG_AAC_ENCODER) += aacenc.o aacpsy.o aactab.o psymodel.o iirfilter.o mdct.o fft.o mpeg4audio.o
- OBJS-$(CONFIG_AAC_DECODER) += aac.o aactab.o mdct.o fft.o
- OBJS-$(CONFIG_AASC_DECODER) += aasc.o
- OBJS-$(CONFIG_AC3_DECODER) += ac3dec.o ac3tab.o ac3dec_data.o ac3.o mdct.o fft.o
+ # decoders/encoders
+ OBJS-$(CONFIG_AAC_DECODER) += aac.o aactab.o
++OBJS-$(CONFIG_AAC_ENCODER) += aacenc.o aaccoder.o aacpsy.o aactab.o psymodel.o iirfilter.o mdct.o fft.o mpeg4audio.o
+ OBJS-$(CONFIG_AASC_DECODER) += aasc.o msrledec.o
+ OBJS-$(CONFIG_AC3_DECODER) += eac3dec.o ac3dec.o ac3tab.o ac3dec_data.o ac3.o
+ OBJS-$(CONFIG_AC3_ENCODER) += ac3enc.o ac3tab.o ac3.o
diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c
index 33a4242..6871496 100644
--- a/libavcodec/allcodecs.c
Copied and modified: aacenc/aaccoder.c (from r4006, aacenc/aacenc.c)
==============================================================================
--- aacenc/aacenc.c Mon Jan 26 14:37:36 2009 (r4006, copy source)
+++ aacenc/aaccoder.c Mon Jan 26 15:07:28 2009 (r4008)
@@ -1,6 +1,6 @@
/*
- * AAC encoder
- * Copyright (C) 2008 Konstantin Shishkov
+ * AAC coefficients encoder
+ * Copyright (C) 2008-2009 Konstantin Shishkov
*
* This file is part of FFmpeg.
*
@@ -20,106 +20,16 @@
*/
/**
- * @file aacenc.c
- * AAC encoder
+ * @file aaccoder.c
+ * AAC coefficients encoder
*/
-/***********************************
- * TODOs:
- * speedup quantizer selection
- * add sane pulse detection
- * add temporal noise shaping
- ***********************************/
-
#include "avcodec.h"
#include "bitstream.h"
-#include "dsputil.h"
-#include "mpeg4audio.h"
-
#include "aac.h"
+#include "aacenc.h"
#include "aactab.h"
-#include "psymodel.h"
-
-static const uint8_t swb_size_1024_96[] = {
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 8, 8, 8, 8,
- 12, 12, 12, 12, 12, 16, 16, 24, 28, 36, 44,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64
-};
-
-static const uint8_t swb_size_1024_64[] = {
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 8, 8, 8,
- 12, 12, 12, 16, 16, 16, 20, 24, 24, 28, 36,
- 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40
-};
-
-static const uint8_t swb_size_1024_48[] = {
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 8, 8, 8, 8, 8, 8,
- 12, 12, 12, 12, 16, 16, 20, 20, 24, 24, 28, 28,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 96
-};
-
-static const uint8_t swb_size_1024_32[] = {
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 8, 8, 8, 8, 8, 8,
- 12, 12, 12, 12, 16, 16, 20, 20, 24, 24, 28, 28,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32
-};
-
-static const uint8_t swb_size_1024_24[] = {
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 12, 12, 12, 12, 16, 16, 16, 20, 20, 24, 24, 28, 28,
- 32, 36, 36, 40, 44, 48, 52, 52, 64, 64, 64, 64, 64
-};
-
-static const uint8_t swb_size_1024_16[] = {
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 16, 16, 16, 16, 20, 20, 20, 24, 24, 28, 28,
- 32, 36, 40, 40, 44, 48, 52, 56, 60, 64, 64, 64
-};
-
-static const uint8_t swb_size_1024_8[] = {
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- 16, 16, 16, 16, 16, 16, 16, 20, 20, 20, 20, 24, 24, 24, 28, 28,
- 32, 36, 36, 40, 44, 48, 52, 56, 60, 64, 80
-};
-
-static const uint8_t *swb_size_1024[] = {
- swb_size_1024_96, swb_size_1024_96, swb_size_1024_64,
- swb_size_1024_48, swb_size_1024_48, swb_size_1024_32,
- swb_size_1024_24, swb_size_1024_24, swb_size_1024_16,
- swb_size_1024_16, swb_size_1024_16, swb_size_1024_8
-};
-
-static const uint8_t swb_size_128_96[] = {
- 4, 4, 4, 4, 4, 4, 8, 8, 8, 16, 28, 36
-};
-
-static const uint8_t swb_size_128_48[] = {
- 4, 4, 4, 4, 4, 8, 8, 8, 12, 12, 12, 16, 16, 16
-};
-
-static const uint8_t swb_size_128_24[] = {
- 4, 4, 4, 4, 4, 4, 4, 8, 8, 8, 12, 12, 16, 16, 20
-};
-
-static const uint8_t swb_size_128_16[] = {
- 4, 4, 4, 4, 4, 4, 4, 4, 8, 8, 12, 12, 16, 20, 20
-};
-
-static const uint8_t swb_size_128_8[] = {
- 4, 4, 4, 4, 4, 4, 4, 8, 8, 8, 8, 12, 16, 20, 20
-};
-
-static const uint8_t *swb_size_128[] = {
- /* the last entry on the following row is swb_size_128_64 but is a
- duplicate of swb_size_128_96 */
- swb_size_128_96, swb_size_128_96, swb_size_128_96,
- swb_size_128_48, swb_size_128_48, swb_size_128_48,
- swb_size_128_24, swb_size_128_24, swb_size_128_16,
- swb_size_128_16, swb_size_128_16, swb_size_128_8
-};
-
/** bits needed to code codebook run value for long windows */
static const uint8_t run_value_bits_long[64] = {
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
@@ -137,199 +47,6 @@ static const uint8_t* run_value_bits[2]
run_value_bits_long, run_value_bits_short
};
-/** default channel configurations */
-static const uint8_t aac_chan_configs[6][5] = {
- {1, TYPE_SCE}, // 1 channel - single channel element
- {1, TYPE_CPE}, // 2 channels - channel pair
- {2, TYPE_SCE, TYPE_CPE}, // 3 channels - center + stereo
- {3, TYPE_SCE, TYPE_CPE, TYPE_SCE}, // 4 channels - front center + stereo + back center
- {3, TYPE_SCE, TYPE_CPE, TYPE_CPE}, // 5 channels - front center + stereo + back stereo
- {4, TYPE_SCE, TYPE_CPE, TYPE_CPE, TYPE_LFE}, // 6 channels - front center + stereo + back stereo + LFE
-};
-
-/**
- * AAC encoder context
- */
-typedef struct {
- PutBitContext pb;
- MDCTContext mdct1024; ///< long (1024 samples) frame transform context
- MDCTContext mdct128; ///< short (128 samples) frame transform context
- DSPContext dsp;
- DECLARE_ALIGNED_16(FFTSample, output[2048]); ///< temporary buffer for MDCT input coefficients
- int16_t* samples; ///< saved preprocessed input
-
- int samplerate_index; ///< MPEG-4 samplerate index
-
- ChannelElement *cpe; ///< channel elements
- FFPsyContext psy;
- struct FFPsyPreprocessContext* psypp;
- int cur_channel;
- int last_frame;
- float lambda;
-} AACEncContext;
-
-/**
- * Make AAC audio config object.
- * @see 1.6.2.1 "Syntax - AudioSpecificConfig"
- */
-static void put_audio_specific_config(AVCodecContext *avctx)
-{
- PutBitContext pb;
- AACEncContext *s = avctx->priv_data;
-
- init_put_bits(&pb, avctx->extradata, avctx->extradata_size*8);
- put_bits(&pb, 5, 2); //object type - AAC-LC
- put_bits(&pb, 4, s->samplerate_index); //sample rate index
- put_bits(&pb, 4, avctx->channels);
- //GASpecificConfig
- put_bits(&pb, 1, 0); //frame length - 1024 samples
- put_bits(&pb, 1, 0); //does not depend on core coder
- put_bits(&pb, 1, 0); //is not extension
- flush_put_bits(&pb);
-}
-
-static av_cold int aac_encode_init(AVCodecContext *avctx)
-{
- AACEncContext *s = avctx->priv_data;
- int i;
- const uint8_t *sizes[2];
- int lengths[2];
-
- avctx->frame_size = 1024;
-
- for(i = 0; i < 16; i++)
- if(avctx->sample_rate == ff_mpeg4audio_sample_rates[i])
- break;
- if(i == 16){
- av_log(avctx, AV_LOG_ERROR, "Unsupported sample rate %d\n", avctx->sample_rate);
- return -1;
- }
- if(avctx->channels > 6){
- av_log(avctx, AV_LOG_ERROR, "Unsupported number of channels: %d\n", avctx->channels);
- return -1;
- }
- s->samplerate_index = i;
-
- dsputil_init(&s->dsp, avctx);
- ff_mdct_init(&s->mdct1024, 11, 0);
- ff_mdct_init(&s->mdct128, 8, 0);
- // window init
- ff_kbd_window_init(ff_aac_kbd_long_1024, 4.0, 1024);
- ff_kbd_window_init(ff_aac_kbd_short_128, 6.0, 128);
- ff_sine_window_init(ff_sine_1024, 1024);
- ff_sine_window_init(ff_sine_128, 128);
-
- s->samples = av_malloc(2 * 1024 * avctx->channels * sizeof(s->samples[0]));
- s->cpe = av_mallocz(sizeof(ChannelElement) * aac_chan_configs[avctx->channels-1][0]);
- avctx->extradata = av_malloc(2);
- avctx->extradata_size = 2;
- put_audio_specific_config(avctx);
-
- sizes[0] = swb_size_1024[i];
- sizes[1] = swb_size_128[i];
- lengths[0] = ff_aac_num_swb_1024[i];
- lengths[1] = ff_aac_num_swb_128[i];
- ff_psy_init(&s->psy, avctx, 2, sizes, lengths);
- s->psypp = ff_psy_preprocess_init(avctx);
-
-#if !CONFIG_HARDCODED_TABLES
- for (i = 0; i < 316; i++)
- ff_aac_pow2sf_tab[i] = pow(2, (i - 200)/4.);
-#endif /* CONFIG_HARDCODED_TABLES */
-
- return 0;
-}
-
-static void apply_window_and_mdct(AVCodecContext *avctx, AACEncContext *s,
- SingleChannelElement *sce, short *audio, int channel)
-{
- int i, j, k;
- const float * lwindow = sce->ics.use_kb_window[0] ? ff_aac_kbd_long_1024 : ff_sine_1024;
- const float * swindow = sce->ics.use_kb_window[0] ? ff_aac_kbd_short_128 : ff_sine_128;
- const float * pwindow = sce->ics.use_kb_window[1] ? ff_aac_kbd_short_128 : ff_sine_128;
-
- if (sce->ics.window_sequence[0] != EIGHT_SHORT_SEQUENCE) {
- memcpy(s->output, sce->saved, sizeof(float)*1024);
- if(sce->ics.window_sequence[0] == LONG_STOP_SEQUENCE){
- memset(s->output, 0, sizeof(s->output[0]) * 448);
- for(i = 448; i < 576; i++)
- s->output[i] = sce->saved[i] * pwindow[i - 448];
- for(i = 576; i < 704; i++)
- s->output[i] = sce->saved[i];
- }
- if(sce->ics.window_sequence[0] != LONG_START_SEQUENCE){
- j = channel;
- for (i = 0; i < 1024; i++, j += avctx->channels){
- s->output[i+1024] = audio[j] * lwindow[1024 - i - 1];
- sce->saved[i] = audio[j] * lwindow[i];
- }
- }else{
- j = channel;
- for(i = 0; i < 448; i++, j += avctx->channels)
- s->output[i+1024] = audio[j];
- for(i = 448; i < 576; i++, j += avctx->channels)
- s->output[i+1024] = audio[j] * swindow[576 - i - 1];
- memset(s->output+1024+576, 0, sizeof(s->output[0]) * 448);
- j = channel;
- for(i = 0; i < 1024; i++, j += avctx->channels)
- sce->saved[i] = audio[j];
- }
- ff_mdct_calc(&s->mdct1024, sce->coeffs, s->output);
- }else{
- j = channel;
- for (k = 0; k < 1024; k += 128) {
- for(i = 448 + k; i < 448 + k + 256; i++)
- s->output[i - 448 - k] = (i < 1024)
- ? sce->saved[i]
- : audio[channel + (i-1024)*avctx->channels];
- s->dsp.vector_fmul (s->output, k ? swindow : pwindow, 128);
- s->dsp.vector_fmul_reverse(s->output+128, s->output+128, swindow, 128);
- ff_mdct_calc(&s->mdct128, sce->coeffs + k, s->output);
- }
- j = channel;
- for(i = 0; i < 1024; i++, j += avctx->channels)
- sce->saved[i] = audio[j];
- }
-}
-
-/**
- * Encode ics_info element.
- * @see Table 4.6 (syntax of ics_info)
- */
-static void put_ics_info(AACEncContext *s, IndividualChannelStream *info)
-{
- int w;
-
- put_bits(&s->pb, 1, 0); // ics_reserved bit
- put_bits(&s->pb, 2, info->window_sequence[0]);
- put_bits(&s->pb, 1, info->use_kb_window[0]);
- if(info->window_sequence[0] != EIGHT_SHORT_SEQUENCE){
- put_bits(&s->pb, 6, info->max_sfb);
- put_bits(&s->pb, 1, 0); // no prediction
- }else{
- put_bits(&s->pb, 4, info->max_sfb);
- for(w = 1; w < 8; w++){
- put_bits(&s->pb, 1, !info->group_len[w]);
- }
- }
-}
-
-/**
- * Encode MS data.
- * @see 4.6.8.1 "Joint Coding - M/S Stereo"
- */
-static void encode_ms_info(PutBitContext *pb, ChannelElement *cpe)
-{
- int i, w;
-
- put_bits(pb, 2, cpe->ms_mode);
- if(cpe->ms_mode == 1){
- for(w = 0; w < cpe->ch[0].ics.num_windows; w += cpe->ch[0].ics.group_len[w]){
- for(i = 0; i < cpe->ch[0].ics.max_sfb; i++)
- put_bits(pb, 1, cpe->ms_mask[w*16 + i]);
- }
- }
-}
/**
* Quantize one coefficient.
@@ -381,13 +98,13 @@ static float quantize_band_cost(const fl
float mincost;
int minidx = 0;
int minbits = 0;
- int quants[4][2], realquants[4][2];
+ int quants[4][2];
mincost = 0.0f;
for(j = 0; j < dim; j++){
- realquants[j][0] = quant2(in[i+j], Q);
- realquants[j][1] = quant (in[i+j], Q);
+ quants[j][0] = quant2(in[i+j], Q);
+ quants[j][1] = quant (in[i+j], Q);
for(k = 0; k < 2; k++){
- quants[j][k] = FFMIN(realquants[j][k], maxval);
+ quants[j][k] = FFMIN(quants[j][k], maxval);
if(!IS_CODEBOOK_UNSIGNED(cb) && in[i+j] < 0.0f)
quants[j][k] = -quants[j][k];
}
@@ -428,7 +145,7 @@ static float quantize_band_cost(const fl
di = t - 165140.0f;
curbits += 21;
}else{
- int c = realquants[k];
+ int c = quant(t, Q);
di = t - c*cbrt(c)*IQ;
curbits += av_log2(c)*2 - 4 + 1;
}
@@ -664,7 +381,7 @@ static void quantize_and_encode_band(Put
const float IQ = ff_aac_pow2sf_tab[200 - scale_idx + SCALE_ONE_POS - SCALE_DIV_512];
int i, j, k;
const int dim = cb < FIRST_PAIR_BT ? 4 : 2;
-
+//START_TIMER
if(!cb)
return;
@@ -731,6 +448,7 @@ static void quantize_and_encode_band(Put
}
}
}
+//STOP_TIMER("quantize_and_encode")
}
#endif
@@ -844,65 +562,6 @@ static void encode_window_bands_info(AAC
}
}
-/**
- * Produce integer coefficients from scalefactors provided by the model.
- */
-static void adjust_frame_information(AACEncContext *apc, ChannelElement *cpe, int chans)
-{
- int i, w, w2, g, ch;
- int start, sum, maxsfb, cmaxsfb;
-
- for(ch = 0; ch < chans; ch++){
- IndividualChannelStream *ics = &cpe->ch[ch].ics;
- start = 0;
- maxsfb = 0;
- cpe->ch[ch].pulse.num_pulse = 0;
- for(w = 0; w < ics->num_windows*16; w += 16){
- for(g = 0; g < ics->num_swb; g++){
- sum = 0;
- //apply M/S
- if(!ch && cpe->ms_mask[w + g]){
- for(i = 0; i < ics->swb_sizes[g]; i++){
- cpe->ch[0].coeffs[start+i] = (cpe->ch[0].coeffs[start+i] + cpe->ch[1].coeffs[start+i]) / 2.0;
- cpe->ch[1].coeffs[start+i] = cpe->ch[0].coeffs[start+i] - cpe->ch[1].coeffs[start+i];
- }
- }
- start += ics->swb_sizes[g];
- }
- for(cmaxsfb = ics->num_swb; cmaxsfb > 0 && cpe->ch[ch].zeroes[w+cmaxsfb-1]; cmaxsfb--);
- maxsfb = FFMAX(maxsfb, cmaxsfb);
- }
- ics->max_sfb = maxsfb;
-
- //adjust zero bands for window groups
- for(w = 0; w < ics->num_windows; w += ics->group_len[w]){
- for(g = 0; g < ics->max_sfb; g++){
- i = 1;
- for(w2 = w; w2 < w + ics->group_len[w]; w2++){
- if(!cpe->ch[ch].zeroes[w2*16 + g]){
- i = 0;
- break;
- }
- }
- cpe->ch[ch].zeroes[w*16 + g] = i;
- }
- }
- }
-
- if(chans > 1 && cpe->common_window){
- IndividualChannelStream *ics0 = &cpe->ch[0].ics;
- IndividualChannelStream *ics1 = &cpe->ch[1].ics;
- int msc = 0;
- ics0->max_sfb = FFMAX(ics0->max_sfb, ics1->max_sfb);
- ics1->max_sfb = ics0->max_sfb;
- for(w = 0; w < ics0->num_windows*16; w += 16)
- for(i = 0; i < ics0->max_sfb; i++)
- if(cpe->ms_mask[w+i]) msc++;
- if(msc == 0 || ics0->max_sfb == 0) cpe->ms_mode = 0;
- else cpe->ms_mode = msc < ics0->max_sfb ? 1 : 2;
- }
-}
-
typedef struct TrellisPath {
float cost;
int prev;
@@ -910,7 +569,8 @@ typedef struct TrellisPath {
int max_val;
} TrellisPath;
-static void search_for_quantizers_anmr(AACEncContext *s, SingleChannelElement *sce, const float lambda)
+static void search_for_quantizers_anmr(AVCodecContext *avctx, AACEncContext *s,
+ SingleChannelElement *sce, const float lambda)
{
int q, w, w2, g, start = 0;
int i;
@@ -1186,7 +846,8 @@ static void search_for_quantizers_twoloo
}while(fflag && its < 10);
}
-static void search_for_quantizers_faac(AACEncContext *s, SingleChannelElement *sce, const float lambda)
+static void search_for_quantizers_faac(AVCodecContext *avctx, AACEncContext *s,
+ SingleChannelElement *sce, const float lambda)
{
int start = 0, i, w, w2, g;
float uplim[128], maxq[128];
@@ -1351,7 +1012,8 @@ static void search_for_quantizers_faac(A
}
}
-static void search_for_quantizers_fast(AACEncContext *s, SingleChannelElement *sce)
+static void search_for_quantizers_fast(AVCodecContext *avctx, AACEncContext *s,
+ SingleChannelElement *sce, const float lambda)
{
int start = 0, i, w, w2, g;
int minq = 255;
@@ -1374,7 +1036,7 @@ static void search_for_quantizers_fast(A
}
}
for(i = 0; i < 128; i++){
- sce->sf_idx[i] = av_clip(sce->sf_idx[i], minq, minq + SCALE_MAX_DIFF - 1);
+ sce->sf_idx[i] = 140;//av_clip(sce->sf_idx[i], minq, minq + SCALE_MAX_DIFF - 1);
}
//set the same quantizers inside window groups
for(w = 0; w < sce->ics.num_windows; w += sce->ics.group_len[w])
@@ -1383,15 +1045,6 @@ static void search_for_quantizers_fast(A
sce->sf_idx[(w+w2)*16+g] = sce->sf_idx[w*16+g];
}
-static void search_for_quantizers(AVCodecContext *avctx, AACEncContext *s,
- SingleChannelElement *sce)
-{
- search_for_quantizers_anmr(s, sce, s->lambda);
-// search_for_quantizers_twoloop(avctx, s, sce, s->lambda);
-// search_for_quantizers_faac(s, sce, av_clipf(s->lambda * 2e8, 50.0f, 300.0f));
-// search_for_quantizers_fast(s, sce);
-}
-
static void search_for_ms(AACEncContext *s, ChannelElement *cpe, const float lambda)
{
int start = 0, i, w, w2, g;
@@ -1443,246 +1096,29 @@ static void search_for_ms(AACEncContext
}
}
-/**
- * Encode scalefactor band coding type.
- */
-static void encode_band_info(AACEncContext *s, SingleChannelElement *sce)
-{
- int w;
-
- for(w = 0; w < sce->ics.num_windows; w += sce->ics.group_len[w]){
- encode_window_bands_info(s, sce, w, sce->ics.group_len[w]);
- }
-}
-
-/**
- * Encode scalefactors.
- */
-static void encode_scale_factors(AVCodecContext *avctx, AACEncContext *s, SingleChannelElement *sce)
-{
- int off = sce->sf_idx[0], diff;
- int i, w;
-
- for(w = 0; w < sce->ics.num_windows; w += sce->ics.group_len[w]){
- for(i = 0; i < sce->ics.max_sfb; i++){
- if(!sce->zeroes[w*16 + i]){
- diff = sce->sf_idx[w*16 + i] - off + SCALE_DIFF_ZERO;
- if(diff < 0 || diff > 120) av_log(avctx, AV_LOG_ERROR, "Scalefactor difference is too big to be coded\n");
- off = sce->sf_idx[w*16 + i];
- put_bits(&s->pb, ff_aac_scalefactor_bits[diff], ff_aac_scalefactor_code[diff]);
- }
- }
- }
-}
-
-/**
- * Encode pulse data.
- */
-static void encode_pulses(AACEncContext *s, Pulse *pulse)
-{
- int i;
-
- put_bits(&s->pb, 1, !!pulse->num_pulse);
- if(!pulse->num_pulse) return;
-
- put_bits(&s->pb, 2, pulse->num_pulse - 1);
- put_bits(&s->pb, 6, pulse->start);
- for(i = 0; i < pulse->num_pulse; i++){
- put_bits(&s->pb, 5, pulse->pos[i]);
- put_bits(&s->pb, 4, pulse->amp[i]);
- }
-}
-
-/**
- * Encode spectral coefficients processed by psychoacoustic model.
- */
-static void encode_spectral_coeffs(AACEncContext *s, SingleChannelElement *sce)
-{
- int start, i, w, w2;
-
- for(w = 0; w < sce->ics.num_windows; w += sce->ics.group_len[w]){
- start = 0;
- for(i = 0; i < sce->ics.max_sfb; i++){
- if(sce->zeroes[w*16 + i]){
- start += sce->ics.swb_sizes[i];
- continue;
- }
- for(w2 = w; w2 < w + sce->ics.group_len[w]; w2++){
- quantize_and_encode_band(&s->pb, sce->coeffs + start + w2*128,
- sce->ics.swb_sizes[i],
- sce->sf_idx[w*16 + i],
- sce->band_type[w*16 + i],
- s->lambda);
- }
- start += sce->ics.swb_sizes[i];
- }
- }
-}
-
-/**
- * Encode one channel of audio data.
- */
-static int encode_individual_channel(AVCodecContext *avctx, AACEncContext *s, SingleChannelElement *sce, int common_window)
-{
- put_bits(&s->pb, 8, sce->sf_idx[0]);
- if(!common_window) put_ics_info(s, &sce->ics);
- encode_band_info(s, sce);
- encode_scale_factors(avctx, s, sce);
- encode_pulses(s, &sce->pulse);
- put_bits(&s->pb, 1, 0); //tns
- put_bits(&s->pb, 1, 0); //ssr
- encode_spectral_coeffs(s, sce);
- return 0;
-}
-
-/**
- * Write some auxiliary information about the created AAC file.
- */
-static void put_bitstream_info(AVCodecContext *avctx, AACEncContext *s, const char *name)
-{
- int i, namelen, padbits;
-
- namelen = strlen(name) + 2;
- put_bits(&s->pb, 3, TYPE_FIL);
- put_bits(&s->pb, 4, FFMIN(namelen, 15));
- if(namelen >= 15)
- put_bits(&s->pb, 8, namelen - 16);
- put_bits(&s->pb, 4, 0); //extension type - filler
- padbits = 8 - (put_bits_count(&s->pb) & 7);
- align_put_bits(&s->pb);
- for(i = 0; i < namelen - 2; i++)
- put_bits(&s->pb, 8, name[i]);
- put_bits(&s->pb, 12 - padbits, 0);
-}
-
-static int aac_encode_frame(AVCodecContext *avctx,
- uint8_t *frame, int buf_size, void *data)
-{
- AACEncContext *s = avctx->priv_data;
- int16_t *samples = s->samples, *samples2, *la;
- ChannelElement *cpe;
- int i, j, chans, tag, start_ch;
- const uint8_t *chan_map = aac_chan_configs[avctx->channels-1];
- int chan_el_counter[4];
-
- if(s->last_frame)
- return 0;
- if(data){
- if(!s->psypp){
- memcpy(s->samples + 1024 * avctx->channels, data, 1024 * avctx->channels * sizeof(s->samples[0]));
- }else{
- start_ch = 0;
- samples2 = s->samples + 1024 * avctx->channels;
- for(i = 0; i < chan_map[0]; i++){
- tag = chan_map[i+1];
- chans = tag == TYPE_CPE ? 2 : 1;
- ff_psy_preprocess(s->psypp, (uint16_t*)data + start_ch, samples2 + start_ch, start_ch + i, chans);
- start_ch += chans;
- }
- }
- }
- if(!avctx->frame_number){
- memcpy(s->samples, s->samples + 1024 * avctx->channels, 1024 * avctx->channels * sizeof(s->samples[0]));
- return 0;
- }
-
- init_put_bits(&s->pb, frame, buf_size*8);
- if((avctx->frame_number & 0xFF)==1 && !(avctx->flags & CODEC_FLAG_BITEXACT)){
- put_bitstream_info(avctx, s, LIBAVCODEC_IDENT);
- }
- start_ch = 0;
- memset(chan_el_counter, 0, sizeof(chan_el_counter));
- for(i = 0; i < chan_map[0]; i++){
- FFPsyWindowInfo wi[2];
- tag = chan_map[i+1];
- chans = tag == TYPE_CPE ? 2 : 1;
- cpe = &s->cpe[i];
- samples2 = samples + start_ch;
- la = samples2 + 1024 * avctx->channels + start_ch;
- if(!data) la = NULL;
- s->lambda = 5e-7f;
- for(j = 0; j < chans; j++){
- IndividualChannelStream *ics = &cpe->ch[j].ics;
- int k;
- wi[j] = ff_psy_suggest_window(&s->psy, samples2, la, start_ch + j, ics->window_sequence[0]);
- ics->window_sequence[1] = ics->window_sequence[0];
- ics->window_sequence[0] = wi[j].window_type[0];
- ics->use_kb_window[1] = ics->use_kb_window[0];
- ics->use_kb_window[0] = wi[j].window_shape;
- ics->num_windows = wi[j].num_windows;
- ics->swb_sizes = s->psy.bands [ics->num_windows == 8];
- ics->num_swb = s->psy.num_bands[ics->num_windows == 8];
- for(k = 0; k < ics->num_windows; k++)
- ics->group_len[k] = wi[j].grouping[k];
-
- s->cur_channel = start_ch + j;
- apply_window_and_mdct(avctx, s, &cpe->ch[j], samples2, j);
- search_for_quantizers(avctx, s, &cpe->ch[j]);
- }
- cpe->common_window = 0;
- if(chans > 1
- && wi[0].window_type[0] == wi[1].window_type[0]
- && wi[0].window_shape == wi[1].window_shape){
-
- cpe->common_window = 1;
- for(j = 0; j < wi[0].num_windows; j++){
- if(wi[0].grouping[j] != wi[1].grouping[j]){
- cpe->common_window = 0;
- break;
- }
- }
- }
-// search_for_ms(s, cpe, s->lambda);
- adjust_frame_information(s, cpe, chans);
- put_bits(&s->pb, 3, tag);
- put_bits(&s->pb, 4, chan_el_counter[tag]++);
- if(chans == 2){
- put_bits(&s->pb, 1, cpe->common_window);
- if(cpe->common_window){
- put_ics_info(s, &cpe->ch[0].ics);
- encode_ms_info(&s->pb, cpe);
- }
- }
- for(j = 0; j < chans; j++){
- s->cur_channel = start_ch + j;
- ff_psy_set_band_info(&s->psy, s->cur_channel, cpe->ch[j].coeffs, &wi[j]);
- encode_individual_channel(avctx, s, &cpe->ch[j], cpe->common_window);
- }
- start_ch += chans;
- }
-
- put_bits(&s->pb, 3, TYPE_END);
- flush_put_bits(&s->pb);
- avctx->frame_bits = put_bits_count(&s->pb);
-
- if(!data)
- s->last_frame = 1;
- memcpy(s->samples, s->samples + 1024 * avctx->channels, 1024 * avctx->channels * sizeof(s->samples[0]));
- return put_bits_count(&s->pb)>>3;
-}
-
-static av_cold int aac_encode_end(AVCodecContext *avctx)
-{
- AACEncContext *s = avctx->priv_data;
-
- ff_mdct_end(&s->mdct1024);
- ff_mdct_end(&s->mdct128);
- ff_psy_end(&s->psy);
- ff_psy_preprocess_end(s->psypp);
- av_freep(&s->samples);
- av_freep(&s->cpe);
- return 0;
-}
-
-AVCodec aac_encoder = {
- "aac",
- CODEC_TYPE_AUDIO,
- CODEC_ID_AAC,
- sizeof(AACEncContext),
- aac_encode_init,
- aac_encode_frame,
- aac_encode_end,
- .capabilities = CODEC_CAP_SMALL_LAST_FRAME | CODEC_CAP_DELAY,
- .sample_fmts = (enum SampleFormat[]){SAMPLE_FMT_S16,SAMPLE_FMT_NONE},
- .long_name = NULL_IF_CONFIG_SMALL("Advanced Audio Coding"),
+AACCoefficientsEncoder ff_aac_coders[] = {
+ {
+ search_for_quantizers_anmr,
+ encode_window_bands_info,
+ quantize_and_encode_band,
+// search_for_ms,
+ },
+ {
+ search_for_quantizers_faac,
+ encode_window_bands_info,
+ quantize_and_encode_band,
+// search_for_ms,
+ },
+ {
+ search_for_quantizers_twoloop,
+ encode_window_bands_info,
+ quantize_and_encode_band,
+// search_for_ms,
+ },
+ {
+ search_for_quantizers_fast,
+ encode_window_bands_info,
+ quantize_and_encode_band,
+// search_for_ms,
+ },
};
Modified: aacenc/aacenc.c
==============================================================================
--- aacenc/aacenc.c Mon Jan 26 15:00:57 2009 (r4007)
+++ aacenc/aacenc.c Mon Jan 26 15:07:28 2009 (r4008)
@@ -38,6 +38,7 @@
#include "aac.h"
#include "aactab.h"
+#include "aacenc.h"
#include "psymodel.h"
@@ -120,23 +121,6 @@ static const uint8_t *swb_size_128[] = {
swb_size_128_16, swb_size_128_16, swb_size_128_8
};
-/** bits needed to code codebook run value for long windows */
-static const uint8_t run_value_bits_long[64] = {
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 10,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 15
-};
-
-/** bits needed to code codebook run value for short windows */
-static const uint8_t run_value_bits_short[16] = {
- 3, 3, 3, 3, 3, 3, 3, 6, 6, 6, 6, 6, 6, 6, 6, 9
-};
-
-static const uint8_t* run_value_bits[2] = {
- run_value_bits_long, run_value_bits_short
-};
-
/** default channel configurations */
static const uint8_t aac_chan_configs[6][5] = {
{1, TYPE_SCE}, // 1 channel - single channel element
@@ -148,27 +132,6 @@ static const uint8_t aac_chan_configs[6]
};
/**
- * AAC encoder context
- */
-typedef struct {
- PutBitContext pb;
- MDCTContext mdct1024; ///< long (1024 samples) frame transform context
- MDCTContext mdct128; ///< short (128 samples) frame transform context
- DSPContext dsp;
- DECLARE_ALIGNED_16(FFTSample, output[2048]); ///< temporary buffer for MDCT input coefficients
- int16_t* samples; ///< saved preprocessed input
-
- int samplerate_index; ///< MPEG-4 samplerate index
-
- ChannelElement *cpe; ///< channel elements
- FFPsyContext psy;
- struct FFPsyPreprocessContext* psypp;
- int cur_channel;
- int last_frame;
- float lambda;
-} AACEncContext;
-
-/**
* Make AAC audio config object.
* @see 1.6.2.1 "Syntax - AudioSpecificConfig"
*/
@@ -231,6 +194,7 @@ static av_cold int aac_encode_init(AVCod
lengths[1] = ff_aac_num_swb_128[i];
ff_psy_init(&s->psy, avctx, 2, sizes, lengths);
s->psypp = ff_psy_preprocess_init(avctx);
+ s->coder = &ff_aac_coders[0];
#if !CONFIG_HARDCODED_TABLES
for (i = 0; i < 316; i++)
@@ -332,519 +296,6 @@ static void encode_ms_info(PutBitContext
}
/**
- * Quantize one coefficient.
- * @return absolute value of the quantized coefficient
- * @see 3GPP TS26.403 5.6.2 "Scalefactor determination"
- */
-static av_always_inline int quant(float coef, const float Q)
-{
- return av_clip((int)(pow(fabsf(coef) * Q, 0.75) + 0.4054), 0, 8191);
-}
-
-#if 1
-
-static av_always_inline int quant2(float coef, const float Q)
-{
- return av_clip((int)(pow(fabsf(coef) * Q, 0.75)), 0, 8191);
-}
-
-static const float aac_cb_range[12] = { 0, 3, 3, 3, 3, 9, 9, 8, 8, 13, 13, 17};
-static const float aac_cb_maxval[12] = {0, 1, 1, 2, 2, 4, 4, 7, 7, 12, 12, 16};
-
-/**
- * Calculate rate distortion cost for quantizing with given codebook
- *
- * @return quantization distortion
- */
-static float quantize_band_cost(const float *in, int size, int scale_idx, int cb,
- const float lambda, const float uplim, int *bits)
-{
- const float IQ = ff_aac_pow2sf_tab[200 + scale_idx - SCALE_ONE_POS + SCALE_DIV_512];
- const float Q = ff_aac_pow2sf_tab[200 - scale_idx + SCALE_ONE_POS - SCALE_DIV_512];
- int i, j, k;
- float cost = 0;
- const int dim = cb < FIRST_PAIR_BT ? 4 : 2;
- int resbits = 0;
- const int range = aac_cb_range[cb];
- const int maxval = aac_cb_maxval[cb];
- int offs[4];
-
- if(!cb){
- for(i = 0; i < size; i++)
- cost += in[i]*in[i]*lambda;
- return cost;
- }
- offs[0] = 1;
- for(i = 1; i < dim; i++)
- offs[i] = offs[i-1]*range;
- for(i = 0; i < size; i += dim){
- float mincost;
- int minidx = 0;
- int minbits = 0;
- int quants[4][2], realquants[4][2];
- mincost = 0.0f;
- for(j = 0; j < dim; j++){
- realquants[j][0] = quant2(in[i+j], Q);
- realquants[j][1] = quant (in[i+j], Q);
- for(k = 0; k < 2; k++){
- quants[j][k] = FFMIN(realquants[j][k], maxval);
- if(!IS_CODEBOOK_UNSIGNED(cb) && in[i+j] < 0.0f)
- quants[j][k] = -quants[j][k];
- }
- mincost += in[i+j]*in[i+j]*lambda;
- }
- minidx = IS_CODEBOOK_UNSIGNED(cb) ? 0 : 40;
- minbits = ff_aac_spectral_bits[cb-1][minidx];
- mincost += minbits;
- for(j = 0; j < (1<<dim); j++){
- float rd = 0.0f;
- int curbits;
- int curidx = IS_CODEBOOK_UNSIGNED(cb) ? 0 : 40;
- const float *vec;
- int same = 0;
- for(k = 0; k < dim; k++){
- if((j & (1 << k)) && quants[k][0] == quants[k][1]){
- same = 1;
- break;
- }
- }
- if(same)
- continue;
- for(k = 0; k < dim; k++)
- curidx += quants[k][!!(j & (1 << k))] * offs[dim - 1 - k];
- curbits = ff_aac_spectral_bits[cb-1][curidx];
- vec = &ff_aac_codebook_vectors[cb-1][curidx*dim];
- if(IS_CODEBOOK_UNSIGNED(cb)){
- for(k = 0; k < dim; k++){
- float t = fabsf(in[i+k]);
- float di;
- //do not code with escape sequence small values
- if(vec[k] == 64.0f && t < 39.0f*IQ){
- rd = INFINITY;
- break;
- }
- if(vec[k] == 64.0f){//FIXME: slow
- if(t >= 165140.0f*IQ){ // clipped value
- di = t - 165140.0f;
- curbits += 21;
- }else{
- int c = realquants[k];
- di = t - c*cbrt(c)*IQ;
- curbits += av_log2(c)*2 - 4 + 1;
- }
- }else{
- di = t - vec[k]*IQ;
- }
- if(vec[k] != 0.0f)
- curbits++;
- rd += di*di*lambda;
- }
- }else{
- for(k = 0; k < dim; k++){
- float di = in[i+k] - vec[k]*IQ;
- rd += di*di*lambda;
- }
- }
- rd += curbits;
- if(rd < mincost){
- mincost = rd;
- minidx = j;
- minbits = curbits;
- }
- }
- cost += mincost;
- resbits += minbits;
- if(cost >= uplim)
- return uplim;
- }
-
- if(bits)
- *bits = resbits;
- return cost;
-}
-
-static void quantize_and_encode_band(PutBitContext *pb, const float *in, int size,
- int scale_idx, int cb, const float lambda)
-{
- const float IQ = ff_aac_pow2sf_tab[200 + scale_idx - SCALE_ONE_POS + SCALE_DIV_512];
- const float Q = ff_aac_pow2sf_tab[200 - scale_idx + SCALE_ONE_POS - SCALE_DIV_512];
- const int range = aac_cb_range[cb];
- const int maxval = aac_cb_maxval[cb];
- const int dim = (cb < FIRST_PAIR_BT) ? 4 : 2;
- int i, j, k;
- int offs[4];
-
- if(!cb)
- return;
-
- offs[0] = 1;
- for(i = 1; i < dim; i++)
- offs[i] = offs[i-1]*range;
- for(i = 0; i < size; i += dim){
- float mincost;
- int minidx = 0;
- int minbits = 0;
- int quants[4][2];
- mincost = 0.0f;
- for(j = 0; j < dim; j++){
- quants[j][0] = av_clip(quant2(in[i+j], Q), -maxval, maxval);
- quants[j][1] = av_clip(quant (in[i+j], Q), -maxval, maxval);
- for(k = 0; k < 2; k++){
- quants[j][k] = FFMIN(quants[j][k], maxval);
- if(!IS_CODEBOOK_UNSIGNED(cb) && in[i+j] < 0.0f)
- quants[j][k] = -quants[j][k];
- }
- mincost += in[i+j]*in[i+j]*lambda;
- }
- minidx = IS_CODEBOOK_UNSIGNED(cb) ? 0 : 40;
- minbits = ff_aac_spectral_bits[cb-1][minidx];
- mincost += minbits;
- for(j = 0; j < (1<<dim); j++){
- float rd = 0.0f;
- int curbits;
- int curidx = IS_CODEBOOK_UNSIGNED(cb) ? 0 : 40;
- const float *vec;
- int same = 0;
- for(k = 0; k < dim; k++){
- if((j & (1 << k)) && quants[k][0] == quants[k][1]){
- same = 1;
- break;
- }
- }
- if(same)
- continue;
- for(k = 0; k < dim; k++)
- curidx += quants[k][!!(j & (1 << k))] * offs[dim - 1 - k];
- curbits = ff_aac_spectral_bits[cb-1][curidx];
- vec = &ff_aac_codebook_vectors[cb-1][curidx*dim];
- if(IS_CODEBOOK_UNSIGNED(cb)){
- for(k = 0; k < dim; k++){
- float t = fabsf(in[i+k]);
- float di;
- //do not code with escape sequence small values
- if(vec[k] == 64.0f && t < 39.0f*IQ){
- rd = INFINITY;
- break;
- }
- if(vec[k] == 64.0f){//FIXME: slow
- if(t >= 165140.0f*IQ){ // clipped value
- di = t - 165140.0f;
- curbits += 21;
- }else{
- int c = quant(t, Q);
- di = t - c*cbrt(c)*IQ;
- curbits += av_log2(c)*2 - 4 + 1;
- }
- }else{
- di = t - vec[k]*IQ;
- }
- if(vec[k] != 0.0f)
- curbits++;
- rd += di*di*lambda;
- }
- }else{
- for(k = 0; k < dim; k++){
- float di = in[i+k] - vec[k]*IQ;
- rd += di*di*lambda;
- }
- }
- rd += curbits;
- if(rd < mincost){
- mincost = rd;
- minidx = curidx;
- minbits = curbits;
- }
- }
- put_bits(pb, ff_aac_spectral_bits[cb-1][minidx], ff_aac_spectral_codes[cb-1][minidx]);
- if(IS_CODEBOOK_UNSIGNED(cb))
- for(j = 0; j < dim; j++)
- if(ff_aac_codebook_vectors[cb-1][minidx*dim+j] != 0.0f)
- put_bits(pb, 1, in[i+j] < 0.0f);
- if(cb == ESC_BT){
- for(j = 0; j < 2; j++){
- if(ff_aac_codebook_vectors[cb-1][minidx*2+j] == 64.0f){
- int coef = quant(in[i+j], Q);
- int len = av_log2(coef);
-
- put_bits(pb, len - 4 + 1, (1 << (len - 4 + 1)) - 2);
- put_bits(pb, len, coef & ((1 << len) - 1));
- }
- }
- }
- }
-}
-
-#else
-
-/**
- * Calculate rate distortion cost for quantizing with given codebook
- *
- * @return quantization distortion
- */
-static float quantize_band_cost(const float *in, int size, int scale_idx, int cb,
- const float lambda, const float uplim, int *bits)
-{
- const float Q = ff_aac_pow2sf_tab[200 + scale_idx - SCALE_ONE_POS + SCALE_DIV_512];
- int i, j, k;
- float cost = 0;
- const int dim = cb < FIRST_PAIR_BT ? 4 : 2;
- int resbits = 0;
-
- if(!cb){
- for(i = 0; i < size; i++)
- cost += in[i]*in[i]*lambda;
- return cost;
- }
- for(i = 0; i < size; i += dim){
- float mincost = INFINITY;
- int minidx = 0;
- int minbits = 0;
- const float *vec = ff_aac_codebook_vectors[cb-1];
- for(j = 0; j < ff_aac_spectral_sizes[cb-1]; j++, vec += dim){
- float rd = 0.0f;
- int curbits = ff_aac_spectral_bits[cb-1][j];
- if(IS_CODEBOOK_UNSIGNED(cb)){
- for(k = 0; k < dim; k++){
- float t = fabsf(in[i+k]);
- float di;
- //do not code with escape sequence small values
- if(vec[k] == 64.0f && t < 39.0f*Q){
- rd = INFINITY;
- break;
- }
- if(vec[k] == 64.0f){//FIXME: slow
- if(t >= 165140.0f*Q){ // clipped value
- di = t - 165140.0f;
- curbits += 21;
- }else{
- int c = quant(t, 1.0/Q);
- di = t - c*cbrt(c)*Q;
- curbits += av_log2(c)*2 - 4 + 1;
- }
- }else{
- di = t - vec[k]*Q;
- }
- if(vec[k] != 0.0f)
- curbits++;
- rd += di*di*lambda;
- }
- }else{
- for(k = 0; k < dim; k++){
- float di = in[i+k] - vec[k]*Q;
- rd += di*di*lambda;
- }
- }
- rd += curbits;
- if(rd < mincost){
- mincost = rd;
- minidx = j;
- minbits = curbits;
- }
- }
- cost += mincost;
- resbits += minbits;
- if(cost >= uplim)
- return uplim;
- }
-
- if(bits)
- *bits = resbits;
- return cost;
-}
-
-/**
- * Prepare coefficients for encoding.
- *
- * @return sum of coefficient absolute values
- */
-static void quantize_and_encode_band(PutBitContext *pb, const float *in, int size,
- int scale_idx, int cb, const float lambda)
-{
- const float Q = ff_aac_pow2sf_tab[200 + scale_idx - SCALE_ONE_POS + SCALE_DIV_512];
- const float IQ = ff_aac_pow2sf_tab[200 - scale_idx + SCALE_ONE_POS - SCALE_DIV_512];
- int i, j, k;
- const int dim = cb < FIRST_PAIR_BT ? 4 : 2;
-
- if(!cb)
- return;
-
- for(i = 0; i < size; i += dim){
- float mincost = INFINITY;
- int minidx = 0;
- int minbits = 0;
- const float *vec = ff_aac_codebook_vectors[cb-1];
- for(j = 0; j < ff_aac_spectral_sizes[cb-1]; j++, vec += dim){
- float rd = 0.0f;
- int curbits = ff_aac_spectral_bits[cb-1][j];
- if(IS_CODEBOOK_UNSIGNED(cb)){
- for(k = 0; k < dim; k++){
- float t = fabsf(in[i+k]);
- float di;
- //do not code with escape sequence small values
- if(vec[k] == 64.0f && t < 39.0f*Q){
- rd = INFINITY;
- break;
- }
- if(vec[k] == 64.0f){//FIXME: slow
- if(t >= 165140.0f*Q){ // clipped value
- di = t - 165140.0f;
- curbits += 21;
- }else{
- int c = quant(t, IQ);
- di = t - c*cbrt(c)*Q;
- curbits += av_log2(c)*2 - 4 + 1;
- }
- }else{
- di = t - vec[k]*Q;
- }
- if(vec[k] != 0.0f)
- curbits++;
- rd += di*di*lambda;
- }
- }else{
- for(k = 0; k < dim; k++){
- float di = in[i+k] - vec[k]*Q;
- rd += di*di*lambda;
- }
- }
- rd += curbits;
- if(rd < mincost){
- mincost = rd;
- minidx = j;
- minbits = curbits;
- }
- }
- put_bits(pb, ff_aac_spectral_bits[cb-1][minidx], ff_aac_spectral_codes[cb-1][minidx]);
- if(IS_CODEBOOK_UNSIGNED(cb))
- for(j = 0; j < dim; j++)
- if(ff_aac_codebook_vectors[cb-1][minidx*dim+j] != 0.0f)
- put_bits(pb, 1, in[i+j] < 0.0f);
- if(cb == ESC_BT){
- for(j = 0; j < 2; j++){
- if(ff_aac_codebook_vectors[cb-1][minidx*2+j] == 64.0f){
- int coef = quant(in[i+j], IQ);
- int len = av_log2(coef);
-
- put_bits(pb, len - 4 + 1, (1 << (len - 4 + 1)) - 2);
- put_bits(pb, len, coef & ((1 << len) - 1));
- }
- }
- }
- }
-}
-
-#endif
-
-/**
- * structure used in optimal codebook search
- */
-typedef struct BandCodingPath {
- int prev_idx; ///< pointer to the previous path point
- int codebook; ///< codebook for coding band run
- float cost; ///< path cost
- int run;
-} BandCodingPath;
-
-/**
- * Encode band info for single window group bands.
- */
-static void encode_window_bands_info(AACEncContext *s, SingleChannelElement *sce,
- int win, int group_len)
-{
- BandCodingPath path[120][12];
- int w, swb, cb, start, start2, size;
- int i, j;
- const int max_sfb = sce->ics.max_sfb;
- const int run_bits = sce->ics.num_windows == 1 ? 5 : 3;
- const int run_esc = (1 << run_bits) - 1;
- int idx, ppos, count;
- int stackrun[120], stackcb[120], stack_len;
-
- start = win*128;
- for(cb = 0; cb < 12; cb++){
- path[0][cb].cost = 0.0f;
- path[0][cb].prev_idx = -1;
- path[0][cb].run = 0;
- }
- for(swb = 0; swb < max_sfb; swb++){
- start2 = start;
- size = sce->ics.swb_sizes[swb];
- if(sce->zeroes[win*16 + swb]){
- for(cb = 0; cb < 12; cb++){
- path[swb+1][cb].prev_idx = cb;
- path[swb+1][cb].cost = path[swb][cb].cost;
- path[swb+1][cb].run = path[swb][cb].run + 1;
- }
- }else{
- float minrd = INFINITY;
- int mincb = 0;
- for(cb = 0; cb < 12; cb++){
- float rd = 0.0f;
- for(w = 0; w < group_len; w++){
- FFPsyBand *band = &s->psy.psy_bands[s->cur_channel*PSY_MAX_BANDS+(win+w)*16+swb];
- rd += quantize_band_cost(sce->coeffs + start + w*128, size,
- sce->sf_idx[(win+w)*16+swb], cb,
- s->lambda / band->threshold, INFINITY, NULL);
- }
- if( run_value_bits[sce->ics.num_windows == 8][path[swb][cb].run]
- != run_value_bits[sce->ics.num_windows == 8][path[swb][cb].run+1])
- rd += run_bits;
- path[swb+1][cb].prev_idx = cb;
- path[swb+1][cb].cost = path[swb][cb].cost + rd;
- path[swb+1][cb].run = path[swb][cb].run + 1;
- if(rd < minrd){
- minrd = rd;
- mincb = cb;
- }
- }
- for(cb = 0; cb < 12; cb++){
- float cost = path[swb][cb].cost + minrd + run_bits + 4;
- if(cost < path[swb+1][cb].cost){
- path[swb+1][cb].prev_idx = mincb;
- path[swb+1][cb].cost = cost;
- path[swb+1][cb].run = 1;
- }
- }
- }
- start += sce->ics.swb_sizes[swb];
- }
-
- //convert resulting path from backward-linked list
- stack_len = 0;
- idx = 0;
- for(cb = 1; cb < 12; cb++){
- if(path[max_sfb][cb].cost < path[max_sfb][idx].cost)
- idx = cb;
- }
- ppos = max_sfb;
- while(ppos > 0){
- cb = idx;
- stackrun[stack_len] = path[ppos][cb].run;
- stackcb [stack_len] = cb;
- idx = path[ppos][cb].prev_idx;
- ppos -= path[ppos][cb].run;
- stack_len++;
- }
- //perform actual band info encoding
- start = 0;
- for(i = stack_len - 1; i >= 0; i--){
- put_bits(&s->pb, 4, stackcb[i]);
- count = stackrun[i];
- memset(sce->zeroes + win*16 + start, !stackcb[i], count);
- //XXX: memset when band_type is also uint8_t
- for(j = 0; j < count; j++){
- sce->band_type[win*16 + start] = stackcb[i];
- start++;
- }
- while(count >= run_esc){
- put_bits(&s->pb, run_bits, run_esc);
- count -= run_esc;
- }
- put_bits(&s->pb, run_bits, count);
- }
-}
-
-/**
* Produce integer coefficients from scalefactors provided by the model.
*/
static void adjust_frame_information(AACEncContext *apc, ChannelElement *cpe, int chans)
@@ -903,546 +354,6 @@ static void adjust_frame_information(AAC
}
}
-typedef struct TrellisPath {
- float cost;
- int prev;
- int min_val;
- int max_val;
-} TrellisPath;
-
-static void search_for_quantizers_anmr(AACEncContext *s, SingleChannelElement *sce, const float lambda)
-{
- int q, w, w2, g, start = 0;
- int i;
- int idx;
- TrellisPath paths[256*121];
- int bandaddr[121];
- int minq;
- float mincost;
-
- for(i = 0; i < 256; i++){
- paths[i].cost = 0.0f;
- paths[i].prev = -1;
- paths[i].min_val = i;
- paths[i].max_val = i;
- }
- for(i = 256; i < 256*121; i++){
- paths[i].cost = INFINITY;
- paths[i].prev = -2;
- paths[i].min_val = INT_MAX;
- paths[i].max_val = 0;
- }
- idx = 256;
- for(w = 0; w < sce->ics.num_windows; w += sce->ics.group_len[w]){
- start = w*128;
- for(g = 0; g < sce->ics.num_swb; g++){
- const float *coefs = sce->coeffs + start;
- float qmin, qmax;
- int nz = 0;
-
- bandaddr[idx >> 8] = w*16+g;
- qmin = INT_MAX;
- qmax = 0.0f;
- for(w2 = 0; w2 < sce->ics.group_len[w]; w2++){
- FFPsyBand *band = &s->psy.psy_bands[s->cur_channel*PSY_MAX_BANDS+(w+w2)*16+g];
- if(band->energy <= band->threshold || band->threshold == 0.0f){
- sce->zeroes[(w+w2)*16+g] = 1;
- continue;
- }
- sce->zeroes[(w+w2)*16+g] = 0;
- nz = 1;
- for(i = 0; i < sce->ics.swb_sizes[g]; i++){
- float t = fabsf(coefs[w2*128+i]);
- if(t > 0.0f) qmin = fminf(qmin, t);
- qmax = fmaxf(qmax, t);
- }
- }
- if(nz){
- int minscale, maxscale;
- float minrd = INFINITY;
- //minimum scalefactor index is when minimum nonzero coefficient after quantizing is not clipped
- minscale = av_clip_uint8(log2(qmin)*4 - 69 + SCALE_ONE_POS - SCALE_DIV_512);
- //maximum scalefactor index is when maximum coefficient after quantizing is still not zero
- maxscale = av_clip_uint8(log2(qmax)*4 + 6 + SCALE_ONE_POS - SCALE_DIV_512);
- for(q = minscale; q < maxscale; q++){
- float dists[12], dist;
- memset(dists, 0, sizeof(dists));
- for(w2 = 0; w2 < sce->ics.group_len[w]; w2++){
- FFPsyBand *band = &s->psy.psy_bands[s->cur_channel*PSY_MAX_BANDS+(w+w2)*16+g];
- int cb;
- for(cb = 0; cb <= ESC_BT; cb++){
- dists[cb] += quantize_band_cost(coefs + w2*128, sce->ics.swb_sizes[g],
- q, cb, s->lambda / band->threshold, INFINITY, NULL);
- }
- }
- dist = dists[0];
- for(i = 1; i <= ESC_BT; i++)
- dist = fminf(dist, dists[i]);
- minrd = fminf(minrd, dist);
-
- for(i = FFMAX(q - SCALE_MAX_DIFF, 0); i < FFMIN(q + SCALE_MAX_DIFF, 256); i++){
- float cost;
- int minv, maxv;
- if(isinf(paths[idx - 256 + i].cost))
- continue;
- cost = paths[idx - 256 + i].cost + dist
- + ff_aac_scalefactor_bits[q - i + SCALE_DIFF_ZERO];
- minv = FFMIN(paths[idx - 256 + i].min_val, q);
- maxv = FFMAX(paths[idx - 256 + i].max_val, q);
- if(cost < paths[idx + q].cost && maxv-minv < SCALE_MAX_DIFF){
- paths[idx + q].cost = cost;
- paths[idx + q].prev = idx - 256 + i;
- paths[idx + q].min_val = minv;
- paths[idx + q].max_val = maxv;
- }
- }
- }
- }else{
- for(q = 0; q < 256; q++){
- if(!isinf(paths[idx - 256 + q].cost)){
- paths[idx + q].cost = paths[idx - 256 + q].cost + 1;
- paths[idx + q].prev = idx - 256 + q;
- paths[idx + q].min_val = FFMIN(paths[idx - 256 + q].min_val, q);
- paths[idx + q].max_val = FFMAX(paths[idx - 256 + q].max_val, q);
- continue;
- }
- for(i = FFMAX(q - SCALE_MAX_DIFF, 0); i < FFMIN(q + SCALE_MAX_DIFF, 256); i++){
- float cost;
- int minv, maxv;
- if(isinf(paths[idx - 256 + i].cost))
- continue;
- cost = paths[idx - 256 + i].cost + ff_aac_scalefactor_bits[q - i + SCALE_DIFF_ZERO];
- minv = FFMIN(paths[idx - 256 + i].min_val, q);
- maxv = FFMAX(paths[idx - 256 + i].max_val, q);
- if(cost < paths[idx + q].cost && maxv-minv < SCALE_MAX_DIFF){
- paths[idx + q].cost = cost;
- paths[idx + q].prev = idx - 256 + i;
- paths[idx + q].min_val = minv;
- paths[idx + q].max_val = maxv;
- }
- }
- }
- }
- sce->zeroes[w*16+g] = !nz;
- start += sce->ics.swb_sizes[g];
- idx += 256;
- }
- }
- idx -= 256;
- mincost = paths[idx].cost;
- minq = idx;
- for(i = 1; i < 256; i++){
- if(paths[idx + i].cost < mincost){
- mincost = paths[idx + i].cost;
- minq = idx + i;
- }
- }
- while(minq >= 256){
- sce->sf_idx[bandaddr[minq>>8]] = minq & 0xFF;
- minq = paths[minq].prev;
- }
- //set the same quantizers inside window groups
- for(w = 0; w < sce->ics.num_windows; w += sce->ics.group_len[w])
- for(g = 0; g < sce->ics.num_swb; g++)
- for(w2 = 1; w2 < sce->ics.group_len[w]; w2++)
- sce->sf_idx[(w+w2)*16+g] = sce->sf_idx[w*16+g];
-}
-
-/**
- * two-loop quantizers search taken from ISO 13818-7 Appendix C
- */
-static void search_for_quantizers_twoloop(AVCodecContext *avctx, AACEncContext *s,
- SingleChannelElement *sce, const float lambda)
-{
- int start = 0, i, w, w2, g;
- int destbits = avctx->bit_rate * 1024.0 / avctx->sample_rate / avctx->channels;
- float dists[128], uplims[128];
- int fflag, minscaler;
- int its = 0;
- int allz = 0;
- float minthr = INFINITY;
-
- //XXX: some heuristic to determine initial quantizers will reduce search time
- memset(dists, 0, sizeof(dists));
- //determine zero bands and upper limits
- for(w = 0; w < sce->ics.num_windows; w += sce->ics.group_len[w]){
- for(g = 0; g < sce->ics.num_swb; g++){
- int nz = 0;
- float uplim = 0.0f;
- for(w2 = 0; w2 < sce->ics.group_len[w]; w2++){
- FFPsyBand *band = &s->psy.psy_bands[s->cur_channel*PSY_MAX_BANDS+(w+w2)*16+g];
- uplim += band->threshold;
- if(band->energy <= band->threshold || band->threshold == 0.0f){
- sce->zeroes[(w+w2)*16+g] = 1;
- continue;
- }
- nz = 1;
- }
- uplims[w*16+g] = uplim *512;
- sce->zeroes[w*16+g] = !nz;
- if(nz)
- minthr = fminf(minthr, uplim);
- allz = FFMAX(allz, nz);
- }
- }
- for(w = 0; w < sce->ics.num_windows; w += sce->ics.group_len[w]){
- for(g = 0; g < sce->ics.num_swb; g++){
- if(sce->zeroes[w*16+g]){
- sce->sf_idx[w*16+g] = SCALE_ONE_POS;
- continue;
- }
- sce->sf_idx[w*16+g] = SCALE_ONE_POS + fminf(log2(uplims[w*16+g]/minthr)*4,59);
- }
- }
-
- if(!allz)
- return;
- //perform two-loop search
- //outer loop - improve quality
- do{
- int tbits, qstep;
- minscaler = sce->sf_idx[0];
- //inner loop - quantize spectrum to fit into given number of bits
- qstep = its ? 1 : 32;
- do{
- int prev = -1;
- tbits = 0;
- fflag = 0;
- for(w = 0; w < sce->ics.num_windows; w += sce->ics.group_len[w]){
- start = w*128;
- for(g = 0; g < sce->ics.num_swb; g++){
- const float *coefs = sce->coeffs + start;
- int bits = 0;
- int cb;
- float mindist = INFINITY;
- int minbits = 0;
-
- if(sce->zeroes[w*16+g] || sce->sf_idx[w*16+g] >= 218)
- continue;
- minscaler = FFMIN(minscaler, sce->sf_idx[w*16+g]);
- for(cb = 0; cb <= ESC_BT; cb++){
- float dist = 0.0f;
- int bb = 0;
- for(w2 = 0; w2 < sce->ics.group_len[w]; w2++){
- int b;
- dist += quantize_band_cost(coefs + w2*128,
- sce->ics.swb_sizes[g],
- sce->sf_idx[w*16+g],
- ESC_BT,
- 1.0,
- INFINITY,
- &b);
- bb += b;
- }
- if(dist < mindist){
- mindist = dist;
- minbits = bb;
- }
- }
- dists[w*16+g] = mindist - minbits;
- bits = minbits;
- if(prev != -1){
- bits += ff_aac_scalefactor_bits[sce->sf_idx[w*16+g] - prev + SCALE_DIFF_ZERO];
- }
- tbits += bits;
- start += sce->ics.swb_sizes[g];
- prev = sce->sf_idx[w*16+g];
- }
- }
- if(tbits > destbits){
- for(i = 0; i < 128; i++){
- if(sce->sf_idx[i] < 218 - qstep){
- sce->sf_idx[i] += qstep;
- }
- }
- }else{
- for(i = 0; i < 128; i++){
- if(sce->sf_idx[i] > 60 - qstep){
- sce->sf_idx[i] -= qstep;
- }
- }
- }
- qstep >>= 1;
- if(!qstep && tbits > destbits*1.02)
- qstep = 1;
- if(sce->sf_idx[0] >= 217)break;
- }while(qstep);
-
- fflag = 0;
- minscaler = av_clip(minscaler, 60, 255 - SCALE_MAX_DIFF);
- for(w = 0; w < sce->ics.num_windows; w += sce->ics.group_len[w]){
- start = w*128;
- for(g = 0; g < sce->ics.num_swb; g++){
- int prevsc = sce->sf_idx[w*16+g];
- if(dists[w*16+g] > uplims[w*16+g] && sce->sf_idx[w*16+g] > 60)
- sce->sf_idx[w*16+g]--;
- sce->sf_idx[w*16+g] = av_clip(sce->sf_idx[w*16+g], minscaler, minscaler + SCALE_MAX_DIFF);
- sce->sf_idx[w*16+g] = FFMIN(sce->sf_idx[w*16+g], 219);
- if(sce->sf_idx[w*16+g] != prevsc)
- fflag = 1;
- }
- }
- its++;
- }while(fflag && its < 10);
-}
-
-static void search_for_quantizers_faac(AACEncContext *s, SingleChannelElement *sce, const float lambda)
-{
- int start = 0, i, w, w2, g;
- float uplim[128], maxq[128];
- int minq;
-#if 0
- float distfact = ((sce->ics.num_windows > 1) ? 85.80 : 147.84) / lambda;
- int last = 0, lastband = 0, curband = 0;
- float avg_energy = 0.0;
- if(sce->ics.num_windows == 1){
- start = 0;
- for(i = 0; i < 1024; i++){
- if(i - start >= sce->ics.swb_sizes[curband]){
- start += sce->ics.swb_sizes[curband];
- curband++;
- }
- if(sce->coeffs[i]){
- avg_energy += sce->coeffs[i] * sce->coeffs[i];
- last = i;
- lastband = curband;
- }
- }
- }else{
- for(w = 0; w < 8; w++){
- const float *coeffs = sce->coeffs + w*128;
- start = 0;
- for(i = 0; i < 128; i++){
- if(i - start >= sce->ics.swb_sizes[curband]){
- start += sce->ics.swb_sizes[curband];
- curband++;
- }
- if(coeffs[i]){
- avg_energy += coeffs[i] * coeffs[i];
- last = FFMAX(last, i);
- lastband = FFMAX(lastband, curband);
- }
- }
- }
- }
- last++;
- avg_energy /= last;
- for(w = 0; w < sce->ics.num_windows; w += sce->ics.group_len[w]){
- start = w*128;
- for(g = 0; g < sce->ics.num_swb; g++){
- float *coefs = sce->coeffs + start;
- const int size = sce->ics.swb_sizes[g];
- int start2 = start, end2 = start + size, peakpos = start;
- float maxval = -1, thr = 0.0f, t;
- maxq[w*16+g] = 0.0f;
- if(g > lastband){
- maxq[w*16+g] = 0.0f;
- start += size;
- for(w2 = 0; w2 < sce->ics.group_len[w]; w2++)
- memset(coefs + w2*128, 0, sizeof(coefs[0])*size);
- continue;
- }
- for(w2 = 0; w2 < sce->ics.group_len[w]; w2++){
- for(i = 0; i < size; i++){
- float t = coefs[w2*128+i]*coefs[w2*128+i];
- maxq[w*16+g] = fmaxf(maxq[w*16+g], coefs[w2*128 + i]);
- thr += t;
- if(sce->ics.num_windows == 1 && maxval < t){
- maxval = t;
- peakpos = start+i;
- }
- }
- }
- if(sce->ics.num_windows == 1){
- start2 = FFMAX(peakpos - 2, start2);
- end2 = FFMIN(peakpos + 3, end2);
- }
- start += size;
- thr = pow(thr / (avg_energy * (end2 - start2)), 0.3 + 0.1*(lastband - g) / lastband);
- t = 1.0 - (1.0 * start2 / last);
- uplim[w*16+g] = distfact / (1.4 * thr + t*t*t + 0.075);
- }
- }
-#else
- memset(maxq, 0, sizeof(maxq));
- for(w = 0; w < sce->ics.num_windows; w += sce->ics.group_len[w]){
- start = w*128;
- for(g = 0; g < sce->ics.num_swb; g++){
- float *coefs = sce->coeffs + start;
- const int size = sce->ics.swb_sizes[g];
- float thr = 0.0f;
- for(w2 = 0; w2 < sce->ics.group_len[w]; w2++){
- FFPsyBand *band = &s->psy.psy_bands[s->cur_channel*PSY_MAX_BANDS+(w+w2)*16+g];
- thr += band->threshold;
- for(i = 0; i < size; i++){
- maxq[w*16+g] = fmaxf(maxq[w*16+g], fabsf(coefs[w2*128 + i]));
- }
- }
- uplim[w*16+g] = thr / lambda;
- start += size;
- }
- }
-#endif
- memset(sce->sf_idx, 0, sizeof(sce->sf_idx));
- for(w = 0; w < sce->ics.num_windows; w += sce->ics.group_len[w]){
- start = w*128;
- for(g = 0; g < sce->ics.num_swb; g++){
- const float *coefs = sce->coeffs + start;
- const int size = sce->ics.swb_sizes[g];
- int scf, prev_scf, step;
- if(maxq[w*16+g] < 21.544){
- sce->zeroes[w*16+g] = 1;
- continue;
- }
- sce->zeroes[w*16+g] = 0;
- scf = prev_scf = av_clip(SCALE_ONE_POS + log2(1/maxq[w*16+g])*16/3, 60, 218);
- step = 16;
- for(;;){
- float dist = 0.0f, t;
- int quant_max;
-
- for(w2 = 0; w2 < sce->ics.group_len[w]; w2++){
- int b;
- dist += quantize_band_cost(coefs + w2*128,
- sce->ics.swb_sizes[g],
- scf,
- ESC_BT,
- 1.0,
- INFINITY,
- &b);
- dist -= b;
- }
- quant_max = quant(maxq[w*16+g], ff_aac_pow2sf_tab[200 - scf + SCALE_ONE_POS]);
- if(quant_max >= 8191){ // too much, return to the previous quantizer
- sce->sf_idx[w*16+g] = prev_scf;
- break;
- }
- prev_scf = scf;
- t = pow(dist / size, -2.0/3.0);
- if(FFABS(step) > 4){
- int newstep = 4*log(t / maxq[w*16+g])/log(2) - 2;
- step = av_clip(-newstep, -4, 4);
- }
- if(FFABS(step) >= 4){
- step = 1 - step;
- scf += step;
- }else if(t >= uplim[w*16+g]){
- scf -= FFABS(step);
- }else{
- sce->sf_idx[w*16+g] = scf;
- break;
- }
- }
- start += size;
- }
- }
- minq = sce->sf_idx[0] ? sce->sf_idx[0] : INT_MAX;
- for(i = 1; i < 128; i++){
- if(!sce->sf_idx[i])
- sce->sf_idx[i] = sce->sf_idx[i-1];
- else
- minq = FFMIN(minq, sce->sf_idx[i]);
- }
- if(minq == INT_MAX) minq = 0;
- for(i = 126; i >= 0; i--){
- if(!sce->sf_idx[i])
- sce->sf_idx[i] = sce->sf_idx[i+1];
- sce->sf_idx[i] = av_clip(sce->sf_idx[i], minq, minq + SCALE_MAX_DIFF);
- }
-}
-
-static void search_for_quantizers_fast(AACEncContext *s, SingleChannelElement *sce)
-{
- int start = 0, i, w, w2, g;
- int minq = 255;
-
- memset(sce->sf_idx, 0, sizeof(sce->sf_idx));
- for(w = 0; w < sce->ics.num_windows; w += sce->ics.group_len[w]){
- start = w*128;
- for(g = 0; g < sce->ics.num_swb; g++){
- for(w2 = 0; w2 < sce->ics.group_len[w]; w2++){
- FFPsyBand *band = &s->psy.psy_bands[s->cur_channel*PSY_MAX_BANDS+(w+w2)*16+g];
- if(band->energy <= band->threshold){
- sce->sf_idx[(w+w2)*16+g] = 218;
- sce->zeroes[(w+w2)*16+g] = 1;
- }else{
- sce->sf_idx[(w+w2)*16+g] = av_clip(SCALE_ONE_POS - SCALE_DIV_512 + log2(band->threshold), 80, 218);
- sce->zeroes[(w+w2)*16+g] = 0;
- }
- minq = FFMIN(minq, sce->sf_idx[(w+w2)*16+g]);
- }
- }
- }
- for(i = 0; i < 128; i++){
- sce->sf_idx[i] = av_clip(sce->sf_idx[i], minq, minq + SCALE_MAX_DIFF - 1);
- }
- //set the same quantizers inside window groups
- for(w = 0; w < sce->ics.num_windows; w += sce->ics.group_len[w])
- for(g = 0; g < sce->ics.num_swb; g++)
- for(w2 = 1; w2 < sce->ics.group_len[w]; w2++)
- sce->sf_idx[(w+w2)*16+g] = sce->sf_idx[w*16+g];
-}
-
-static void search_for_quantizers(AVCodecContext *avctx, AACEncContext *s,
- SingleChannelElement *sce)
-{
- search_for_quantizers_anmr(s, sce, s->lambda);
-// search_for_quantizers_twoloop(avctx, s, sce, s->lambda);
-// search_for_quantizers_faac(s, sce, av_clipf(s->lambda * 2e8, 50.0f, 300.0f));
-// search_for_quantizers_fast(s, sce);
-}
-
-static void search_for_ms(AACEncContext *s, ChannelElement *cpe, const float lambda)
-{
- int start = 0, i, w, w2, g;
- float M[128], S[128];
- SingleChannelElement *sce0 = &cpe->ch[0];
- SingleChannelElement *sce1 = &cpe->ch[1];
- if(!cpe->common_window)
- return;
- for(w = 0; w < sce0->ics.num_windows; w += sce0->ics.group_len[w]){
- for(g = 0; g < sce0->ics.num_swb; g++){
- if(!cpe->ch[0].zeroes[w*16+g] && !cpe->ch[1].zeroes[w*16+g]){
- float dist1 = 0.0f, dist2 = 0.0f;
- for(w2 = 0; w2 < sce0->ics.group_len[w]; w2++){
- FFPsyBand *band0 = &s->psy.psy_bands[(s->cur_channel+0)*PSY_MAX_BANDS+(w+w2)*16+g];
- FFPsyBand *band1 = &s->psy.psy_bands[(s->cur_channel+1)*PSY_MAX_BANDS+(w+w2)*16+g];
- float minthr = fminf(band0->threshold, band1->threshold);
- float maxthr = fmaxf(band0->threshold, band1->threshold);
- for(i = 0; i < sce0->ics.swb_sizes[g]; i++){
- M[i] = (sce0->coeffs[start+w2*128+i]
- + sce1->coeffs[start+w2*128+i])*0.5;
- S[i] = sce0->coeffs[start+w2*128+i]
- - sce1->coeffs[start+w2*128+i];
- }
- dist1 += quantize_band_cost(sce0->coeffs + start + w2*128,
- sce0->ics.swb_sizes[g],
- sce0->sf_idx[(w+w2)*16+g],
- sce0->band_type[(w+w2)*16+g],
- lambda / band0->threshold, INFINITY, NULL);
- dist1 += quantize_band_cost(sce1->coeffs + start + w2*128,
- sce1->ics.swb_sizes[g],
- sce1->sf_idx[(w+w2)*16+g],
- sce1->band_type[(w+w2)*16+g],
- lambda / band1->threshold, INFINITY, NULL);
- dist2 += quantize_band_cost(M,
- sce0->ics.swb_sizes[g],
- sce0->sf_idx[(w+w2)*16+g],
- sce0->band_type[(w+w2)*16+g],
- lambda / maxthr, INFINITY, NULL);
- dist2 += quantize_band_cost(S,
- sce1->ics.swb_sizes[g],
- sce1->sf_idx[(w+w2)*16+g],
- sce1->band_type[(w+w2)*16+g],
- lambda / minthr, INFINITY, NULL);
- }
- cpe->ms_mask[w*16+g] = dist2 < dist1;
- }
- start += sce0->ics.swb_sizes[g];
- }
- }
-}
-
/**
* Encode scalefactor band coding type.
*/
@@ -1451,7 +362,7 @@ static void encode_band_info(AACEncConte
int w;
for(w = 0; w < sce->ics.num_windows; w += sce->ics.group_len[w]){
- encode_window_bands_info(s, sce, w, sce->ics.group_len[w]);
+ s->coder->encode_window_bands_info(s, sce, w, sce->ics.group_len[w]);
}
}
@@ -1508,7 +419,7 @@ static void encode_spectral_coeffs(AACEn
continue;
}
for(w2 = w; w2 < w + sce->ics.group_len[w]; w2++){
- quantize_and_encode_band(&s->pb, sce->coeffs + start + w2*128,
+ s->coder->quantize_and_encode_band(&s->pb, sce->coeffs + start + w2*128,
sce->ics.swb_sizes[i],
sce->sf_idx[w*16 + i],
sce->band_type[w*16 + i],
@@ -1617,7 +528,7 @@ static int aac_encode_frame(AVCodecConte
s->cur_channel = start_ch + j;
apply_window_and_mdct(avctx, s, &cpe->ch[j], samples2, j);
- search_for_quantizers(avctx, s, &cpe->ch[j]);
+ s->coder->search_for_quantizers(avctx, s, &cpe->ch[j], s->lambda);
}
cpe->common_window = 0;
if(chans > 1
@@ -1632,7 +543,8 @@ static int aac_encode_frame(AVCodecConte
}
}
}
-// search_for_ms(s, cpe, s->lambda);
+ if(cpe->common_window && s->coder->search_for_ms)
+ s->coder->search_for_ms(s, cpe, s->lambda);
adjust_frame_information(s, cpe, chans);
put_bits(&s->pb, 3, tag);
put_bits(&s->pb, 4, chan_el_counter[tag]++);
Copied and modified: aacenc/aacenc.h (from r4006, aacenc/aacenc.c)
==============================================================================
--- aacenc/aacenc.c Mon Jan 26 14:37:36 2009 (r4006, copy source)
+++ aacenc/aacenc.h Mon Jan 26 15:07:28 2009 (r4008)
@@ -19,138 +19,35 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-/**
- * @file aacenc.c
- * AAC encoder
- */
-
-/***********************************
- * TODOs:
- * speedup quantizer selection
- * add sane pulse detection
- * add temporal noise shaping
- ***********************************/
+#ifndef AVCODEC_AACENC_H
+#define AVCODEC_AACENC_H
#include "avcodec.h"
#include "bitstream.h"
#include "dsputil.h"
-#include "mpeg4audio.h"
#include "aac.h"
-#include "aactab.h"
#include "psymodel.h"
-static const uint8_t swb_size_1024_96[] = {
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 8, 8, 8, 8,
- 12, 12, 12, 12, 12, 16, 16, 24, 28, 36, 44,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64
-};
-
-static const uint8_t swb_size_1024_64[] = {
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 8, 8, 8,
- 12, 12, 12, 16, 16, 16, 20, 24, 24, 28, 36,
- 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40
-};
-
-static const uint8_t swb_size_1024_48[] = {
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 8, 8, 8, 8, 8, 8,
- 12, 12, 12, 12, 16, 16, 20, 20, 24, 24, 28, 28,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 96
-};
-
-static const uint8_t swb_size_1024_32[] = {
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 8, 8, 8, 8, 8, 8,
- 12, 12, 12, 12, 16, 16, 20, 20, 24, 24, 28, 28,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32
-};
-
-static const uint8_t swb_size_1024_24[] = {
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 12, 12, 12, 12, 16, 16, 16, 20, 20, 24, 24, 28, 28,
- 32, 36, 36, 40, 44, 48, 52, 52, 64, 64, 64, 64, 64
-};
-
-static const uint8_t swb_size_1024_16[] = {
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 16, 16, 16, 16, 20, 20, 20, 24, 24, 28, 28,
- 32, 36, 40, 40, 44, 48, 52, 56, 60, 64, 64, 64
-};
-
-static const uint8_t swb_size_1024_8[] = {
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- 16, 16, 16, 16, 16, 16, 16, 20, 20, 20, 20, 24, 24, 24, 28, 28,
- 32, 36, 36, 40, 44, 48, 52, 56, 60, 64, 80
-};
-
-static const uint8_t *swb_size_1024[] = {
- swb_size_1024_96, swb_size_1024_96, swb_size_1024_64,
- swb_size_1024_48, swb_size_1024_48, swb_size_1024_32,
- swb_size_1024_24, swb_size_1024_24, swb_size_1024_16,
- swb_size_1024_16, swb_size_1024_16, swb_size_1024_8
-};
-
-static const uint8_t swb_size_128_96[] = {
- 4, 4, 4, 4, 4, 4, 8, 8, 8, 16, 28, 36
-};
-
-static const uint8_t swb_size_128_48[] = {
- 4, 4, 4, 4, 4, 8, 8, 8, 12, 12, 12, 16, 16, 16
-};
-
-static const uint8_t swb_size_128_24[] = {
- 4, 4, 4, 4, 4, 4, 4, 8, 8, 8, 12, 12, 16, 16, 20
-};
-
-static const uint8_t swb_size_128_16[] = {
- 4, 4, 4, 4, 4, 4, 4, 4, 8, 8, 12, 12, 16, 20, 20
-};
-
-static const uint8_t swb_size_128_8[] = {
- 4, 4, 4, 4, 4, 4, 4, 8, 8, 8, 8, 12, 16, 20, 20
-};
-
-static const uint8_t *swb_size_128[] = {
- /* the last entry on the following row is swb_size_128_64 but is a
- duplicate of swb_size_128_96 */
- swb_size_128_96, swb_size_128_96, swb_size_128_96,
- swb_size_128_48, swb_size_128_48, swb_size_128_48,
- swb_size_128_24, swb_size_128_24, swb_size_128_16,
- swb_size_128_16, swb_size_128_16, swb_size_128_8
-};
-
-/** bits needed to code codebook run value for long windows */
-static const uint8_t run_value_bits_long[64] = {
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 10,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 15
-};
-
-/** bits needed to code codebook run value for short windows */
-static const uint8_t run_value_bits_short[16] = {
- 3, 3, 3, 3, 3, 3, 3, 6, 6, 6, 6, 6, 6, 6, 6, 9
-};
+struct AACEncContext;
-static const uint8_t* run_value_bits[2] = {
- run_value_bits_long, run_value_bits_short
-};
+typedef struct AACCoefficientsEncoder{
+ void (*search_for_quantizers)(AVCodecContext *avctx, struct AACEncContext *s,
+ SingleChannelElement *sce, const float lambda);
+ void (*encode_window_bands_info)(struct AACEncContext *s, SingleChannelElement *sce,
+ int win, int group_len);
+ void (*quantize_and_encode_band)(PutBitContext *pb, const float *in, int size,
+ int scale_idx, int cb, const float lambda);
+ void (*search_for_ms)(struct AACEncContext *s, ChannelElement *cpe, const float lambda);
+}AACCoefficientsEncoder;
-/** default channel configurations */
-static const uint8_t aac_chan_configs[6][5] = {
- {1, TYPE_SCE}, // 1 channel - single channel element
- {1, TYPE_CPE}, // 2 channels - channel pair
- {2, TYPE_SCE, TYPE_CPE}, // 3 channels - center + stereo
- {3, TYPE_SCE, TYPE_CPE, TYPE_SCE}, // 4 channels - front center + stereo + back center
- {3, TYPE_SCE, TYPE_CPE, TYPE_CPE}, // 5 channels - front center + stereo + back stereo
- {4, TYPE_SCE, TYPE_CPE, TYPE_CPE, TYPE_LFE}, // 6 channels - front center + stereo + back stereo + LFE
-};
+extern AACCoefficientsEncoder ff_aac_coders[];
/**
* AAC encoder context
*/
-typedef struct {
+typedef struct AACEncContext {
PutBitContext pb;
MDCTContext mdct1024; ///< long (1024 samples) frame transform context
MDCTContext mdct128; ///< short (128 samples) frame transform context
@@ -163,1526 +60,10 @@ typedef struct {
ChannelElement *cpe; ///< channel elements
FFPsyContext psy;
struct FFPsyPreprocessContext* psypp;
+ AACCoefficientsEncoder *coder;
int cur_channel;
int last_frame;
float lambda;
} AACEncContext;
-/**
- * Make AAC audio config object.
- * @see 1.6.2.1 "Syntax - AudioSpecificConfig"
- */
-static void put_audio_specific_config(AVCodecContext *avctx)
-{
- PutBitContext pb;
- AACEncContext *s = avctx->priv_data;
-
- init_put_bits(&pb, avctx->extradata, avctx->extradata_size*8);
- put_bits(&pb, 5, 2); //object type - AAC-LC
- put_bits(&pb, 4, s->samplerate_index); //sample rate index
- put_bits(&pb, 4, avctx->channels);
- //GASpecificConfig
- put_bits(&pb, 1, 0); //frame length - 1024 samples
- put_bits(&pb, 1, 0); //does not depend on core coder
- put_bits(&pb, 1, 0); //is not extension
- flush_put_bits(&pb);
-}
-
-static av_cold int aac_encode_init(AVCodecContext *avctx)
-{
- AACEncContext *s = avctx->priv_data;
- int i;
- const uint8_t *sizes[2];
- int lengths[2];
-
- avctx->frame_size = 1024;
-
- for(i = 0; i < 16; i++)
- if(avctx->sample_rate == ff_mpeg4audio_sample_rates[i])
- break;
- if(i == 16){
- av_log(avctx, AV_LOG_ERROR, "Unsupported sample rate %d\n", avctx->sample_rate);
- return -1;
- }
- if(avctx->channels > 6){
- av_log(avctx, AV_LOG_ERROR, "Unsupported number of channels: %d\n", avctx->channels);
- return -1;
- }
- s->samplerate_index = i;
-
- dsputil_init(&s->dsp, avctx);
- ff_mdct_init(&s->mdct1024, 11, 0);
- ff_mdct_init(&s->mdct128, 8, 0);
- // window init
- ff_kbd_window_init(ff_aac_kbd_long_1024, 4.0, 1024);
- ff_kbd_window_init(ff_aac_kbd_short_128, 6.0, 128);
- ff_sine_window_init(ff_sine_1024, 1024);
- ff_sine_window_init(ff_sine_128, 128);
-
- s->samples = av_malloc(2 * 1024 * avctx->channels * sizeof(s->samples[0]));
- s->cpe = av_mallocz(sizeof(ChannelElement) * aac_chan_configs[avctx->channels-1][0]);
- avctx->extradata = av_malloc(2);
- avctx->extradata_size = 2;
- put_audio_specific_config(avctx);
-
- sizes[0] = swb_size_1024[i];
- sizes[1] = swb_size_128[i];
- lengths[0] = ff_aac_num_swb_1024[i];
- lengths[1] = ff_aac_num_swb_128[i];
- ff_psy_init(&s->psy, avctx, 2, sizes, lengths);
- s->psypp = ff_psy_preprocess_init(avctx);
-
-#if !CONFIG_HARDCODED_TABLES
- for (i = 0; i < 316; i++)
- ff_aac_pow2sf_tab[i] = pow(2, (i - 200)/4.);
-#endif /* CONFIG_HARDCODED_TABLES */
-
- return 0;
-}
-
-static void apply_window_and_mdct(AVCodecContext *avctx, AACEncContext *s,
- SingleChannelElement *sce, short *audio, int channel)
-{
- int i, j, k;
- const float * lwindow = sce->ics.use_kb_window[0] ? ff_aac_kbd_long_1024 : ff_sine_1024;
- const float * swindow = sce->ics.use_kb_window[0] ? ff_aac_kbd_short_128 : ff_sine_128;
- const float * pwindow = sce->ics.use_kb_window[1] ? ff_aac_kbd_short_128 : ff_sine_128;
-
- if (sce->ics.window_sequence[0] != EIGHT_SHORT_SEQUENCE) {
- memcpy(s->output, sce->saved, sizeof(float)*1024);
- if(sce->ics.window_sequence[0] == LONG_STOP_SEQUENCE){
- memset(s->output, 0, sizeof(s->output[0]) * 448);
- for(i = 448; i < 576; i++)
- s->output[i] = sce->saved[i] * pwindow[i - 448];
- for(i = 576; i < 704; i++)
- s->output[i] = sce->saved[i];
- }
- if(sce->ics.window_sequence[0] != LONG_START_SEQUENCE){
- j = channel;
- for (i = 0; i < 1024; i++, j += avctx->channels){
- s->output[i+1024] = audio[j] * lwindow[1024 - i - 1];
- sce->saved[i] = audio[j] * lwindow[i];
- }
- }else{
- j = channel;
- for(i = 0; i < 448; i++, j += avctx->channels)
- s->output[i+1024] = audio[j];
- for(i = 448; i < 576; i++, j += avctx->channels)
- s->output[i+1024] = audio[j] * swindow[576 - i - 1];
- memset(s->output+1024+576, 0, sizeof(s->output[0]) * 448);
- j = channel;
- for(i = 0; i < 1024; i++, j += avctx->channels)
- sce->saved[i] = audio[j];
- }
- ff_mdct_calc(&s->mdct1024, sce->coeffs, s->output);
- }else{
- j = channel;
- for (k = 0; k < 1024; k += 128) {
- for(i = 448 + k; i < 448 + k + 256; i++)
- s->output[i - 448 - k] = (i < 1024)
- ? sce->saved[i]
- : audio[channel + (i-1024)*avctx->channels];
- s->dsp.vector_fmul (s->output, k ? swindow : pwindow, 128);
- s->dsp.vector_fmul_reverse(s->output+128, s->output+128, swindow, 128);
- ff_mdct_calc(&s->mdct128, sce->coeffs + k, s->output);
- }
- j = channel;
- for(i = 0; i < 1024; i++, j += avctx->channels)
- sce->saved[i] = audio[j];
- }
-}
-
-/**
- * Encode ics_info element.
- * @see Table 4.6 (syntax of ics_info)
- */
-static void put_ics_info(AACEncContext *s, IndividualChannelStream *info)
-{
- int w;
-
- put_bits(&s->pb, 1, 0); // ics_reserved bit
- put_bits(&s->pb, 2, info->window_sequence[0]);
- put_bits(&s->pb, 1, info->use_kb_window[0]);
- if(info->window_sequence[0] != EIGHT_SHORT_SEQUENCE){
- put_bits(&s->pb, 6, info->max_sfb);
- put_bits(&s->pb, 1, 0); // no prediction
- }else{
- put_bits(&s->pb, 4, info->max_sfb);
- for(w = 1; w < 8; w++){
- put_bits(&s->pb, 1, !info->group_len[w]);
- }
- }
-}
-
-/**
- * Encode MS data.
- * @see 4.6.8.1 "Joint Coding - M/S Stereo"
- */
-static void encode_ms_info(PutBitContext *pb, ChannelElement *cpe)
-{
- int i, w;
-
- put_bits(pb, 2, cpe->ms_mode);
- if(cpe->ms_mode == 1){
- for(w = 0; w < cpe->ch[0].ics.num_windows; w += cpe->ch[0].ics.group_len[w]){
- for(i = 0; i < cpe->ch[0].ics.max_sfb; i++)
- put_bits(pb, 1, cpe->ms_mask[w*16 + i]);
- }
- }
-}
-
-/**
- * Quantize one coefficient.
- * @return absolute value of the quantized coefficient
- * @see 3GPP TS26.403 5.6.2 "Scalefactor determination"
- */
-static av_always_inline int quant(float coef, const float Q)
-{
- return av_clip((int)(pow(fabsf(coef) * Q, 0.75) + 0.4054), 0, 8191);
-}
-
-#if 1
-
-static av_always_inline int quant2(float coef, const float Q)
-{
- return av_clip((int)(pow(fabsf(coef) * Q, 0.75)), 0, 8191);
-}
-
-static const float aac_cb_range[12] = { 0, 3, 3, 3, 3, 9, 9, 8, 8, 13, 13, 17};
-static const float aac_cb_maxval[12] = {0, 1, 1, 2, 2, 4, 4, 7, 7, 12, 12, 16};
-
-/**
- * Calculate rate distortion cost for quantizing with given codebook
- *
- * @return quantization distortion
- */
-static float quantize_band_cost(const float *in, int size, int scale_idx, int cb,
- const float lambda, const float uplim, int *bits)
-{
- const float IQ = ff_aac_pow2sf_tab[200 + scale_idx - SCALE_ONE_POS + SCALE_DIV_512];
- const float Q = ff_aac_pow2sf_tab[200 - scale_idx + SCALE_ONE_POS - SCALE_DIV_512];
- int i, j, k;
- float cost = 0;
- const int dim = cb < FIRST_PAIR_BT ? 4 : 2;
- int resbits = 0;
- const int range = aac_cb_range[cb];
- const int maxval = aac_cb_maxval[cb];
- int offs[4];
-
- if(!cb){
- for(i = 0; i < size; i++)
- cost += in[i]*in[i]*lambda;
- return cost;
- }
- offs[0] = 1;
- for(i = 1; i < dim; i++)
- offs[i] = offs[i-1]*range;
- for(i = 0; i < size; i += dim){
- float mincost;
- int minidx = 0;
- int minbits = 0;
- int quants[4][2], realquants[4][2];
- mincost = 0.0f;
- for(j = 0; j < dim; j++){
- realquants[j][0] = quant2(in[i+j], Q);
- realquants[j][1] = quant (in[i+j], Q);
- for(k = 0; k < 2; k++){
- quants[j][k] = FFMIN(realquants[j][k], maxval);
- if(!IS_CODEBOOK_UNSIGNED(cb) && in[i+j] < 0.0f)
- quants[j][k] = -quants[j][k];
- }
- mincost += in[i+j]*in[i+j]*lambda;
- }
- minidx = IS_CODEBOOK_UNSIGNED(cb) ? 0 : 40;
- minbits = ff_aac_spectral_bits[cb-1][minidx];
- mincost += minbits;
- for(j = 0; j < (1<<dim); j++){
- float rd = 0.0f;
- int curbits;
- int curidx = IS_CODEBOOK_UNSIGNED(cb) ? 0 : 40;
- const float *vec;
- int same = 0;
- for(k = 0; k < dim; k++){
- if((j & (1 << k)) && quants[k][0] == quants[k][1]){
- same = 1;
- break;
- }
- }
- if(same)
- continue;
- for(k = 0; k < dim; k++)
- curidx += quants[k][!!(j & (1 << k))] * offs[dim - 1 - k];
- curbits = ff_aac_spectral_bits[cb-1][curidx];
- vec = &ff_aac_codebook_vectors[cb-1][curidx*dim];
- if(IS_CODEBOOK_UNSIGNED(cb)){
- for(k = 0; k < dim; k++){
- float t = fabsf(in[i+k]);
- float di;
- //do not code with escape sequence small values
- if(vec[k] == 64.0f && t < 39.0f*IQ){
- rd = INFINITY;
- break;
- }
- if(vec[k] == 64.0f){//FIXME: slow
- if(t >= 165140.0f*IQ){ // clipped value
- di = t - 165140.0f;
- curbits += 21;
- }else{
- int c = realquants[k];
- di = t - c*cbrt(c)*IQ;
- curbits += av_log2(c)*2 - 4 + 1;
- }
- }else{
- di = t - vec[k]*IQ;
- }
- if(vec[k] != 0.0f)
- curbits++;
- rd += di*di*lambda;
- }
- }else{
- for(k = 0; k < dim; k++){
- float di = in[i+k] - vec[k]*IQ;
- rd += di*di*lambda;
- }
- }
- rd += curbits;
- if(rd < mincost){
- mincost = rd;
- minidx = j;
- minbits = curbits;
- }
- }
- cost += mincost;
- resbits += minbits;
- if(cost >= uplim)
- return uplim;
- }
-
- if(bits)
- *bits = resbits;
- return cost;
-}
-
-static void quantize_and_encode_band(PutBitContext *pb, const float *in, int size,
- int scale_idx, int cb, const float lambda)
-{
- const float IQ = ff_aac_pow2sf_tab[200 + scale_idx - SCALE_ONE_POS + SCALE_DIV_512];
- const float Q = ff_aac_pow2sf_tab[200 - scale_idx + SCALE_ONE_POS - SCALE_DIV_512];
- const int range = aac_cb_range[cb];
- const int maxval = aac_cb_maxval[cb];
- const int dim = (cb < FIRST_PAIR_BT) ? 4 : 2;
- int i, j, k;
- int offs[4];
-
- if(!cb)
- return;
-
- offs[0] = 1;
- for(i = 1; i < dim; i++)
- offs[i] = offs[i-1]*range;
- for(i = 0; i < size; i += dim){
- float mincost;
- int minidx = 0;
- int minbits = 0;
- int quants[4][2];
- mincost = 0.0f;
- for(j = 0; j < dim; j++){
- quants[j][0] = av_clip(quant2(in[i+j], Q), -maxval, maxval);
- quants[j][1] = av_clip(quant (in[i+j], Q), -maxval, maxval);
- for(k = 0; k < 2; k++){
- quants[j][k] = FFMIN(quants[j][k], maxval);
- if(!IS_CODEBOOK_UNSIGNED(cb) && in[i+j] < 0.0f)
- quants[j][k] = -quants[j][k];
- }
- mincost += in[i+j]*in[i+j]*lambda;
- }
- minidx = IS_CODEBOOK_UNSIGNED(cb) ? 0 : 40;
- minbits = ff_aac_spectral_bits[cb-1][minidx];
- mincost += minbits;
- for(j = 0; j < (1<<dim); j++){
- float rd = 0.0f;
- int curbits;
- int curidx = IS_CODEBOOK_UNSIGNED(cb) ? 0 : 40;
- const float *vec;
- int same = 0;
- for(k = 0; k < dim; k++){
- if((j & (1 << k)) && quants[k][0] == quants[k][1]){
- same = 1;
- break;
- }
- }
- if(same)
- continue;
- for(k = 0; k < dim; k++)
- curidx += quants[k][!!(j & (1 << k))] * offs[dim - 1 - k];
- curbits = ff_aac_spectral_bits[cb-1][curidx];
- vec = &ff_aac_codebook_vectors[cb-1][curidx*dim];
- if(IS_CODEBOOK_UNSIGNED(cb)){
- for(k = 0; k < dim; k++){
- float t = fabsf(in[i+k]);
- float di;
- //do not code with escape sequence small values
- if(vec[k] == 64.0f && t < 39.0f*IQ){
- rd = INFINITY;
- break;
- }
- if(vec[k] == 64.0f){//FIXME: slow
- if(t >= 165140.0f*IQ){ // clipped value
- di = t - 165140.0f;
- curbits += 21;
- }else{
- int c = quant(t, Q);
- di = t - c*cbrt(c)*IQ;
- curbits += av_log2(c)*2 - 4 + 1;
- }
- }else{
- di = t - vec[k]*IQ;
- }
- if(vec[k] != 0.0f)
- curbits++;
- rd += di*di*lambda;
- }
- }else{
- for(k = 0; k < dim; k++){
- float di = in[i+k] - vec[k]*IQ;
- rd += di*di*lambda;
- }
- }
- rd += curbits;
- if(rd < mincost){
- mincost = rd;
- minidx = curidx;
- minbits = curbits;
- }
- }
- put_bits(pb, ff_aac_spectral_bits[cb-1][minidx], ff_aac_spectral_codes[cb-1][minidx]);
- if(IS_CODEBOOK_UNSIGNED(cb))
- for(j = 0; j < dim; j++)
- if(ff_aac_codebook_vectors[cb-1][minidx*dim+j] != 0.0f)
- put_bits(pb, 1, in[i+j] < 0.0f);
- if(cb == ESC_BT){
- for(j = 0; j < 2; j++){
- if(ff_aac_codebook_vectors[cb-1][minidx*2+j] == 64.0f){
- int coef = quant(in[i+j], Q);
- int len = av_log2(coef);
-
- put_bits(pb, len - 4 + 1, (1 << (len - 4 + 1)) - 2);
- put_bits(pb, len, coef & ((1 << len) - 1));
- }
- }
- }
- }
-}
-
-#else
-
-/**
- * Calculate rate distortion cost for quantizing with given codebook
- *
- * @return quantization distortion
- */
-static float quantize_band_cost(const float *in, int size, int scale_idx, int cb,
- const float lambda, const float uplim, int *bits)
-{
- const float Q = ff_aac_pow2sf_tab[200 + scale_idx - SCALE_ONE_POS + SCALE_DIV_512];
- int i, j, k;
- float cost = 0;
- const int dim = cb < FIRST_PAIR_BT ? 4 : 2;
- int resbits = 0;
-
- if(!cb){
- for(i = 0; i < size; i++)
- cost += in[i]*in[i]*lambda;
- return cost;
- }
- for(i = 0; i < size; i += dim){
- float mincost = INFINITY;
- int minidx = 0;
- int minbits = 0;
- const float *vec = ff_aac_codebook_vectors[cb-1];
- for(j = 0; j < ff_aac_spectral_sizes[cb-1]; j++, vec += dim){
- float rd = 0.0f;
- int curbits = ff_aac_spectral_bits[cb-1][j];
- if(IS_CODEBOOK_UNSIGNED(cb)){
- for(k = 0; k < dim; k++){
- float t = fabsf(in[i+k]);
- float di;
- //do not code with escape sequence small values
- if(vec[k] == 64.0f && t < 39.0f*Q){
- rd = INFINITY;
- break;
- }
- if(vec[k] == 64.0f){//FIXME: slow
- if(t >= 165140.0f*Q){ // clipped value
- di = t - 165140.0f;
- curbits += 21;
- }else{
- int c = quant(t, 1.0/Q);
- di = t - c*cbrt(c)*Q;
- curbits += av_log2(c)*2 - 4 + 1;
- }
- }else{
- di = t - vec[k]*Q;
- }
- if(vec[k] != 0.0f)
- curbits++;
- rd += di*di*lambda;
- }
- }else{
- for(k = 0; k < dim; k++){
- float di = in[i+k] - vec[k]*Q;
- rd += di*di*lambda;
- }
- }
- rd += curbits;
- if(rd < mincost){
- mincost = rd;
- minidx = j;
- minbits = curbits;
- }
- }
- cost += mincost;
- resbits += minbits;
- if(cost >= uplim)
- return uplim;
- }
-
- if(bits)
- *bits = resbits;
- return cost;
-}
-
-/**
- * Prepare coefficients for encoding.
- *
- * @return sum of coefficient absolute values
- */
-static void quantize_and_encode_band(PutBitContext *pb, const float *in, int size,
- int scale_idx, int cb, const float lambda)
-{
- const float Q = ff_aac_pow2sf_tab[200 + scale_idx - SCALE_ONE_POS + SCALE_DIV_512];
- const float IQ = ff_aac_pow2sf_tab[200 - scale_idx + SCALE_ONE_POS - SCALE_DIV_512];
- int i, j, k;
- const int dim = cb < FIRST_PAIR_BT ? 4 : 2;
-
- if(!cb)
- return;
-
- for(i = 0; i < size; i += dim){
- float mincost = INFINITY;
- int minidx = 0;
- int minbits = 0;
- const float *vec = ff_aac_codebook_vectors[cb-1];
- for(j = 0; j < ff_aac_spectral_sizes[cb-1]; j++, vec += dim){
- float rd = 0.0f;
- int curbits = ff_aac_spectral_bits[cb-1][j];
- if(IS_CODEBOOK_UNSIGNED(cb)){
- for(k = 0; k < dim; k++){
- float t = fabsf(in[i+k]);
- float di;
- //do not code with escape sequence small values
- if(vec[k] == 64.0f && t < 39.0f*Q){
- rd = INFINITY;
- break;
- }
- if(vec[k] == 64.0f){//FIXME: slow
- if(t >= 165140.0f*Q){ // clipped value
- di = t - 165140.0f;
- curbits += 21;
- }else{
- int c = quant(t, IQ);
- di = t - c*cbrt(c)*Q;
- curbits += av_log2(c)*2 - 4 + 1;
- }
- }else{
- di = t - vec[k]*Q;
- }
- if(vec[k] != 0.0f)
- curbits++;
- rd += di*di*lambda;
- }
- }else{
- for(k = 0; k < dim; k++){
- float di = in[i+k] - vec[k]*Q;
- rd += di*di*lambda;
- }
- }
- rd += curbits;
- if(rd < mincost){
- mincost = rd;
- minidx = j;
- minbits = curbits;
- }
- }
- put_bits(pb, ff_aac_spectral_bits[cb-1][minidx], ff_aac_spectral_codes[cb-1][minidx]);
- if(IS_CODEBOOK_UNSIGNED(cb))
- for(j = 0; j < dim; j++)
- if(ff_aac_codebook_vectors[cb-1][minidx*dim+j] != 0.0f)
- put_bits(pb, 1, in[i+j] < 0.0f);
- if(cb == ESC_BT){
- for(j = 0; j < 2; j++){
- if(ff_aac_codebook_vectors[cb-1][minidx*2+j] == 64.0f){
- int coef = quant(in[i+j], IQ);
- int len = av_log2(coef);
-
- put_bits(pb, len - 4 + 1, (1 << (len - 4 + 1)) - 2);
- put_bits(pb, len, coef & ((1 << len) - 1));
- }
- }
- }
- }
-}
-
-#endif
-
-/**
- * structure used in optimal codebook search
- */
-typedef struct BandCodingPath {
- int prev_idx; ///< pointer to the previous path point
- int codebook; ///< codebook for coding band run
- float cost; ///< path cost
- int run;
-} BandCodingPath;
-
-/**
- * Encode band info for single window group bands.
- */
-static void encode_window_bands_info(AACEncContext *s, SingleChannelElement *sce,
- int win, int group_len)
-{
- BandCodingPath path[120][12];
- int w, swb, cb, start, start2, size;
- int i, j;
- const int max_sfb = sce->ics.max_sfb;
- const int run_bits = sce->ics.num_windows == 1 ? 5 : 3;
- const int run_esc = (1 << run_bits) - 1;
- int idx, ppos, count;
- int stackrun[120], stackcb[120], stack_len;
-
- start = win*128;
- for(cb = 0; cb < 12; cb++){
- path[0][cb].cost = 0.0f;
- path[0][cb].prev_idx = -1;
- path[0][cb].run = 0;
- }
- for(swb = 0; swb < max_sfb; swb++){
- start2 = start;
- size = sce->ics.swb_sizes[swb];
- if(sce->zeroes[win*16 + swb]){
- for(cb = 0; cb < 12; cb++){
- path[swb+1][cb].prev_idx = cb;
- path[swb+1][cb].cost = path[swb][cb].cost;
- path[swb+1][cb].run = path[swb][cb].run + 1;
- }
- }else{
- float minrd = INFINITY;
- int mincb = 0;
- for(cb = 0; cb < 12; cb++){
- float rd = 0.0f;
- for(w = 0; w < group_len; w++){
- FFPsyBand *band = &s->psy.psy_bands[s->cur_channel*PSY_MAX_BANDS+(win+w)*16+swb];
- rd += quantize_band_cost(sce->coeffs + start + w*128, size,
- sce->sf_idx[(win+w)*16+swb], cb,
- s->lambda / band->threshold, INFINITY, NULL);
- }
- if( run_value_bits[sce->ics.num_windows == 8][path[swb][cb].run]
- != run_value_bits[sce->ics.num_windows == 8][path[swb][cb].run+1])
- rd += run_bits;
- path[swb+1][cb].prev_idx = cb;
- path[swb+1][cb].cost = path[swb][cb].cost + rd;
- path[swb+1][cb].run = path[swb][cb].run + 1;
- if(rd < minrd){
- minrd = rd;
- mincb = cb;
- }
- }
- for(cb = 0; cb < 12; cb++){
- float cost = path[swb][cb].cost + minrd + run_bits + 4;
- if(cost < path[swb+1][cb].cost){
- path[swb+1][cb].prev_idx = mincb;
- path[swb+1][cb].cost = cost;
- path[swb+1][cb].run = 1;
- }
- }
- }
- start += sce->ics.swb_sizes[swb];
- }
-
- //convert resulting path from backward-linked list
- stack_len = 0;
- idx = 0;
- for(cb = 1; cb < 12; cb++){
- if(path[max_sfb][cb].cost < path[max_sfb][idx].cost)
- idx = cb;
- }
- ppos = max_sfb;
- while(ppos > 0){
- cb = idx;
- stackrun[stack_len] = path[ppos][cb].run;
- stackcb [stack_len] = cb;
- idx = path[ppos][cb].prev_idx;
- ppos -= path[ppos][cb].run;
- stack_len++;
- }
- //perform actual band info encoding
- start = 0;
- for(i = stack_len - 1; i >= 0; i--){
- put_bits(&s->pb, 4, stackcb[i]);
- count = stackrun[i];
- memset(sce->zeroes + win*16 + start, !stackcb[i], count);
- //XXX: memset when band_type is also uint8_t
- for(j = 0; j < count; j++){
- sce->band_type[win*16 + start] = stackcb[i];
- start++;
- }
- while(count >= run_esc){
- put_bits(&s->pb, run_bits, run_esc);
- count -= run_esc;
- }
- put_bits(&s->pb, run_bits, count);
- }
-}
-
-/**
- * Produce integer coefficients from scalefactors provided by the model.
- */
-static void adjust_frame_information(AACEncContext *apc, ChannelElement *cpe, int chans)
-{
- int i, w, w2, g, ch;
- int start, sum, maxsfb, cmaxsfb;
-
- for(ch = 0; ch < chans; ch++){
- IndividualChannelStream *ics = &cpe->ch[ch].ics;
- start = 0;
- maxsfb = 0;
- cpe->ch[ch].pulse.num_pulse = 0;
- for(w = 0; w < ics->num_windows*16; w += 16){
- for(g = 0; g < ics->num_swb; g++){
- sum = 0;
- //apply M/S
- if(!ch && cpe->ms_mask[w + g]){
- for(i = 0; i < ics->swb_sizes[g]; i++){
- cpe->ch[0].coeffs[start+i] = (cpe->ch[0].coeffs[start+i] + cpe->ch[1].coeffs[start+i]) / 2.0;
- cpe->ch[1].coeffs[start+i] = cpe->ch[0].coeffs[start+i] - cpe->ch[1].coeffs[start+i];
- }
- }
- start += ics->swb_sizes[g];
- }
- for(cmaxsfb = ics->num_swb; cmaxsfb > 0 && cpe->ch[ch].zeroes[w+cmaxsfb-1]; cmaxsfb--);
- maxsfb = FFMAX(maxsfb, cmaxsfb);
- }
- ics->max_sfb = maxsfb;
-
- //adjust zero bands for window groups
- for(w = 0; w < ics->num_windows; w += ics->group_len[w]){
- for(g = 0; g < ics->max_sfb; g++){
- i = 1;
- for(w2 = w; w2 < w + ics->group_len[w]; w2++){
- if(!cpe->ch[ch].zeroes[w2*16 + g]){
- i = 0;
- break;
- }
- }
- cpe->ch[ch].zeroes[w*16 + g] = i;
- }
- }
- }
-
- if(chans > 1 && cpe->common_window){
- IndividualChannelStream *ics0 = &cpe->ch[0].ics;
- IndividualChannelStream *ics1 = &cpe->ch[1].ics;
- int msc = 0;
- ics0->max_sfb = FFMAX(ics0->max_sfb, ics1->max_sfb);
- ics1->max_sfb = ics0->max_sfb;
- for(w = 0; w < ics0->num_windows*16; w += 16)
- for(i = 0; i < ics0->max_sfb; i++)
- if(cpe->ms_mask[w+i]) msc++;
- if(msc == 0 || ics0->max_sfb == 0) cpe->ms_mode = 0;
- else cpe->ms_mode = msc < ics0->max_sfb ? 1 : 2;
- }
-}
-
-typedef struct TrellisPath {
- float cost;
- int prev;
- int min_val;
- int max_val;
-} TrellisPath;
-
-static void search_for_quantizers_anmr(AACEncContext *s, SingleChannelElement *sce, const float lambda)
-{
- int q, w, w2, g, start = 0;
- int i;
- int idx;
- TrellisPath paths[256*121];
- int bandaddr[121];
- int minq;
- float mincost;
-
- for(i = 0; i < 256; i++){
- paths[i].cost = 0.0f;
- paths[i].prev = -1;
- paths[i].min_val = i;
- paths[i].max_val = i;
- }
- for(i = 256; i < 256*121; i++){
- paths[i].cost = INFINITY;
- paths[i].prev = -2;
- paths[i].min_val = INT_MAX;
- paths[i].max_val = 0;
- }
- idx = 256;
- for(w = 0; w < sce->ics.num_windows; w += sce->ics.group_len[w]){
- start = w*128;
- for(g = 0; g < sce->ics.num_swb; g++){
- const float *coefs = sce->coeffs + start;
- float qmin, qmax;
- int nz = 0;
-
- bandaddr[idx >> 8] = w*16+g;
- qmin = INT_MAX;
- qmax = 0.0f;
- for(w2 = 0; w2 < sce->ics.group_len[w]; w2++){
- FFPsyBand *band = &s->psy.psy_bands[s->cur_channel*PSY_MAX_BANDS+(w+w2)*16+g];
- if(band->energy <= band->threshold || band->threshold == 0.0f){
- sce->zeroes[(w+w2)*16+g] = 1;
- continue;
- }
- sce->zeroes[(w+w2)*16+g] = 0;
- nz = 1;
- for(i = 0; i < sce->ics.swb_sizes[g]; i++){
- float t = fabsf(coefs[w2*128+i]);
- if(t > 0.0f) qmin = fminf(qmin, t);
- qmax = fmaxf(qmax, t);
- }
- }
- if(nz){
- int minscale, maxscale;
- float minrd = INFINITY;
- //minimum scalefactor index is when minimum nonzero coefficient after quantizing is not clipped
- minscale = av_clip_uint8(log2(qmin)*4 - 69 + SCALE_ONE_POS - SCALE_DIV_512);
- //maximum scalefactor index is when maximum coefficient after quantizing is still not zero
- maxscale = av_clip_uint8(log2(qmax)*4 + 6 + SCALE_ONE_POS - SCALE_DIV_512);
- for(q = minscale; q < maxscale; q++){
- float dists[12], dist;
- memset(dists, 0, sizeof(dists));
- for(w2 = 0; w2 < sce->ics.group_len[w]; w2++){
- FFPsyBand *band = &s->psy.psy_bands[s->cur_channel*PSY_MAX_BANDS+(w+w2)*16+g];
- int cb;
- for(cb = 0; cb <= ESC_BT; cb++){
- dists[cb] += quantize_band_cost(coefs + w2*128, sce->ics.swb_sizes[g],
- q, cb, s->lambda / band->threshold, INFINITY, NULL);
- }
- }
- dist = dists[0];
- for(i = 1; i <= ESC_BT; i++)
- dist = fminf(dist, dists[i]);
- minrd = fminf(minrd, dist);
-
- for(i = FFMAX(q - SCALE_MAX_DIFF, 0); i < FFMIN(q + SCALE_MAX_DIFF, 256); i++){
- float cost;
- int minv, maxv;
- if(isinf(paths[idx - 256 + i].cost))
- continue;
- cost = paths[idx - 256 + i].cost + dist
- + ff_aac_scalefactor_bits[q - i + SCALE_DIFF_ZERO];
- minv = FFMIN(paths[idx - 256 + i].min_val, q);
- maxv = FFMAX(paths[idx - 256 + i].max_val, q);
- if(cost < paths[idx + q].cost && maxv-minv < SCALE_MAX_DIFF){
- paths[idx + q].cost = cost;
- paths[idx + q].prev = idx - 256 + i;
- paths[idx + q].min_val = minv;
- paths[idx + q].max_val = maxv;
- }
- }
- }
- }else{
- for(q = 0; q < 256; q++){
- if(!isinf(paths[idx - 256 + q].cost)){
- paths[idx + q].cost = paths[idx - 256 + q].cost + 1;
- paths[idx + q].prev = idx - 256 + q;
- paths[idx + q].min_val = FFMIN(paths[idx - 256 + q].min_val, q);
- paths[idx + q].max_val = FFMAX(paths[idx - 256 + q].max_val, q);
- continue;
- }
- for(i = FFMAX(q - SCALE_MAX_DIFF, 0); i < FFMIN(q + SCALE_MAX_DIFF, 256); i++){
- float cost;
- int minv, maxv;
- if(isinf(paths[idx - 256 + i].cost))
- continue;
- cost = paths[idx - 256 + i].cost + ff_aac_scalefactor_bits[q - i + SCALE_DIFF_ZERO];
- minv = FFMIN(paths[idx - 256 + i].min_val, q);
- maxv = FFMAX(paths[idx - 256 + i].max_val, q);
- if(cost < paths[idx + q].cost && maxv-minv < SCALE_MAX_DIFF){
- paths[idx + q].cost = cost;
- paths[idx + q].prev = idx - 256 + i;
- paths[idx + q].min_val = minv;
- paths[idx + q].max_val = maxv;
- }
- }
- }
- }
- sce->zeroes[w*16+g] = !nz;
- start += sce->ics.swb_sizes[g];
- idx += 256;
- }
- }
- idx -= 256;
- mincost = paths[idx].cost;
- minq = idx;
- for(i = 1; i < 256; i++){
- if(paths[idx + i].cost < mincost){
- mincost = paths[idx + i].cost;
- minq = idx + i;
- }
- }
- while(minq >= 256){
- sce->sf_idx[bandaddr[minq>>8]] = minq & 0xFF;
- minq = paths[minq].prev;
- }
- //set the same quantizers inside window groups
- for(w = 0; w < sce->ics.num_windows; w += sce->ics.group_len[w])
- for(g = 0; g < sce->ics.num_swb; g++)
- for(w2 = 1; w2 < sce->ics.group_len[w]; w2++)
- sce->sf_idx[(w+w2)*16+g] = sce->sf_idx[w*16+g];
-}
-
-/**
- * two-loop quantizers search taken from ISO 13818-7 Appendix C
- */
-static void search_for_quantizers_twoloop(AVCodecContext *avctx, AACEncContext *s,
- SingleChannelElement *sce, const float lambda)
-{
- int start = 0, i, w, w2, g;
- int destbits = avctx->bit_rate * 1024.0 / avctx->sample_rate / avctx->channels;
- float dists[128], uplims[128];
- int fflag, minscaler;
- int its = 0;
- int allz = 0;
- float minthr = INFINITY;
-
- //XXX: some heuristic to determine initial quantizers will reduce search time
- memset(dists, 0, sizeof(dists));
- //determine zero bands and upper limits
- for(w = 0; w < sce->ics.num_windows; w += sce->ics.group_len[w]){
- for(g = 0; g < sce->ics.num_swb; g++){
- int nz = 0;
- float uplim = 0.0f;
- for(w2 = 0; w2 < sce->ics.group_len[w]; w2++){
- FFPsyBand *band = &s->psy.psy_bands[s->cur_channel*PSY_MAX_BANDS+(w+w2)*16+g];
- uplim += band->threshold;
- if(band->energy <= band->threshold || band->threshold == 0.0f){
- sce->zeroes[(w+w2)*16+g] = 1;
- continue;
- }
- nz = 1;
- }
- uplims[w*16+g] = uplim *512;
- sce->zeroes[w*16+g] = !nz;
- if(nz)
- minthr = fminf(minthr, uplim);
- allz = FFMAX(allz, nz);
- }
- }
- for(w = 0; w < sce->ics.num_windows; w += sce->ics.group_len[w]){
- for(g = 0; g < sce->ics.num_swb; g++){
- if(sce->zeroes[w*16+g]){
- sce->sf_idx[w*16+g] = SCALE_ONE_POS;
- continue;
- }
- sce->sf_idx[w*16+g] = SCALE_ONE_POS + fminf(log2(uplims[w*16+g]/minthr)*4,59);
- }
- }
-
- if(!allz)
- return;
- //perform two-loop search
- //outer loop - improve quality
- do{
- int tbits, qstep;
- minscaler = sce->sf_idx[0];
- //inner loop - quantize spectrum to fit into given number of bits
- qstep = its ? 1 : 32;
- do{
- int prev = -1;
- tbits = 0;
- fflag = 0;
- for(w = 0; w < sce->ics.num_windows; w += sce->ics.group_len[w]){
- start = w*128;
- for(g = 0; g < sce->ics.num_swb; g++){
- const float *coefs = sce->coeffs + start;
- int bits = 0;
- int cb;
- float mindist = INFINITY;
- int minbits = 0;
-
- if(sce->zeroes[w*16+g] || sce->sf_idx[w*16+g] >= 218)
- continue;
- minscaler = FFMIN(minscaler, sce->sf_idx[w*16+g]);
- for(cb = 0; cb <= ESC_BT; cb++){
- float dist = 0.0f;
- int bb = 0;
- for(w2 = 0; w2 < sce->ics.group_len[w]; w2++){
- int b;
- dist += quantize_band_cost(coefs + w2*128,
- sce->ics.swb_sizes[g],
- sce->sf_idx[w*16+g],
- ESC_BT,
- 1.0,
- INFINITY,
- &b);
- bb += b;
- }
- if(dist < mindist){
- mindist = dist;
- minbits = bb;
- }
- }
- dists[w*16+g] = mindist - minbits;
- bits = minbits;
- if(prev != -1){
- bits += ff_aac_scalefactor_bits[sce->sf_idx[w*16+g] - prev + SCALE_DIFF_ZERO];
- }
- tbits += bits;
- start += sce->ics.swb_sizes[g];
- prev = sce->sf_idx[w*16+g];
- }
- }
- if(tbits > destbits){
- for(i = 0; i < 128; i++){
- if(sce->sf_idx[i] < 218 - qstep){
- sce->sf_idx[i] += qstep;
- }
- }
- }else{
- for(i = 0; i < 128; i++){
- if(sce->sf_idx[i] > 60 - qstep){
- sce->sf_idx[i] -= qstep;
- }
- }
- }
- qstep >>= 1;
- if(!qstep && tbits > destbits*1.02)
- qstep = 1;
- if(sce->sf_idx[0] >= 217)break;
- }while(qstep);
-
- fflag = 0;
- minscaler = av_clip(minscaler, 60, 255 - SCALE_MAX_DIFF);
- for(w = 0; w < sce->ics.num_windows; w += sce->ics.group_len[w]){
- start = w*128;
- for(g = 0; g < sce->ics.num_swb; g++){
- int prevsc = sce->sf_idx[w*16+g];
- if(dists[w*16+g] > uplims[w*16+g] && sce->sf_idx[w*16+g] > 60)
- sce->sf_idx[w*16+g]--;
- sce->sf_idx[w*16+g] = av_clip(sce->sf_idx[w*16+g], minscaler, minscaler + SCALE_MAX_DIFF);
- sce->sf_idx[w*16+g] = FFMIN(sce->sf_idx[w*16+g], 219);
- if(sce->sf_idx[w*16+g] != prevsc)
- fflag = 1;
- }
- }
- its++;
- }while(fflag && its < 10);
-}
-
-static void search_for_quantizers_faac(AACEncContext *s, SingleChannelElement *sce, const float lambda)
-{
- int start = 0, i, w, w2, g;
- float uplim[128], maxq[128];
- int minq;
-#if 0
- float distfact = ((sce->ics.num_windows > 1) ? 85.80 : 147.84) / lambda;
- int last = 0, lastband = 0, curband = 0;
- float avg_energy = 0.0;
- if(sce->ics.num_windows == 1){
- start = 0;
- for(i = 0; i < 1024; i++){
- if(i - start >= sce->ics.swb_sizes[curband]){
- start += sce->ics.swb_sizes[curband];
- curband++;
- }
- if(sce->coeffs[i]){
- avg_energy += sce->coeffs[i] * sce->coeffs[i];
- last = i;
- lastband = curband;
- }
- }
- }else{
- for(w = 0; w < 8; w++){
- const float *coeffs = sce->coeffs + w*128;
- start = 0;
- for(i = 0; i < 128; i++){
- if(i - start >= sce->ics.swb_sizes[curband]){
- start += sce->ics.swb_sizes[curband];
- curband++;
- }
- if(coeffs[i]){
- avg_energy += coeffs[i] * coeffs[i];
- last = FFMAX(last, i);
- lastband = FFMAX(lastband, curband);
- }
- }
- }
- }
- last++;
- avg_energy /= last;
- for(w = 0; w < sce->ics.num_windows; w += sce->ics.group_len[w]){
- start = w*128;
- for(g = 0; g < sce->ics.num_swb; g++){
- float *coefs = sce->coeffs + start;
- const int size = sce->ics.swb_sizes[g];
- int start2 = start, end2 = start + size, peakpos = start;
- float maxval = -1, thr = 0.0f, t;
- maxq[w*16+g] = 0.0f;
- if(g > lastband){
- maxq[w*16+g] = 0.0f;
- start += size;
- for(w2 = 0; w2 < sce->ics.group_len[w]; w2++)
- memset(coefs + w2*128, 0, sizeof(coefs[0])*size);
- continue;
- }
- for(w2 = 0; w2 < sce->ics.group_len[w]; w2++){
- for(i = 0; i < size; i++){
- float t = coefs[w2*128+i]*coefs[w2*128+i];
- maxq[w*16+g] = fmaxf(maxq[w*16+g], coefs[w2*128 + i]);
- thr += t;
- if(sce->ics.num_windows == 1 && maxval < t){
- maxval = t;
- peakpos = start+i;
- }
- }
- }
- if(sce->ics.num_windows == 1){
- start2 = FFMAX(peakpos - 2, start2);
- end2 = FFMIN(peakpos + 3, end2);
- }
- start += size;
- thr = pow(thr / (avg_energy * (end2 - start2)), 0.3 + 0.1*(lastband - g) / lastband);
- t = 1.0 - (1.0 * start2 / last);
- uplim[w*16+g] = distfact / (1.4 * thr + t*t*t + 0.075);
- }
- }
-#else
- memset(maxq, 0, sizeof(maxq));
- for(w = 0; w < sce->ics.num_windows; w += sce->ics.group_len[w]){
- start = w*128;
- for(g = 0; g < sce->ics.num_swb; g++){
- float *coefs = sce->coeffs + start;
- const int size = sce->ics.swb_sizes[g];
- float thr = 0.0f;
- for(w2 = 0; w2 < sce->ics.group_len[w]; w2++){
- FFPsyBand *band = &s->psy.psy_bands[s->cur_channel*PSY_MAX_BANDS+(w+w2)*16+g];
- thr += band->threshold;
- for(i = 0; i < size; i++){
- maxq[w*16+g] = fmaxf(maxq[w*16+g], fabsf(coefs[w2*128 + i]));
- }
- }
- uplim[w*16+g] = thr / lambda;
- start += size;
- }
- }
-#endif
- memset(sce->sf_idx, 0, sizeof(sce->sf_idx));
- for(w = 0; w < sce->ics.num_windows; w += sce->ics.group_len[w]){
- start = w*128;
- for(g = 0; g < sce->ics.num_swb; g++){
- const float *coefs = sce->coeffs + start;
- const int size = sce->ics.swb_sizes[g];
- int scf, prev_scf, step;
- if(maxq[w*16+g] < 21.544){
- sce->zeroes[w*16+g] = 1;
- continue;
- }
- sce->zeroes[w*16+g] = 0;
- scf = prev_scf = av_clip(SCALE_ONE_POS + log2(1/maxq[w*16+g])*16/3, 60, 218);
- step = 16;
- for(;;){
- float dist = 0.0f, t;
- int quant_max;
-
- for(w2 = 0; w2 < sce->ics.group_len[w]; w2++){
- int b;
- dist += quantize_band_cost(coefs + w2*128,
- sce->ics.swb_sizes[g],
- scf,
- ESC_BT,
- 1.0,
- INFINITY,
- &b);
- dist -= b;
- }
- quant_max = quant(maxq[w*16+g], ff_aac_pow2sf_tab[200 - scf + SCALE_ONE_POS]);
- if(quant_max >= 8191){ // too much, return to the previous quantizer
- sce->sf_idx[w*16+g] = prev_scf;
- break;
- }
- prev_scf = scf;
- t = pow(dist / size, -2.0/3.0);
- if(FFABS(step) > 4){
- int newstep = 4*log(t / maxq[w*16+g])/log(2) - 2;
- step = av_clip(-newstep, -4, 4);
- }
- if(FFABS(step) >= 4){
- step = 1 - step;
- scf += step;
- }else if(t >= uplim[w*16+g]){
- scf -= FFABS(step);
- }else{
- sce->sf_idx[w*16+g] = scf;
- break;
- }
- }
- start += size;
- }
- }
- minq = sce->sf_idx[0] ? sce->sf_idx[0] : INT_MAX;
- for(i = 1; i < 128; i++){
- if(!sce->sf_idx[i])
- sce->sf_idx[i] = sce->sf_idx[i-1];
- else
- minq = FFMIN(minq, sce->sf_idx[i]);
- }
- if(minq == INT_MAX) minq = 0;
- for(i = 126; i >= 0; i--){
- if(!sce->sf_idx[i])
- sce->sf_idx[i] = sce->sf_idx[i+1];
- sce->sf_idx[i] = av_clip(sce->sf_idx[i], minq, minq + SCALE_MAX_DIFF);
- }
-}
-
-static void search_for_quantizers_fast(AACEncContext *s, SingleChannelElement *sce)
-{
- int start = 0, i, w, w2, g;
- int minq = 255;
-
- memset(sce->sf_idx, 0, sizeof(sce->sf_idx));
- for(w = 0; w < sce->ics.num_windows; w += sce->ics.group_len[w]){
- start = w*128;
- for(g = 0; g < sce->ics.num_swb; g++){
- for(w2 = 0; w2 < sce->ics.group_len[w]; w2++){
- FFPsyBand *band = &s->psy.psy_bands[s->cur_channel*PSY_MAX_BANDS+(w+w2)*16+g];
- if(band->energy <= band->threshold){
- sce->sf_idx[(w+w2)*16+g] = 218;
- sce->zeroes[(w+w2)*16+g] = 1;
- }else{
- sce->sf_idx[(w+w2)*16+g] = av_clip(SCALE_ONE_POS - SCALE_DIV_512 + log2(band->threshold), 80, 218);
- sce->zeroes[(w+w2)*16+g] = 0;
- }
- minq = FFMIN(minq, sce->sf_idx[(w+w2)*16+g]);
- }
- }
- }
- for(i = 0; i < 128; i++){
- sce->sf_idx[i] = av_clip(sce->sf_idx[i], minq, minq + SCALE_MAX_DIFF - 1);
- }
- //set the same quantizers inside window groups
- for(w = 0; w < sce->ics.num_windows; w += sce->ics.group_len[w])
- for(g = 0; g < sce->ics.num_swb; g++)
- for(w2 = 1; w2 < sce->ics.group_len[w]; w2++)
- sce->sf_idx[(w+w2)*16+g] = sce->sf_idx[w*16+g];
-}
-
-static void search_for_quantizers(AVCodecContext *avctx, AACEncContext *s,
- SingleChannelElement *sce)
-{
- search_for_quantizers_anmr(s, sce, s->lambda);
-// search_for_quantizers_twoloop(avctx, s, sce, s->lambda);
-// search_for_quantizers_faac(s, sce, av_clipf(s->lambda * 2e8, 50.0f, 300.0f));
-// search_for_quantizers_fast(s, sce);
-}
-
-static void search_for_ms(AACEncContext *s, ChannelElement *cpe, const float lambda)
-{
- int start = 0, i, w, w2, g;
- float M[128], S[128];
- SingleChannelElement *sce0 = &cpe->ch[0];
- SingleChannelElement *sce1 = &cpe->ch[1];
- if(!cpe->common_window)
- return;
- for(w = 0; w < sce0->ics.num_windows; w += sce0->ics.group_len[w]){
- for(g = 0; g < sce0->ics.num_swb; g++){
- if(!cpe->ch[0].zeroes[w*16+g] && !cpe->ch[1].zeroes[w*16+g]){
- float dist1 = 0.0f, dist2 = 0.0f;
- for(w2 = 0; w2 < sce0->ics.group_len[w]; w2++){
- FFPsyBand *band0 = &s->psy.psy_bands[(s->cur_channel+0)*PSY_MAX_BANDS+(w+w2)*16+g];
- FFPsyBand *band1 = &s->psy.psy_bands[(s->cur_channel+1)*PSY_MAX_BANDS+(w+w2)*16+g];
- float minthr = fminf(band0->threshold, band1->threshold);
- float maxthr = fmaxf(band0->threshold, band1->threshold);
- for(i = 0; i < sce0->ics.swb_sizes[g]; i++){
- M[i] = (sce0->coeffs[start+w2*128+i]
- + sce1->coeffs[start+w2*128+i])*0.5;
- S[i] = sce0->coeffs[start+w2*128+i]
- - sce1->coeffs[start+w2*128+i];
- }
- dist1 += quantize_band_cost(sce0->coeffs + start + w2*128,
- sce0->ics.swb_sizes[g],
- sce0->sf_idx[(w+w2)*16+g],
- sce0->band_type[(w+w2)*16+g],
- lambda / band0->threshold, INFINITY, NULL);
- dist1 += quantize_band_cost(sce1->coeffs + start + w2*128,
- sce1->ics.swb_sizes[g],
- sce1->sf_idx[(w+w2)*16+g],
- sce1->band_type[(w+w2)*16+g],
- lambda / band1->threshold, INFINITY, NULL);
- dist2 += quantize_band_cost(M,
- sce0->ics.swb_sizes[g],
- sce0->sf_idx[(w+w2)*16+g],
- sce0->band_type[(w+w2)*16+g],
- lambda / maxthr, INFINITY, NULL);
- dist2 += quantize_band_cost(S,
- sce1->ics.swb_sizes[g],
- sce1->sf_idx[(w+w2)*16+g],
- sce1->band_type[(w+w2)*16+g],
- lambda / minthr, INFINITY, NULL);
- }
- cpe->ms_mask[w*16+g] = dist2 < dist1;
- }
- start += sce0->ics.swb_sizes[g];
- }
- }
-}
-
-/**
- * Encode scalefactor band coding type.
- */
-static void encode_band_info(AACEncContext *s, SingleChannelElement *sce)
-{
- int w;
-
- for(w = 0; w < sce->ics.num_windows; w += sce->ics.group_len[w]){
- encode_window_bands_info(s, sce, w, sce->ics.group_len[w]);
- }
-}
-
-/**
- * Encode scalefactors.
- */
-static void encode_scale_factors(AVCodecContext *avctx, AACEncContext *s, SingleChannelElement *sce)
-{
- int off = sce->sf_idx[0], diff;
- int i, w;
-
- for(w = 0; w < sce->ics.num_windows; w += sce->ics.group_len[w]){
- for(i = 0; i < sce->ics.max_sfb; i++){
- if(!sce->zeroes[w*16 + i]){
- diff = sce->sf_idx[w*16 + i] - off + SCALE_DIFF_ZERO;
- if(diff < 0 || diff > 120) av_log(avctx, AV_LOG_ERROR, "Scalefactor difference is too big to be coded\n");
- off = sce->sf_idx[w*16 + i];
- put_bits(&s->pb, ff_aac_scalefactor_bits[diff], ff_aac_scalefactor_code[diff]);
- }
- }
- }
-}
-
-/**
- * Encode pulse data.
- */
-static void encode_pulses(AACEncContext *s, Pulse *pulse)
-{
- int i;
-
- put_bits(&s->pb, 1, !!pulse->num_pulse);
- if(!pulse->num_pulse) return;
-
- put_bits(&s->pb, 2, pulse->num_pulse - 1);
- put_bits(&s->pb, 6, pulse->start);
- for(i = 0; i < pulse->num_pulse; i++){
- put_bits(&s->pb, 5, pulse->pos[i]);
- put_bits(&s->pb, 4, pulse->amp[i]);
- }
-}
-
-/**
- * Encode spectral coefficients processed by psychoacoustic model.
- */
-static void encode_spectral_coeffs(AACEncContext *s, SingleChannelElement *sce)
-{
- int start, i, w, w2;
-
- for(w = 0; w < sce->ics.num_windows; w += sce->ics.group_len[w]){
- start = 0;
- for(i = 0; i < sce->ics.max_sfb; i++){
- if(sce->zeroes[w*16 + i]){
- start += sce->ics.swb_sizes[i];
- continue;
- }
- for(w2 = w; w2 < w + sce->ics.group_len[w]; w2++){
- quantize_and_encode_band(&s->pb, sce->coeffs + start + w2*128,
- sce->ics.swb_sizes[i],
- sce->sf_idx[w*16 + i],
- sce->band_type[w*16 + i],
- s->lambda);
- }
- start += sce->ics.swb_sizes[i];
- }
- }
-}
-
-/**
- * Encode one channel of audio data.
- */
-static int encode_individual_channel(AVCodecContext *avctx, AACEncContext *s, SingleChannelElement *sce, int common_window)
-{
- put_bits(&s->pb, 8, sce->sf_idx[0]);
- if(!common_window) put_ics_info(s, &sce->ics);
- encode_band_info(s, sce);
- encode_scale_factors(avctx, s, sce);
- encode_pulses(s, &sce->pulse);
- put_bits(&s->pb, 1, 0); //tns
- put_bits(&s->pb, 1, 0); //ssr
- encode_spectral_coeffs(s, sce);
- return 0;
-}
-
-/**
- * Write some auxiliary information about the created AAC file.
- */
-static void put_bitstream_info(AVCodecContext *avctx, AACEncContext *s, const char *name)
-{
- int i, namelen, padbits;
-
- namelen = strlen(name) + 2;
- put_bits(&s->pb, 3, TYPE_FIL);
- put_bits(&s->pb, 4, FFMIN(namelen, 15));
- if(namelen >= 15)
- put_bits(&s->pb, 8, namelen - 16);
- put_bits(&s->pb, 4, 0); //extension type - filler
- padbits = 8 - (put_bits_count(&s->pb) & 7);
- align_put_bits(&s->pb);
- for(i = 0; i < namelen - 2; i++)
- put_bits(&s->pb, 8, name[i]);
- put_bits(&s->pb, 12 - padbits, 0);
-}
-
-static int aac_encode_frame(AVCodecContext *avctx,
- uint8_t *frame, int buf_size, void *data)
-{
- AACEncContext *s = avctx->priv_data;
- int16_t *samples = s->samples, *samples2, *la;
- ChannelElement *cpe;
- int i, j, chans, tag, start_ch;
- const uint8_t *chan_map = aac_chan_configs[avctx->channels-1];
- int chan_el_counter[4];
-
- if(s->last_frame)
- return 0;
- if(data){
- if(!s->psypp){
- memcpy(s->samples + 1024 * avctx->channels, data, 1024 * avctx->channels * sizeof(s->samples[0]));
- }else{
- start_ch = 0;
- samples2 = s->samples + 1024 * avctx->channels;
- for(i = 0; i < chan_map[0]; i++){
- tag = chan_map[i+1];
- chans = tag == TYPE_CPE ? 2 : 1;
- ff_psy_preprocess(s->psypp, (uint16_t*)data + start_ch, samples2 + start_ch, start_ch + i, chans);
- start_ch += chans;
- }
- }
- }
- if(!avctx->frame_number){
- memcpy(s->samples, s->samples + 1024 * avctx->channels, 1024 * avctx->channels * sizeof(s->samples[0]));
- return 0;
- }
-
- init_put_bits(&s->pb, frame, buf_size*8);
- if((avctx->frame_number & 0xFF)==1 && !(avctx->flags & CODEC_FLAG_BITEXACT)){
- put_bitstream_info(avctx, s, LIBAVCODEC_IDENT);
- }
- start_ch = 0;
- memset(chan_el_counter, 0, sizeof(chan_el_counter));
- for(i = 0; i < chan_map[0]; i++){
- FFPsyWindowInfo wi[2];
- tag = chan_map[i+1];
- chans = tag == TYPE_CPE ? 2 : 1;
- cpe = &s->cpe[i];
- samples2 = samples + start_ch;
- la = samples2 + 1024 * avctx->channels + start_ch;
- if(!data) la = NULL;
- s->lambda = 5e-7f;
- for(j = 0; j < chans; j++){
- IndividualChannelStream *ics = &cpe->ch[j].ics;
- int k;
- wi[j] = ff_psy_suggest_window(&s->psy, samples2, la, start_ch + j, ics->window_sequence[0]);
- ics->window_sequence[1] = ics->window_sequence[0];
- ics->window_sequence[0] = wi[j].window_type[0];
- ics->use_kb_window[1] = ics->use_kb_window[0];
- ics->use_kb_window[0] = wi[j].window_shape;
- ics->num_windows = wi[j].num_windows;
- ics->swb_sizes = s->psy.bands [ics->num_windows == 8];
- ics->num_swb = s->psy.num_bands[ics->num_windows == 8];
- for(k = 0; k < ics->num_windows; k++)
- ics->group_len[k] = wi[j].grouping[k];
-
- s->cur_channel = start_ch + j;
- apply_window_and_mdct(avctx, s, &cpe->ch[j], samples2, j);
- search_for_quantizers(avctx, s, &cpe->ch[j]);
- }
- cpe->common_window = 0;
- if(chans > 1
- && wi[0].window_type[0] == wi[1].window_type[0]
- && wi[0].window_shape == wi[1].window_shape){
-
- cpe->common_window = 1;
- for(j = 0; j < wi[0].num_windows; j++){
- if(wi[0].grouping[j] != wi[1].grouping[j]){
- cpe->common_window = 0;
- break;
- }
- }
- }
-// search_for_ms(s, cpe, s->lambda);
- adjust_frame_information(s, cpe, chans);
- put_bits(&s->pb, 3, tag);
- put_bits(&s->pb, 4, chan_el_counter[tag]++);
- if(chans == 2){
- put_bits(&s->pb, 1, cpe->common_window);
- if(cpe->common_window){
- put_ics_info(s, &cpe->ch[0].ics);
- encode_ms_info(&s->pb, cpe);
- }
- }
- for(j = 0; j < chans; j++){
- s->cur_channel = start_ch + j;
- ff_psy_set_band_info(&s->psy, s->cur_channel, cpe->ch[j].coeffs, &wi[j]);
- encode_individual_channel(avctx, s, &cpe->ch[j], cpe->common_window);
- }
- start_ch += chans;
- }
-
- put_bits(&s->pb, 3, TYPE_END);
- flush_put_bits(&s->pb);
- avctx->frame_bits = put_bits_count(&s->pb);
-
- if(!data)
- s->last_frame = 1;
- memcpy(s->samples, s->samples + 1024 * avctx->channels, 1024 * avctx->channels * sizeof(s->samples[0]));
- return put_bits_count(&s->pb)>>3;
-}
-
-static av_cold int aac_encode_end(AVCodecContext *avctx)
-{
- AACEncContext *s = avctx->priv_data;
-
- ff_mdct_end(&s->mdct1024);
- ff_mdct_end(&s->mdct128);
- ff_psy_end(&s->psy);
- ff_psy_preprocess_end(s->psypp);
- av_freep(&s->samples);
- av_freep(&s->cpe);
- return 0;
-}
-
-AVCodec aac_encoder = {
- "aac",
- CODEC_TYPE_AUDIO,
- CODEC_ID_AAC,
- sizeof(AACEncContext),
- aac_encode_init,
- aac_encode_frame,
- aac_encode_end,
- .capabilities = CODEC_CAP_SMALL_LAST_FRAME | CODEC_CAP_DELAY,
- .sample_fmts = (enum SampleFormat[]){SAMPLE_FMT_S16,SAMPLE_FMT_NONE},
- .long_name = NULL_IF_CONFIG_SMALL("Advanced Audio Coding"),
-};
+#endif /* AVCODEC_AACENC_H */
1
0
Author: kostya
Date: Mon Jan 26 15:00:57 2009
New Revision: 4007
Log:
Sync aac.h to the current FFmpeg SVN
Modified:
aacenc/aac.h
Modified: aacenc/aac.h
==============================================================================
--- aacenc/aac.h Mon Jan 26 14:37:36 2009 (r4006)
+++ aacenc/aac.h Mon Jan 26 15:00:57 2009 (r4007)
@@ -46,7 +46,6 @@
#define MAX_ELEM_ID 16
#define TNS_MAX_ORDER 20
-#define PNS_MEAN_ENERGY 3719550720.0f // sqrt(3.0) * 1<<31
enum AudioObjectType {
AOT_NULL,
@@ -133,6 +132,20 @@ enum CouplingPoint {
AFTER_IMDCT = 3,
};
+/**
+ * Predictor State
+ */
+typedef struct {
+ float cor0;
+ float cor1;
+ float var0;
+ float var1;
+ float r0;
+ float r1;
+} PredictorState;
+
+#define MAX_PREDICTORS 672
+
#define SCALE_DIV_512 36 ///< scalefactor difference that corresponds to scale difference in 512 times
#define SCALE_ONE_POS 140 ///< scalefactor index that corresponds to scale=1.0
#define SCALE_MAX_POS 255 ///< scalefactor index maximum value
@@ -153,6 +166,10 @@ typedef struct {
int num_swb; ///< number of scalefactor window bands
int num_windows;
int tns_max_bands;
+ int predictor_present;
+ int predictor_initialized;
+ int predictor_reset_group;
+ uint8_t prediction_used[41];
} IndividualChannelStream;
/**
@@ -198,8 +215,8 @@ typedef struct {
int num_coupled; ///< number of target elements
enum RawDataBlockType type[8]; ///< Type of channel element to be coupled - SCE or CPE.
int id_select[8]; ///< element id
- int ch_select[8]; /**< [0] shared list of gains; [1] list of gains for left channel;
- * [2] list of gains for right channel; [3] lists of gains for both channels
+ int ch_select[8]; /**< [0] shared list of gains; [1] list of gains for right channel;
+ * [2] list of gains for left channel; [3] lists of gains for both channels
*/
float gain[16][120];
} ChannelCoupling;
@@ -220,6 +237,7 @@ typedef struct {
DECLARE_ALIGNED_16(float, saved[1024]); ///< overlap
DECLARE_ALIGNED_16(float, ret[1024]); ///< PCM output
DECLARE_ALIGNED_16(int, icoefs[1024]); ///< integer coefficients for encoding
+ PredictorState predictor_state[MAX_PREDICTORS];
} SingleChannelElement;
/**
@@ -284,6 +302,7 @@ typedef struct {
int sf_offset; ///< offset into pow2sf_tab as appropriate for dsp.float_to_int16
/** @} */
+ DECLARE_ALIGNED(16, float, temp[128]);
} AACContext;
#endif /* AVCODEC_AAC_H */
1
0
Author: kostya
Date: Mon Jan 26 14:37:36 2009
New Revision: 4006
Log:
Sync AAC encoder to current FFmpeg CONFIG_ handling policy
Modified:
aacenc/aacenc.c
Modified: aacenc/aacenc.c
==============================================================================
--- aacenc/aacenc.c Sun Jan 25 16:56:43 2009 (r4005)
+++ aacenc/aacenc.c Mon Jan 26 14:37:36 2009 (r4006)
@@ -232,7 +232,7 @@ static av_cold int aac_encode_init(AVCod
ff_psy_init(&s->psy, avctx, 2, sizes, lengths);
s->psypp = ff_psy_preprocess_init(avctx);
-#ifndef CONFIG_HARDCODED_TABLES
+#if !CONFIG_HARDCODED_TABLES
for (i = 0; i < 316; i++)
ff_aac_pow2sf_tab[i] = pow(2, (i - 200)/4.);
#endif /* CONFIG_HARDCODED_TABLES */
1
0
Author: diego
Date: Sun Jan 25 16:56:43 2009
New Revision: 4005
Log:
Add av_cold to initialization functions.
Modified:
jpeg2000/j2kdec.c
jpeg2000/j2kenc.c
Modified: jpeg2000/j2kdec.c
==============================================================================
--- jpeg2000/j2kdec.c Sun Jan 25 16:55:31 2009 (r4004)
+++ jpeg2000/j2kdec.c Sun Jan 25 16:56:43 2009 (r4005)
@@ -924,7 +924,7 @@ static int decode_frame(AVCodecContext *
return s->buf - s->buf_start;
}
-static int j2kdec_init(AVCodecContext *avctx)
+static av_cold int j2kdec_init(AVCodecContext *avctx)
{
J2kDecoderContext *s = avctx->priv_data;
Modified: jpeg2000/j2kenc.c
==============================================================================
--- jpeg2000/j2kenc.c Sun Jan 25 16:55:31 2009 (r4004)
+++ jpeg2000/j2kenc.c Sun Jan 25 16:56:43 2009 (r4005)
@@ -960,7 +960,7 @@ static int encode_frame(AVCodecContext *
return s->buf - s->buf_start;
}
-static int j2kenc_init(AVCodecContext *avctx)
+static av_cold int j2kenc_init(AVCodecContext *avctx)
{
int i, ret;
J2kEncoderContext *s = avctx->priv_data;
1
0
Author: diego
Date: Sun Jan 25 16:55:31 2009
New Revision: 4004
Log:
Add av_cold to initialization functions.
Modified:
dirac/libavcodec/diracdec.c
dirac/libavcodec/diracenc.c
Modified: dirac/libavcodec/diracdec.c
==============================================================================
--- dirac/libavcodec/diracdec.c Sun Jan 25 16:54:19 2009 (r4003)
+++ dirac/libavcodec/diracdec.c Sun Jan 25 16:55:31 2009 (r4004)
@@ -79,7 +79,7 @@ static int add_frame(AVFrame *(*framelis
return -1;
}
-static int decode_init(AVCodecContext *avctx)
+static av_cold int decode_init(AVCodecContext *avctx)
{
DiracContext *s = avctx->priv_data;
Modified: dirac/libavcodec/diracenc.c
==============================================================================
--- dirac/libavcodec/diracenc.c Sun Jan 25 16:54:19 2009 (r4003)
+++ dirac/libavcodec/diracenc.c Sun Jan 25 16:55:31 2009 (r4004)
@@ -37,7 +37,7 @@
#include "dirac_wavelet.h"
#include "mpeg12data.h"
-static int encode_init(AVCodecContext *avctx)
+static av_cold int encode_init(AVCodecContext *avctx)
{
DiracContext *s = avctx->priv_data;
av_log_set_level(AV_LOG_DEBUG);
1
0
Author: diego
Date: Sun Jan 25 16:54:19 2009
New Revision: 4003
Log:
Add av_cold to initialization functions.
Modified:
amr/amrnbdec.c
amr/amrnbfloatdec.c
Modified: amr/amrnbdec.c
==============================================================================
--- amr/amrnbdec.c Sun Jan 25 16:41:13 2009 (r4002)
+++ amr/amrnbdec.c Sun Jan 25 16:54:19 2009 (r4003)
@@ -1286,7 +1286,7 @@ static int amrnb_decode_frame(AVCodecCon
}
-static int amrnb_decode_close(AVCodecContext *avctx)
+static av_cold int amrnb_decode_close(AVCodecContext *avctx)
{
AMRContext *p = avctx->priv_data;
Modified: amr/amrnbfloatdec.c
==============================================================================
--- amr/amrnbfloatdec.c Sun Jan 25 16:41:13 2009 (r4002)
+++ amr/amrnbfloatdec.c Sun Jan 25 16:54:19 2009 (r4003)
@@ -122,7 +122,7 @@ static void reset_state(AMRContext *p)
}
}
-static int amrnb_decode_init(AVCodecContext *avctx)
+static av_cold int amrnb_decode_init(AVCodecContext *avctx)
{
AMRContext *p = avctx->priv_data;
1
0
Author: diego
Date: Sun Jan 25 16:41:13 2009
New Revision: 4002
Log:
Add missing codec long_name declaration.
Modified:
amr/amrnbdec.c
Modified: amr/amrnbdec.c
==============================================================================
--- amr/amrnbdec.c Sun Jan 25 16:40:55 2009 (r4001)
+++ amr/amrnbdec.c Sun Jan 25 16:41:13 2009 (r4002)
@@ -1308,4 +1308,5 @@ AVCodec amrnb_decoder = {
.init = amrnb_decode_init,
.close = amrnb_decode_close,
.decode = amrnb_decode_frame,
+ .long_name = NULL_IF_CONFIG_SMALL("Adaptive Multi-Rate NarrowBand"),
};
1
0
Author: diego
Date: Sun Jan 25 16:40:55 2009
New Revision: 4001
Log:
Add missing NULL_IF_CONFIG_SMALL to codec long_name declaration.
Modified:
amr/amrnbfloatdec.c
Modified: amr/amrnbfloatdec.c
==============================================================================
--- amr/amrnbfloatdec.c Sun Jan 25 16:38:52 2009 (r4000)
+++ amr/amrnbfloatdec.c Sun Jan 25 16:40:55 2009 (r4001)
@@ -1330,6 +1330,6 @@ AVCodec amrnb_decoder = {
.init = amrnb_decode_init,
.close = amrnb_decode_close,
.decode = amrnb_decode_frame,
- .long_name = "Adaptive Multi-Rate NarrowBand",
+ .long_name = NULL_IF_CONFIG_SMALL("Adaptive Multi-Rate NarrowBand"),
};
1
0
25 Jan '09
Author: diego
Date: Sun Jan 25 16:38:52 2009
New Revision: 4000
Log:
spelling/wording/grammar cosmetics
Modified:
amr/amrdata.h
amr/amrnbdec.c
amr/amrnbfloatdata.h
amr/amrnbfloatdec.c
Modified: amr/amrdata.h
==============================================================================
--- amr/amrdata.h Sun Jan 25 16:35:48 2009 (r3999)
+++ amr/amrdata.h Sun Jan 25 16:38:52 2009 (r4000)
@@ -108,7 +108,8 @@ int16_t cos_table[65]; // cosine table u
#define TRACKS_MODE_102 4 // number of tracks for MODE_102
-// FIXME - not quite sure how i'm going to implement this yet and some other variables may be moved around later
+/* FIXME - not quite sure how i'm going to implement this yet
+ * and some other variables may be moved around later */
typedef struct AMRDecoderState {
// Bad frame
int state;
@@ -244,7 +245,7 @@ static const AMROrder order_MODE_DTX[35]
// encoder homing frame pattern
#define EHF_MASK 0x0008
-// Homing frames for the decoder
+// homing frames for the decoder
static const int16_t dhf_MODE_475[PRMS_MODE_475] = {
0x00F8,0x009D,0x001C,0x0066,0x0000,0x0003,0x0028,0x000F,0x0038,0x0001,
0x000F,0x0031,0x0002,0x0008,0x000F,0x0026,0x0003
@@ -376,7 +377,7 @@ static const uint16_t pred_fac[10] = {
11651, 10588, 9767, 8593, 6484
};
-// vector quantised lsf tables
+// vector quantized lsf tables
static const int16_t lsf_3_MODE_515[128][4] = {
{ 419, 163, -30, -262}, { -455, -789,-1430, -721}, { 1006, 664, 269, 25}, { 619, 260, 183, 96},
{ -968,-1358, -388, 135}, { -693, 835, 456, 154}, { 1105, 703, 569, 363}, { 1625, 1326, 985, 748},
@@ -1157,7 +1158,7 @@ static const uint16_t pitch_gain_attenua
6553
};
-// quantisation table for the adaptive codebook gain (MODE_795, MODE_122)
+// quantization table for the adaptive codebook gain (MODE_795, MODE_122)
#define N_PITCH_QUANTS 16
static const uint16_t pitch_gain_quant[N_PITCH_QUANTS] = {
0,
Modified: amr/amrnbdec.c
==============================================================================
--- amr/amrnbdec.c Sun Jan 25 16:35:48 2009 (r3999)
+++ amr/amrnbdec.c Sun Jan 25 16:38:52 2009 (r4000)
@@ -41,18 +41,18 @@ typedef struct AMRContext {
GetBitContext gb;
int16_t *sample_buffer;
- int16_t *amr_prms; ///< pointer to the decoded amr parameters (lsf coefficients, codebook indices, etc)
+ int16_t *amr_prms; ///< pointer to the decoded AMR parameters (lsf coefficients, codebook indexes, etc)
int bad_frame_indicator; ///< bad frame ? 1 : 0
int prev_frame_homing; ///< previous frame was a homing frame ? 1 : 0
enum RXFrameType prev_frame_type; ///< frame type of previous frame
enum Mode prev_frame_mode; ///< mode of previous frame
- int *prev_lsf_dq; ///< previous dequantised lsfs
- int *prev_residual_q; ///< previous quantised residual
+ int *prev_lsf_dq; ///< previous dequantized lsfs
+ int *prev_residual_q; ///< previous quantized residual
- int lsp1_q[LP_FILTER_ORDER]; ///< vector of quantised lsps
- int lsp2_q[LP_FILTER_ORDER]; ///< vector of quantised lsps
+ int lsp1_q[LP_FILTER_ORDER]; ///< vector of quantized lsps
+ int lsp2_q[LP_FILTER_ORDER]; ///< vector of quantized lsps
int cur_frame_homing; ///< current frame homing ? 1 : 0
enum RXFrameType cur_frame_type; ///< current frame type
@@ -96,7 +96,7 @@ static int amrnb_decode_init(AVCodecCont
// allocate and zero the sample buffer
p->sample_buffer = av_mallocz(sizeof(int16_t)*AMR_BLOCK_SIZE);
- // allocate and zero the amr parameters
+ // allocate and zero the AMR parameters
p->amr_prms = av_mallocz(sizeof(int16_t)*PRMS_MODE_122);
// allocate and zero the decoder state
p->state = av_mallocz(sizeof(AMRDecoderState));
@@ -117,13 +117,13 @@ static int amrnb_decode_init(AVCodecCont
/**
- * Decode the bitstream into the AMR parameters and discover the frame mode
+ * Decode the bitstream into the AMR parameters and discover the frame mode.
*
* @param buf pointer to the input buffer
* @param buf_size size of the input buffer
* @param speech_mode pointer to the speech mode
*
- * @return Returns the frame mode
+ * @return the frame mode
*/
enum Mode decode_bitstream(AVCodecContext *avctx, uint8_t *buf, int buf_size,
@@ -134,7 +134,7 @@ enum Mode decode_bitstream(AVCodecContex
int i;
const AMROrder *order;
- // initialise get_bits
+ // initialize get_bits
init_get_bits(&p->gb, buf, buf_size*8);
skip_bits1(&p->gb);
// set the mode
@@ -207,8 +207,8 @@ enum Mode decode_bitstream(AVCodecContex
/**
- * DESCRIPTION FROM REF SOURCE:
- * Make sure that the LSFs are properly ordered and to keep a certain minimum
+ * DESCRIPTION FROM REFERENCE SOURCE:
+ * Make sure that the LSFs are properly ordered and keep a certain minimum
* distance between adjacent LSFs.
*
* @param lsf a vector of lsfs (range: 0<=val<=0.5)
@@ -230,7 +230,7 @@ static void reorder_lsf(int *lsf, int mi
/**
- * Convert a vector of lsfs into the corresponding, cosine domain lsps
+ * Convert a vector of lsfs into the corresponding cosine domain lsps.
*
* @param lsf a vector of lsfs
* @param lsp a vector of lsps
@@ -250,7 +250,7 @@ static void lsf2lsp(int *lsf, int *lsp)
/**
- * Convert a set of 3 lsf quantisation indices into lsp parameters
+ * Convert a set of 3 lsf quantization indexes into lsp parameters.
*
* @param avctx pointer to the AVCodecContext for AMR
*/
@@ -260,12 +260,13 @@ static void decode_lsf2lsp_3(AVCodecCont
AMRContext *p = avctx->priv_data;
int lsf1_r[LP_FILTER_ORDER]; // vector of residual lsfs
- int lsf1_q[LP_FILTER_ORDER]; // vector of quantised lsfs
+ int lsf1_q[LP_FILTER_ORDER]; // vector of quantized lsfs
const int16_t (*lsf_3_temp1)[3], (*lsf_3_temp3)[4]; // temp ptrs for switching tables depending on mode
int index_temp; // temp lsf index
int i; // counter
- // if the current frame is bad estimate the past quantised residual based on the past lsf shifted slightly towards the mean
+ /* if the current frame is bad, estimate the past quantized residual
+ * based on the past lsf shifted slightly towards the mean */
if(p->bad_frame_indicator) {
for(i=0; i<LP_FILTER_ORDER; i++) {
lsf1_q[i] = ( (p->prev_lsf_dq[i]*ALPHA)>>15 ) + ( (lsf_3_mean[i]*ONE_ALPHA)>>15 );
@@ -292,13 +293,14 @@ static void decode_lsf2lsp_3(AVCodecCont
lsf_3_temp3 = lsf_3_3;
}
- // decode lsf residuals from lsf tables using the indices from the bitstream
+ // decode lsf residuals from lsf tables using the bitstream indexes
lsf1_r[0] = lsf_3_temp1[ p->amr_prms[0] ][0];
lsf1_r[1] = lsf_3_temp1[ p->amr_prms[0] ][1];
lsf1_r[2] = lsf_3_temp1[ p->amr_prms[0] ][2];
index_temp = p->amr_prms[1];
- // MODE_475, MODE_515 only use every second entry - NOTE : not quite sure what they mean and the spec doesn't mention this
+ /* MODE_475, MODE_515 only use every second entry
+ * NOTE: unsure what they mean and the spec doesn't mention this */
if((p->cur_frame_mode == MODE_475) || (p->cur_frame_mode == MODE_515)) {
index_temp = index_temp << 1;
}
@@ -325,7 +327,7 @@ static void decode_lsf2lsp_3(AVCodecCont
}
}
- /* verification that LSFs has minimum distance of LSF_GAP Hz */
+ /* verification that LSFs have minimum distance of LSF_GAP Hz */
reorder_lsf(lsf1_q, LSF_GAP);
memcpy(p->prev_lsf_dq, lsf1_q, LP_FILTER_ORDER<<2);
@@ -335,7 +337,7 @@ static void decode_lsf2lsp_3(AVCodecCont
/**
- * Convert a set of 5 lsf quantisation indices into lsp parameters
+ * Convert a set of 5 lsf quantization indexes into lsp parameters.
*
* @param avctx pointer to the AVCodecContext for AMR
*/
@@ -345,11 +347,12 @@ static void decode_lsf2lsp_5(AVCodecCont
AMRContext *p = avctx->priv_data;
int lsf1_r[LP_FILTER_ORDER], lsf2_r[LP_FILTER_ORDER]; // vectors of residual lsfs
- int lsf1_q[LP_FILTER_ORDER], lsf2_q[LP_FILTER_ORDER]; // vectors of quantised lsfs
+ int lsf1_q[LP_FILTER_ORDER], lsf2_q[LP_FILTER_ORDER]; // vectors of quantized lsfs
int temp;
int i, sign; // counter and sign of 3rd lsf table
- // if the current frame is bad estimate the past quantised residual based on the past lsf shifted slightly towards the mean
+ /* if the current frame is bad, estimate the past quantized residual
+ * based on the past lsf shifted slightly towards the mean */
if(p->bad_frame_indicator) {
for(i=0; i<LP_FILTER_ORDER; i++) {
lsf1_q[i] = ( (p->prev_lsf_dq[i]*ALPHA_122)>>15 ) + ( (lsf_5_mean[i]*ONE_ALPHA_122)>>15 );
@@ -359,7 +362,7 @@ static void decode_lsf2lsp_5(AVCodecCont
p->prev_residual_q[i] = lsf2_q[i] - lsf_5_mean[i] - ( (p->prev_residual_q[i]*LSP_PRED_FAC_MODE_122)>>15 );
}
}else {
- /* decode prediction residuals from 5 received indices */
+ /* decode prediction residuals from 5 received indexes */
lsf1_r[0] = lsf_5_1[ p->amr_prms[0] ][0];
lsf1_r[1] = lsf_5_1[ p->amr_prms[0] ][1];
lsf2_r[0] = lsf_5_1[ p->amr_prms[0] ][2];
@@ -436,7 +439,8 @@ static void lsp2poly(int *lsp, int *f)
f[1] -= lsp[2*i-2]<<10;
}
}
-/* FIXME - check rounding sensitivity of F1(z) and F2(z) as the code below is faster but rounds differently
+/* FIXME - check rounding sensitivity of F1(z) and F2(z)
+ * as the code below is faster but rounds differently
static void lsp2poly(int *lsp, int *f) {
int i, j;
f[0] = 1<<24;
@@ -452,7 +456,7 @@ static void lsp2poly(int *lsp, int *f) {
/**
- * Convert a vector of lsps to lpc coefficients for a 10th order filter
+ * Convert a vector of lsps to lpc coefficients for a 10th order filter.
*
* @param lsp vector of lsps
* @param lpc_coeffs pointer to a subframe of lpc coefficients
@@ -494,7 +498,7 @@ static void lsp2lpc(int *lsp, int *lpc_c
/**
- * Interpolate lsps for subframes 1 and 3 and convert them to lpc coefficients
+ * Interpolate lsps for subframes 1 and 3 and convert them to lpc coefficients.
*
* @param avctx pointer to AVCodecContext
* @param lpc_coeffs array of lpc coefficients for the four subframes
@@ -531,7 +535,7 @@ static void lpc_interp_13(AVCodecContext
/**
- * Interpolate lsps for subframes 1, 2 and 3 and convert them to lpc coefficients
+ * Interpolate lsps for subframes 1, 2 and 3 and convert them to lpc coefficients.
*
* @param avctx pointer to AVCodecContext
* @param lpc_coeffs array of lpc coefficients for the four subframes
@@ -573,10 +577,10 @@ static void lpc_interp_123(AVCodecContex
/**
- * Decode the adaptive codebook index to the integer and fractional pitch lags for one subframe
- * at 1/3 resolution
+ * Decode the adaptive codebook index to the integer and fractional
+ * pitch lags for one subframe at 1/3 resolution.
*
- * Description from ref source:
+ * Description from reference source:
* The fractional lag in 1st and 3rd subframes is encoded with 8 bits
* while that in 2nd and 4th subframes is relatively encoded with 4, 5
* and 6 bits depending on the mode.
@@ -593,16 +597,17 @@ static void decode_pitch_lag_3(AVCodecCo
AMRContext *p = avctx->priv_data;
int tmp_lag;
- // FIXME - find out where these constants come from and add appropriate comments
- // such that people reading the code can understand why these particular values
- // are used
+ // FIXME: find out where these constants come from and add appropriate
+ // comments such that people reading the code can understand why these
+ // particular values are used
// subframe 1 or 3
if(p->cur_subframe & 1) {
if(pitch_index < 197) {
*pitch_lag_int = (( (pitch_index + 2)*10923 )>>15) + 19;
*pitch_lag_frac = pitch_index - *pitch_lag_int*3 + 58;
- // For the sake of deciphering where this comes from, the above code probably means:
+ // For the sake of deciphering where this comes from,
+ // the above code probably means:
// *pitch_lag_int = (pitch_index + 2)/3 + 19;
// *pitch_lag_frac = (pitch_index + 2)%3 + 56;
}else {
@@ -639,16 +644,16 @@ static void decode_pitch_lag_3(AVCodecCo
/**
- * Decode the adaptive codebook index to the integer and fractional pitch lag for one subframe
- * at 1/6 resolution
+ * Decode the adaptive codebook index to the integer and fractional
+ * pitch lag for one subframe at 1/6 resolution.
*
- * Description from ref source:
+ * Description from reference source:
* The fractional lag in 1st and 3rd subframes is encoded with 9 bits
* while that in 2nd and 4th subframes is relatively encoded with 6 bits.
* Note that in relative encoding only 61 values are used. If the
* decoder receives 61, 62, or 63 as the relative pitch index, it means
* that a transmission error occurred. In this case, the pitch lag from
- * previous subframe (actually from previous frame) is used.
+ * the previous subframe (actually from the previous frame) is used.
*
* @param avctx pointer to AVCodecContext
* @param pitch_index received adaptive codebook (pitch) index
@@ -662,9 +667,9 @@ static void decode_pitch_lag_6(AVCodecCo
AMRContext *p = avctx->priv_data;
int temp;
- // FIXME - find out where these constants come from and add appropriate comments
- // such that people reading the code can understand why these particular values
- // are used
+ // FIXME - find out where these constants come from and add appropriate
+ // comments such that people reading the code can understand why these
+ // particular values are used.
// subframe 1 or 3
if(p->cur_subframe & 1) {
@@ -694,11 +699,12 @@ static void decode_pitch_lag_6(AVCodecCo
/**
- * Find the adaptive codebook (pitch) vector from interpolating the past excitation at the
- * decoded pitch lag with corresponding resolution of 1/3 or 1/6
+ * Find the adaptive codebook (pitch) vector from interpolating the past
+ * excitation at the decoded pitch lag with corresponding resolution
+ * of 1/3 or 1/6.
*
* See the specification for details of the underlying mathematics and the used
- * FIR filter
+ * FIR filter.
*
* @param avctx pointer to AVCodecContext
* @param excitation pointer to the excitation buffer
@@ -732,7 +738,7 @@ static void decode_pitch_vector(AVCodecC
/**
- * Reconstruct the algebraic codebook vector
+ * Reconstruct the algebraic codebook vector.
*
* @param fixed_code algebraic codebook vector
* @param pulse_position vector of pulse positions
@@ -755,7 +761,7 @@ static void reconstruct_fixed_code(int *
/**
- * Decode the algebraic codebook index to pulse position indices for MODE_102
+ * Decode the algebraic codebook index to pulse position indexes for MODE_102.
*
* @param fixed_index positions of the eight pulses (encoded)
* @param position_index position index of the eight pulses
@@ -765,7 +771,7 @@ static void fixed2position(int16_t *fixe
{
int MSBs, LSBs, MSBs0_24, divMSB;
- // indices from track 1 (7+3 bits)
+ // indexes from track 1 (7+3 bits)
MSBs= FFMIN(fixed_index[0] >> 3, 124);
// LSBs = fixed_index[0]%8;
LSBs = fixed_index[0] & 0x7;
@@ -777,7 +783,7 @@ static void fixed2position(int16_t *fixe
position_index[4] = (( (MSBs - 25*divMSB)/5 )<<1) + ((LSBs & 0x2)>>1);
position_index[1] = (divMSB<<1) + (LSBs>>2);
- // indices from track 2 (7+3 bits)
+ // indexes from track 2 (7+3 bits)
MSBs= FFMIN(fixed_index[1] >> 3, 124);
// LSBs = fixed_index[1]%8;
LSBs = fixed_index[1] & 0x7;
@@ -789,7 +795,7 @@ static void fixed2position(int16_t *fixe
position_index[6] = (( (MSBs - 25*divMSB)/5 )<<1) + ((LSBs & 0x2)>>1);
position_index[5] = (divMSB<<1) + (LSBs>>2);
- // indices from track 3 (5+2 bits)
+ // indexes from track 3 (5+2 bits)
MSBs = fixed_index[2] >> 2;
// LSBs = fixed_index[2]%4;
LSBs = fixed_index[2] & 0x3;
@@ -806,8 +812,8 @@ static void fixed2position(int16_t *fixe
/**
- * Decode the algebraic codebook index to pulse positions and signs and construct
- * the algebraic codebook vector for MODE_475 and MODE_515
+ * Decode the algebraic codebook index to pulse positions and signs and
+ * construct the algebraic codebook vector for MODE_475 and MODE_515.
*
* @param avctx pointer to AVCodecContext
* @param sign signs of the two pulses
@@ -835,8 +841,8 @@ static void decode_2_pulses_9bits(AVCode
/**
- * Decode the algebraic codebook index to pulse positions and signs and construct
- * the algebraic codebook vector for MODE_59
+ * Decode the algebraic codebook index to pulse positions and signs
+ * and construct the algebraic codebook vector for MODE_59.
*
* @param sign signs of the two pulses
* @param fixed_index positions of the two pulses
@@ -867,8 +873,8 @@ static void decode_2_pulses_11bits(int s
/**
- * Decode the algebraic codebook index to pulse positions and signs and construct
- * the algebraic codebook vector for MODE_67
+ * Decode the algebraic codebook index to pulse positions and signs
+ * and construct the algebraic codebook vector for MODE_67.
*
* @param sign signs of the three pulses
* @param fixed_index positions of the three pulses
@@ -897,8 +903,8 @@ static void decode_3_pulses_14bits(int s
/**
- * Decode the algebraic codebook index to pulse positions and signs and construct
- * the algebraic codebook vector for MODE_74 and MODE_795
+ * Decode the algebraic codebook index to pulse positions and signs and
+ * construct the algebraic codebook vector for MODE_74 and MODE_795.
*
* @param sign signs of the four pulses
* @param fixed_index positions of the four pulses
@@ -927,8 +933,8 @@ static void decode_4_pulses_17bits(int s
/**
- * Decode the algebraic codebook index to pulse positions and signs and construct
- * the algebraic codebook vector for MODE_102
+ * Decode the algebraic codebook index to pulse positions and signs
+ * and construct the algebraic codebook vector for MODE_102.
*
* @param fixed_index positions of the eight pulses
* @param fixed_code pointer to the algebraic codebook vector
@@ -961,8 +967,8 @@ static void decode_8_pulses_31bits(int16
/**
- * Decode the algebraic codebook index to pulse positions and signs and construct
- * the algebraic codebook vector for MODE_122
+ * Decode the algebraic codebook index to pulse positions and signs
+ * and construct the algebraic codebook vector for MODE_122.
*
* @param fixed_index positions of the ten pulses
* @param fixed_code pointer to the algebraic codebook vector
@@ -979,7 +985,7 @@ static void decode_10_pulses_35bits(int1
// find the position of the ith pulse
pos1 = dgray[fixed_index[i ] & 7]*5 + i;
// find the sign of the ith pulse
- sign = (fixed_index[i] & 8) ? -4096 : 4096; // +/-1 : 4096 is used here in the ref source
+ sign = (fixed_index[i] & 8) ? -4096 : 4096; // +/-1 : 4096 is used here in the reference source
// find the position of the i+5th pulse
pos2 = dgray[fixed_index[i+5] & 7]*5 + i;
// assign the ith pulse (+/-1) to its appropriate position
@@ -995,10 +1001,10 @@ static void decode_10_pulses_35bits(int1
// general functions FIXME - useful enough to put into libavutil?
/**
- * Comparison function for use with qsort
+ * Comparison function for use with qsort.
*
- * @param a First value for comparison
- * @param b Second value for comparison
+ * @param a first value for comparison
+ * @param b second value for comparison
* @return a-b : the result of the comparison
*/
@@ -1008,11 +1014,11 @@ int qsort_compare(const int *a, const in
}
/**
- * Find the median of some values
+ * Find the median of some values.
*
* @param values pointer to the values of which to find the median
* @param n number of values
- * @return Returns the median value
+ * @return the median value
*/
static int median(int *values, int n)
@@ -1030,10 +1036,10 @@ static int median(int *values, int n)
// gain functions
/**
- * Calculate the pitch gain from previous values
+ * Calculate the pitch gain from previous values.
*
* @param state_ptr pointer to the current state
- * @return Returns the pitch gain
+ * @return the pitch gain
*/
static int find_pitch_gain(AMRDecoderState *state_ptr)
@@ -1052,11 +1058,11 @@ static int find_pitch_gain(AMRDecoderSta
/**
- * Decode the pitch gain using the received index
+ * Decode the pitch gain using the received index.
*
* @param mode current mode
- * @param index quantisation index
- * @return Returns the pitch gain
+ * @param index quantization index
+ * @return the pitch gain
*/
static int decode_pitch_gain(enum Mode mode, int index)
@@ -1075,7 +1081,7 @@ static int decode_pitch_gain(enum Mode m
/**
- * Update the pitch gain and limit pitch_gain if the previous frame was bad
+ * Update the pitch gain and limit pitch_gain if the previous frame was bad.
*
* @param state_ptr pointer to the current state
* @param bad_frame_indicator bad frame indicator
@@ -1113,7 +1119,7 @@ static void pitch_gain_update(AMRDecoder
/**
- * Reset the AMR frame parameters
+ * Reset the AMR frame parameters.
*
* @param avctx pointer to the AVCodecContext for AMR
*/
@@ -1139,7 +1145,7 @@ static int amrnb_decode_frame(AVCodecCon
const int16_t *homing_frame; // pointer to the homing frame
int homing_frame_size; // homing frame size
- // decode the bitstream to amr parameters
+ // decode the bitstream to AMR parameters
p->cur_frame_mode = decode_bitstream(avctx, buf, buf_size, &speech_mode);
// guess the mode from the previous frame if no data or bad data
@@ -1267,14 +1273,15 @@ static int amrnb_decode_frame(AVCodecCon
p->prev_frame_type = p->cur_frame_type;
p->prev_frame_mode = p->cur_frame_mode;
- /* To make it easy the stream can only be 16 bits mono, so let's convert it to that */
+ /* To make it easy the stream can only be 16 bits mono,
+ * so let's convert it to that */
for (i=0 ; i<buf_size; i++)
outbuffer[i] = (int16_t)p->sample_buffer[i];
/* Report how many samples we got */
*data_size = buf_size;
- /* Return the amount of bytes consumed if everything was ok */
+ /* Return the amount of bytes consumed if everything was OK */
return *data_size*sizeof(int16_t);
}
@@ -1288,7 +1295,7 @@ static int amrnb_decode_close(AVCodecCon
av_free(p->amr_prms);
av_free(p->state);
- /* Return 0 if everything is ok, -1 if not */
+ /* Return 0 if everything is OK, -1 if not */
return 0;
}
Modified: amr/amrnbfloatdata.h
==============================================================================
--- amr/amrnbfloatdata.h Sun Jan 25 16:35:48 2009 (r3999)
+++ amr/amrnbfloatdata.h Sun Jan 25 16:38:52 2009 (r4000)
@@ -98,9 +98,9 @@ typedef struct AMROrder {
/**************************** tables *****************************/
-// The following order* tables are used to reorder the bitstream into the bit allocation
-// format as in the specification. The bits are grouped into three classes of importance.
-// See the specification, for more information.
+// The following order* tables are used to reorder the bitstream into the bit
+// allocation format as in the specification. The bits are grouped into three
+// classes of importance. See the specification for more information.
static const AMROrder order_MODE_475[95] = {
{ 0, 7}, { 0, 6}, { 0, 5}, { 0, 4}, { 0, 3}, { 0, 2}, { 0, 1}, { 0, 0},
@@ -1814,7 +1814,7 @@ static const uint8_t gray_decode[8] = {
#define MIN_ENERGY -14.0
-// scalar quantised pitch gain table for 7.95 and 12.2 kbps modes
+// scalar quantized pitch gain table for 7.95 and 12.2 kbps modes
static const float qua_gain_pit[16] = {
0.0 , 0.20001220703125, 0.400146484375 , 0.5 ,
0.5999755859375 , 0.70001220703125, 0.75 , 0.79998779296875,
@@ -1822,10 +1822,11 @@ static const float qua_gain_pit[16] = {
1.04998779296875, 1.0999755859375 , 1.1500244140625 , 1.20001220703125,
};
-// scalar quantised fixed gain table for 7.95 and 12.2 kbps modes
-// note: this table was generated from the integer qua_gain_code tables in the
-// ref source that store Q10 qua_ener = 20*log10(g_fac). The table below stores
-// g_fac as a float from printf("%10.6f,\n", powf(10.0, qua_ener/(20.0*(1<<10))))
+// scalar quantized fixed gain table for 7.95 and 12.2 kbps modes
+// NOTE: This table was generated from the integer qua_gain_code tables
+// in the reference source that store Q10 qua_ener = 20*log10(g_fac).
+// The table below stores g_fac as a float from
+// printf("%10.6f,\n", powf(10.0, qua_ener/(20.0*(1<<10)))).
static const float qua_gain_code[32] = {
0.077640, 0.100586, 0.130857, 0.170410, 0.204592, 0.235358, 0.270507, 0.311044,
0.357898, 0.411116, 0.473151, 0.543935, 0.625519, 0.719258, 0.827138, 0.951199,
@@ -1841,7 +1842,7 @@ static const float energy_mean[8] = { 33
static const float energy_pred_fac[4] = { 0.68, 0.58, 0.34, 0.19 };
// gain table for 4.75 kbps mode
-// first index has even/odd indices for subframes 0,2/1,3
+// first index has even/odd indexes for subframes 0,2/1,3
// second index is {pitch_gain, fixed_gain_factor}
static const float gains_MODE_475[512][2] = {
{0.049561, 0.031250}, {0.033081, 0.034180}, {0.175354, 0.277100}, {0.138306, 0.830566},
Modified: amr/amrnbfloatdec.c
==============================================================================
--- amr/amrnbfloatdec.c Sun Jan 25 16:35:48 2009 (r3999)
+++ amr/amrnbfloatdec.c Sun Jan 25 16:38:52 2009 (r4000)
@@ -41,7 +41,7 @@ typedef struct AMRContext {
GetBitContext gb;
- int16_t amr_prms[PRMS_MODE_122]; ///< decoded amr parameters (lsf coefficients, codebook indices, etc)
+ int16_t amr_prms[PRMS_MODE_122]; ///< decoded AMR parameters (lsf coefficients, codebook indexes, etc)
int bad_frame_indicator; ///< bad frame ? 1 : 0
int cur_frame_mode; ///< current frame mode
int cur_frame_type; ///< current frame type
@@ -52,7 +52,7 @@ typedef struct AMRContext {
float lsp_avg[LP_FILTER_ORDER]; ///< vector of averaged lsp coefficients
- float lpc[4][LP_FILTER_ORDER]; ///< vectors of lpc coefficients for 4 subframes
+ float lpc[4][LP_FILTER_ORDER]; ///< lpc coefficient vectors for 4 subframes
int search_range_min; ///< minimum pitch lag search range
int search_range_max; ///< maximum pitch lag search range
@@ -90,9 +90,9 @@ static void reset_state(AMRContext *p)
{
int i;
- // initialise values for the lsp vector from the 4th subframe of the
- // previous subframe values
- // taken from Decoder_amr_reset using val/(float)(1<<15)
+ // Initialize values for the lsp vector from the 4th subframe of the
+ // previous subframe values.
+ // Taken from Decoder_amr_reset using val/(float)(1<<15).
p->prev_lsp_sub4[0] = 0.91552734375;
p->prev_lsp_sub4[1] = 0.79345703125;
p->prev_lsp_sub4[2] = 0.640869140625;
@@ -104,8 +104,8 @@ static void reset_state(AMRContext *p)
p->prev_lsp_sub4[8] = -0.640869140625;
p->prev_lsp_sub4[9] = -0.79345703125;
- // initialise mean lsp values
- // taken from Decoder_amr_reset using val/(float)(1<<15)
+ // Initialize mean lsp values.
+ // Taken from Decoder_amr_reset using val/(float)(1<<15).
p->lsp_avg[0] = 0.042236328125;
p->lsp_avg[1] = 0.063385009765625;
p->lsp_avg[2] = 0.1043701171875;
@@ -148,13 +148,13 @@ static int amrnb_decode_init(AVCodecCont
/**
- * Decode the bitstream into the AMR parameters and discover the frame mode
+ * Decode the bitstream into the AMR parameters and discover the frame mode.
*
* @param buf pointer to the input buffer
* @param buf_size size of the input buffer
* @param speech_mode pointer to the speech mode
*
- * @return Returns the frame mode
+ * @return the frame mode
*/
enum Mode decode_bitstream(AMRContext *p, uint8_t *buf, int buf_size,
@@ -167,7 +167,7 @@ enum Mode decode_bitstream(AMRContext *p
// reset amr_prms
memset(p->amr_prms, 0, PRMS_MODE_122 * sizeof(int16_t));
- // initialise get_bits
+ // initialize get_bits
init_get_bits(&p->gb, buf, buf_size*8);
skip_bits(&p->gb, 1);
// set the mode
@@ -242,7 +242,7 @@ enum Mode decode_bitstream(AMRContext *p
/*** LPC coefficient decoding functions ***/
/**
- * Convert an lsf vector into an lsp vector
+ * Convert an lsf vector into an lsp vector.
*
* @param lsf input lsf vector
* @param lsp output lsp vector
@@ -258,7 +258,7 @@ static void lsf2lsp(float *lsf, float *l
}
/**
- * Decode a set of 5 split-matrix quantised lsf indices into an lsp vector
+ * Decode a set of 5 split-matrix quantized lsf indexes into an lsp vector.
*
* @param p pointer to the AMRContext
*/
@@ -319,7 +319,7 @@ static void lsf2lsp_5(AMRContext *p)
}
/**
- * Decode a set of 3 split-matrix quantised lsf indices into an lsp vector
+ * Decode a set of 3 split-matrix quantized lsf indexes into an lsp vector.
*
* @param p pointer to the AMRContext
*/
@@ -351,8 +351,8 @@ static void lsf2lsp_3(AMRContext *p)
lsf_r[2] = lsf_3_1_tmp[ idx ][2];
idx = p->amr_prms[1];
- // MODE_475, MODE_515 only use every other entry as their indices are stored
- // using 1 less bit (8-bits vs 9-bits)
+ // MODE_475, MODE_515 only use every other entry as their indexes
+ // are stored using 1 less bit (8 bits vs 9 bits)
if((p->cur_frame_mode == MODE_475) || (p->cur_frame_mode == MODE_515)) {
idx <<= 1;
}
@@ -377,7 +377,7 @@ static void lsf2lsp_3(AMRContext *p)
}
/**
- * Interpolate lsp vectors for subframes 1 and 3
+ * Interpolate lsp vectors for subframes 1 and 3.
*
* @param p pointer to the AMRContext
*/
@@ -393,7 +393,7 @@ static void interp_lsp_13(AMRContext *p)
}
/**
- * Interpolate lsp vectors for subframes 1, 2 and 3
+ * Interpolate lsp vectors for subframes 1, 2 and 3.
*
* @param p pointer to the AMRContext
*/
@@ -410,7 +410,7 @@ static void interp_lsp_123(AMRContext *p
}
/**
- * Find the polynomial F1(z) or F2(z) from the lsp vectors
+ * Find the polynomial F1(z) or F2(z) from the lsp vectors.
*
* @param lsp input lsp vector
* @param f pointer to the polynomial F1(z) or F2(z)
@@ -433,7 +433,7 @@ static void lsp2poly(float *lsp, float *
}
/**
- * Convert an lsp vector to lpc coefficients
+ * Convert an lsp vector to lpc coefficients.
*
* @param lsp input lsp vector
* @param lpc output lpc coefficients
@@ -457,8 +457,8 @@ static void lsp2lpc(float *lsp, float *l
// A(z) = ( F1'(z) + F2'(z) )/2
// note f1 and f2 are actually f1' and f2'
for(i=0; i<5; i++) {
- lpc_coeffs[i] = 0.5*(f1[i+2] + f2[i+2]); // lpc 0..4 uses indices to f, 2..6
- lpc_coeffs[i+5] = 0.5*(f1[6-i] - f2[6-i]); // lpc 5..9 uses indices to f, 6..2
+ lpc_coeffs[i] = 0.5*(f1[i+2] + f2[i+2]); // lpc 0..4 uses indexes to f, 2..6
+ lpc_coeffs[i+5] = 0.5*(f1[6-i] - f2[6-i]); // lpc 5..9 uses indexes to f, 6..2
}
}
@@ -468,8 +468,8 @@ static void lsp2lpc(float *lsp, float *l
/*** pitch vector decoding functions ***/
/**
- * Decode the adaptive codebook index to the integer and fractional parts of the
- * pitch lag for one subframe at 1/3 resolution
+ * Decode the adaptive codebook index to the integer and fractional parts
+ * of the pitch lag for one subframe at 1/3 resolution.
*
* @param p pointer to the AMRContext
* @param pitch_index parsed adaptive codebook (pitch) index
@@ -492,7 +492,7 @@ static void decode_pitch_lag_3(AMRContex
}else {
if( (p->cur_frame_mode == MODE_475) || (p->cur_frame_mode == MODE_515) ||
(p->cur_frame_mode == MODE_59) || (p->cur_frame_mode == MODE_67) ) {
- // decoding with 4 bit resolution
+ // decoding with 4-bit resolution
int t1_temp = FFMAX(FFMIN(p->prev_pitch_lag_int, p->search_range_max-4), p->search_range_min+5);
if(pitch_index < 4) {
@@ -519,8 +519,8 @@ static void decode_pitch_lag_3(AMRContex
}
/**
- * Decode the adaptive codebook index to the integer and fractional parts of the
- * pitch lag for one subframe at 1/6 resolution
+ * Decode the adaptive codebook index to the integer and fractional parts
+ * of the pitch lag for one subframe at 1/6 resolution.
*
* @param p pointer to the AMRContext
* @param pitch_index parsed adaptive codebook (pitch) index
@@ -550,7 +550,7 @@ static void decode_pitch_lag_6(AMRContex
/**
* Calculate the pitch vector by interpolating the past excitation at the pitch
- * pitch lag using a b60 hamming windowed sinc function
+ * pitch lag using a b60 hamming windowed sinc function.
*
* @param prev_excitation pointer to the element after the previous excitations
* @param lag_int integer part of pitch lag
@@ -599,7 +599,7 @@ static void interp_pitch_vector(float *p
/*** algebraic code book (fixed) vector decoding functions ***/
/**
- * Reconstruct the algebraic codebook vector
+ * Reconstruct the algebraic codebook vector.
*
* @param pulse_position vector of pulse positions
* @param sign signs of the pulses
@@ -620,8 +620,8 @@ static void reconstruct_fixed_vector(int
}
/**
- * Decode the algebraic codebook index to pulse positions and signs and construct
- * the algebraic codebook vector for MODE_475 and MODE_515
+ * Decode the algebraic codebook index to pulse positions and signs and
+ * construct the algebraic codebook vector for MODE_475 and MODE_515.
*
* @param fixed_index positions of the two pulses
* @param sign signs of the two pulses
@@ -647,8 +647,8 @@ static void decode_2_pulses_9bits(int fi
}
/**
- * Decode the algebraic codebook index to pulse positions and signs and construct
- * the algebraic codebook vector for MODE_59
+ * Decode the algebraic codebook index to pulse positions and signs and
+ * construct the algebraic codebook vector for MODE_59.
*
* @param fixed_index positions of the two pulses
* @param sign signs of the two pulses
@@ -676,8 +676,8 @@ static void decode_2_pulses_11bits(int f
}
/**
- * Decode the algebraic codebook index to pulse positions and signs and construct
- * the algebraic codebook vector for MODE_67
+ * Decode the algebraic codebook index to pulse positions and signs and
+ * construct the algebraic codebook vector for MODE_67.
*
* @param fixed_index positions of the three pulses
* @param sign signs of the three pulses
@@ -706,8 +706,8 @@ static void decode_3_pulses_14bits(int f
}
/**
- * Decode the algebraic codebook index to pulse positions and signs and construct
- * the algebraic codebook vector for MODE_74 and MODE_795
+ * Decode the algebraic codebook index to pulse positions and signs and
+ * construct the algebraic codebook vector for MODE_74 and MODE_795.
*
* @param fixed_index positions of the four pulses
* @param sign signs of the four pulses
@@ -736,8 +736,8 @@ static void decode_4_pulses_17bits(int f
}
/**
- * Decode the algebraic codebook index to pulse positions and signs and construct
- * the algebraic codebook vector for MODE_102
+ * Decode the algebraic codebook index to pulse positions and signs and
+ * construct the algebraic codebook vector for MODE_102.
*
* @param fixed_index positions of the eight pulses
* @param fixed_vector pointer to the algebraic codebook vector
@@ -791,8 +791,8 @@ static void decode_8_pulses_31bits(int16
}
/**
- * Decode the algebraic codebook index to pulse positions and signs and construct
- * the algebraic codebook vector for MODE_122
+ * Decode the algebraic codebook index to pulse positions and signs and
+ * construct the algebraic codebook vector for MODE_122.
*
* @param fixed_index positions of the ten pulses
* @param fixed_vector pointer to the algebraic codebook vector
@@ -827,12 +827,12 @@ static void decode_10_pulses_35bits(int1
/*** gain decoding functions ***/
/**
- * Predict the fixed gain
+ * Predict the fixed gain.
*
* @param fixed_vector pointer to the algebraic codebook vector
* @param prev_pred_error pointer to the quantified prediction errors from the previous four subframes
*
- * @return Returns the predicted fixed gain
+ * @return the predicted fixed gain
*/
static float fixed_gain_prediction(float *fixed_vector, float *prev_pred_error,
@@ -863,10 +863,10 @@ static float fixed_gain_prediction(float
/*** pre-processing functions ***/
/**
- * Comparison function for use with qsort
+ * Comparison function for use with qsort.
*
- * @param a First value for comparison
- * @param b Second value for comparison
+ * @param a first value for comparison
+ * @param b second value for comparison
* @return a-b : the result of the comparison
*/
@@ -881,11 +881,11 @@ int qsort_compare(const float *a, const
}
/**
- * Find the median of some float values
+ * Find the median of some float values.
*
* @param values pointer to the values of which to find the median
* @param n number of values
- * @return Returns the median value
+ * @return the median value
*/
static float medianf(float *values, int n)
@@ -905,7 +905,7 @@ static float medianf(float *values, int
/**
* Circularly convolve the fixed vector with a phase dispersion impulse response
- * filter
+ * filter.
*
* @param fixed_vector pointer to the fixed vector
* @param ir_filter pointer to the impulse response filter
@@ -945,7 +945,7 @@ static void convolve_circ(float *fixed_v
/*** synthesis functions ***/
/**
- * Conduct 10th order linear predictive coding synthesis
+ * Conduct 10th order linear predictive coding synthesis.
*
* @param p pointer to the AMRContext
* @param excitation pointer to the excitation vector
@@ -980,7 +980,7 @@ static int synthesis(AMRContext *p, floa
float eta, temp1 = 0.0, temp2 = 0.0;
for(i=0; i<AMR_SUBFRAME_SIZE; i++) {
- // emphasise pitch vector contribution
+ // emphasize pitch vector contribution
excitation_temp[i] = excitation[i] + pitch_factor*p->pitch_vector[i];
// find gain scale
temp1 += excitation[i]*excitation[i];
@@ -999,7 +999,7 @@ static int synthesis(AMRContext *p, floa
for(j=0; j<LP_FILTER_ORDER; j++) {
samples[i] -= lpc[j]*samples[i-j-1];
}
- // Detect overflow
+ // detect overflow
if(fabsf(samples[i])>1.0) {
overflow_temp = 1;
samples[i] = av_clipf(samples[i], -1.0, 1.0);
@@ -1015,7 +1015,7 @@ static int synthesis(AMRContext *p, floa
/*** update functions ***/
/**
- * Update buffers and history at the end of decoding a subframe
+ * Update buffers and history at the end of decoding a subframe.
*
* @param p pointer to the AMRContext
*/
@@ -1066,20 +1066,20 @@ static int amrnb_decode_frame(AVCodecCon
int gains_index_MODE_475 = 0; // MODE_475 gains index coded every other subframe
enum Mode speech_mode = MODE_475; // ???
- // decode the bitstream to amr parameters
+ // decode the bitstream to AMR parameters
p->cur_frame_mode = decode_bitstream(p, buf, buf_size, &speech_mode);
/*** LPC coefficient decoding ***/
if(p->cur_frame_mode == MODE_122) {
- // decode split-matrix quantised lsf vector indices to lsp vectors
+ // decode split-matrix quantized lsf vector indexes to lsp vectors
lsf2lsp_5(p);
// interpolate LSP vectors at subframes 1 and 3
interp_lsp_13(p);
// advance index into amr_prms
index += 5;
}else {
- // decode split-matrix quantised lsf vector indices to an lsp vector
+ // decode split-matrix quantized lsf vector indexes to an lsp vector
lsf2lsp_3(p);
// interpolate LSP vectors at subframes 1, 2 and 3
interp_lsp_123(p);
@@ -1305,10 +1305,10 @@ static int amrnb_decode_frame(AVCodecCon
}
- /* Report how many samples we got */
+ /* report how many samples we got */
*data_size = AMR_BLOCK_SIZE * sizeof(int16_t);
- /* Return the amount of bytes consumed if everything was ok */
+ /* return the amount of bytes consumed if everything was OK */
return (mode_bits[p->cur_frame_mode] + 15)>>3; // +7 for rounding and +8 for TOC
}
@@ -1317,7 +1317,7 @@ static int amrnb_decode_close(AVCodecCon
{
AMRContext *p = avctx->priv_data;
- /* Return 0 if everything is ok, -1 if not */
+ /* return 0 if everything is OK, -1 if not */
return 0;
}
1
0
Author: diego
Date: Sun Jan 25 16:35:48 2009
New Revision: 3999
Log:
Remove nonsensical '@return void' Doxygen comments.
Modified:
amr/amrnbdec.c
amr/amrnbfloatdec.c
Modified: amr/amrnbdec.c
==============================================================================
--- amr/amrnbdec.c Sun Jan 25 16:27:50 2009 (r3998)
+++ amr/amrnbdec.c Sun Jan 25 16:35:48 2009 (r3999)
@@ -420,8 +420,6 @@ static void decode_lsf2lsp_5(AVCodecCont
*
* @param lsp vector of lsps
* @param f pointer to the polynomial F1(z) or F2(z)
- *
- * @return void
*/
static void lsp2poly(int *lsp, int *f)
@@ -458,8 +456,6 @@ static void lsp2poly(int *lsp, int *f) {
*
* @param lsp vector of lsps
* @param lpc_coeffs pointer to a subframe of lpc coefficients
- *
- * @return void
*/
static void lsp2lpc(int *lsp, int *lpc_coeffs)
@@ -502,8 +498,6 @@ static void lsp2lpc(int *lsp, int *lpc_c
*
* @param avctx pointer to AVCodecContext
* @param lpc_coeffs array of lpc coefficients for the four subframes
- *
- * @return void
*/
static void lpc_interp_13(AVCodecContext *avctx, int **lpc_coeffs)
@@ -541,8 +535,6 @@ static void lpc_interp_13(AVCodecContext
*
* @param avctx pointer to AVCodecContext
* @param lpc_coeffs array of lpc coefficients for the four subframes
- *
- * @return void
*/
static void lpc_interp_123(AVCodecContext *avctx, int **lpc_coeffs)
@@ -593,8 +585,6 @@ static void lpc_interp_123(AVCodecContex
* @param pitch_index received adaptive codebook (pitch) index
* @param pitch_lag_int pointer to integer part of the subframe pitch lag
* @param pitch_lag_frac pointer to fractional part of the subframe pitch lag
- *
- * @return void
*/
static void decode_pitch_lag_3(AVCodecContext *avctx, int pitch_index,
@@ -664,8 +654,6 @@ static void decode_pitch_lag_3(AVCodecCo
* @param pitch_index received adaptive codebook (pitch) index
* @param pitch_lag_int pointer to integer part of the subframe pitch lag
* @param pitch_lag_frac pointer to fractional part of the subframe pitch lag
- *
- * @return void
*/
static void decode_pitch_lag_6(AVCodecContext *avctx, int pitch_index,
@@ -714,8 +702,6 @@ static void decode_pitch_lag_6(AVCodecCo
*
* @param avctx pointer to AVCodecContext
* @param excitation pointer to the excitation buffer
- *
- * @return void
*/
static void decode_pitch_vector(AVCodecContext *avctx, int *excitation)
@@ -752,8 +738,6 @@ static void decode_pitch_vector(AVCodecC
* @param pulse_position vector of pulse positions
* @param sign signs of the pulses
* @param nr_pulses number of pulses
- *
- * @return void
*/
static void reconstruct_fixed_code(int *fixed_code, int *pulse_position,
@@ -775,8 +759,6 @@ static void reconstruct_fixed_code(int *
*
* @param fixed_index positions of the eight pulses (encoded)
* @param position_index position index of the eight pulses
- *
- * @return void
*/
static void fixed2position(int16_t *fixed_index, int *position_index)
@@ -831,8 +813,6 @@ static void fixed2position(int16_t *fixe
* @param sign signs of the two pulses
* @param fixed_index positions of the two pulses
* @param fixed_code pointer to the algebraic codebook vector
- *
- * @return void
*/
static void decode_2_pulses_9bits(AVCodecContext *avctx, int sign,
@@ -861,8 +841,6 @@ static void decode_2_pulses_9bits(AVCode
* @param sign signs of the two pulses
* @param fixed_index positions of the two pulses
* @param fixed_code pointer to the algebraic codebook vector
- *
- * @return void
*/
static void decode_2_pulses_11bits(int sign, int fixed_index, int *fixed_code)
@@ -895,8 +873,6 @@ static void decode_2_pulses_11bits(int s
* @param sign signs of the three pulses
* @param fixed_index positions of the three pulses
* @param fixed_code pointer to the algebraic codebook vector
- *
- * @return void
*/
static void decode_3_pulses_14bits(int sign, int fixed_index, int *fixed_code)
@@ -927,8 +903,6 @@ static void decode_3_pulses_14bits(int s
* @param sign signs of the four pulses
* @param fixed_index positions of the four pulses
* @param fixed_code pointer to the algebraic codebook vector
- *
- * @return void
*/
static void decode_4_pulses_17bits(int sign, int fixed_index, int *fixed_code)
@@ -958,8 +932,6 @@ static void decode_4_pulses_17bits(int s
*
* @param fixed_index positions of the eight pulses
* @param fixed_code pointer to the algebraic codebook vector
- *
- * @return void
*/
static void decode_8_pulses_31bits(int16_t *fixed_index, int *fixed_code)
@@ -994,8 +966,6 @@ static void decode_8_pulses_31bits(int16
*
* @param fixed_index positions of the ten pulses
* @param fixed_code pointer to the algebraic codebook vector
- *
- * @return void
*/
static void decode_10_pulses_35bits(int16_t *fixed_index, int *fixed_code)
Modified: amr/amrnbfloatdec.c
==============================================================================
--- amr/amrnbfloatdec.c Sun Jan 25 16:27:50 2009 (r3998)
+++ amr/amrnbfloatdec.c Sun Jan 25 16:35:48 2009 (r3999)
@@ -246,8 +246,6 @@ enum Mode decode_bitstream(AMRContext *p
*
* @param lsf input lsf vector
* @param lsp output lsp vector
- *
- * @return void
*/
static void lsf2lsp(float *lsf, float *lsp)
@@ -263,8 +261,6 @@ static void lsf2lsp(float *lsf, float *l
* Decode a set of 5 split-matrix quantised lsf indices into an lsp vector
*
* @param p pointer to the AMRContext
- *
- * @return void
*/
static void lsf2lsp_5(AMRContext *p)
@@ -326,8 +322,6 @@ static void lsf2lsp_5(AMRContext *p)
* Decode a set of 3 split-matrix quantised lsf indices into an lsp vector
*
* @param p pointer to the AMRContext
- *
- * @return void
*/
static void lsf2lsp_3(AMRContext *p)
@@ -386,8 +380,6 @@ static void lsf2lsp_3(AMRContext *p)
* Interpolate lsp vectors for subframes 1 and 3
*
* @param p pointer to the AMRContext
- *
- * @return void
*/
static void interp_lsp_13(AMRContext *p)
@@ -404,8 +396,6 @@ static void interp_lsp_13(AMRContext *p)
* Interpolate lsp vectors for subframes 1, 2 and 3
*
* @param p pointer to the AMRContext
- *
- * @return void
*/
static void interp_lsp_123(AMRContext *p)
@@ -424,8 +414,6 @@ static void interp_lsp_123(AMRContext *p
*
* @param lsp input lsp vector
* @param f pointer to the polynomial F1(z) or F2(z)
- *
- * @return void
*/
static void lsp2poly(float *lsp, float *f)
@@ -449,8 +437,6 @@ static void lsp2poly(float *lsp, float *
*
* @param lsp input lsp vector
* @param lpc output lpc coefficients
- *
- * @return void
*/
static void lsp2lpc(float *lsp, float *lpc_coeffs)
@@ -488,8 +474,6 @@ static void lsp2lpc(float *lsp, float *l
* @param p pointer to the AMRContext
* @param pitch_index parsed adaptive codebook (pitch) index
* @param subframe current subframe
- *
- * @return void
*/
static void decode_pitch_lag_3(AMRContext *p, int pitch_index, int subframe)
@@ -541,8 +525,6 @@ static void decode_pitch_lag_3(AMRContex
* @param p pointer to the AMRContext
* @param pitch_index parsed adaptive codebook (pitch) index
* @param subframe current subframe
- *
- * @return void
*/
static void decode_pitch_lag_6(AMRContext *p, int pitch_index, int subframe)
@@ -575,8 +557,6 @@ static void decode_pitch_lag_6(AMRContex
* @param lag_frac fractional part of pitch lag
* @param mode current frame mode
* @param pitch_vector pointer to the pitch vector
- *
- * @return void
*/
static void interp_pitch_vector(float *prev_excitation, int lag_int,
@@ -625,8 +605,6 @@ static void interp_pitch_vector(float *p
* @param sign signs of the pulses
* @param nr_pulses number of pulses
* @param fixed_vector algebraic codebook vector
- *
- * @return void
*/
static void reconstruct_fixed_vector(int *pulse_position, int sign,
@@ -649,8 +627,6 @@ static void reconstruct_fixed_vector(int
* @param sign signs of the two pulses
* @param subframe current subframe
* @param fixed_vector pointer to the algebraic codebook vector
- *
- * @return void
*/
static void decode_2_pulses_9bits(int fixed_index, int sign, int subframe,
@@ -677,8 +653,6 @@ static void decode_2_pulses_9bits(int fi
* @param fixed_index positions of the two pulses
* @param sign signs of the two pulses
* @param fixed_vector pointer to the algebraic codebook vector
- *
- * @return void
*/
static void decode_2_pulses_11bits(int fixed_index, int sign,
@@ -708,8 +682,6 @@ static void decode_2_pulses_11bits(int f
* @param fixed_index positions of the three pulses
* @param sign signs of the three pulses
* @param fixed_vector pointer to the algebraic codebook vector
- *
- * @return void
*/
static void decode_3_pulses_14bits(int fixed_index, int sign,
@@ -740,8 +712,6 @@ static void decode_3_pulses_14bits(int f
* @param fixed_index positions of the four pulses
* @param sign signs of the four pulses
* @param fixed_vector pointer to the algebraic codebook vector
- *
- * @return void
*/
static void decode_4_pulses_17bits(int fixed_index, int sign,
@@ -771,8 +741,6 @@ static void decode_4_pulses_17bits(int f
*
* @param fixed_index positions of the eight pulses
* @param fixed_vector pointer to the algebraic codebook vector
- *
- * @return void
*/
static void decode_8_pulses_31bits(int16_t *fixed_index, float *fixed_vector)
@@ -828,8 +796,6 @@ static void decode_8_pulses_31bits(int16
*
* @param fixed_index positions of the ten pulses
* @param fixed_vector pointer to the algebraic codebook vector
- *
- * @return void
*/
static void decode_10_pulses_35bits(int16_t *fixed_index, float *fixed_vector)
1
0
Author: diego
Date: Sun Jan 25 16:27:50 2009
New Revision: 3998
Log:
Use American English throughout, even for variable names.
Modified:
wmapro/wma3.h
wmapro/wma3dec.c
Modified: wmapro/wma3.h
==============================================================================
--- wmapro/wma3.h Sun Jan 25 16:27:18 2009 (r3997)
+++ wmapro/wma3.h Sun Jan 25 16:27:50 2009 (r3998)
@@ -136,7 +136,7 @@ typedef struct WMA3DecodeContext {
/** subframe/block decode state */
int subframe_len; //< current subframe length
int channels_for_cur_subframe;
- int channel_indices_for_cur_subframe[MAX_CHANNELS];
+ int channel_indexes_for_cur_subframe[MAX_CHANNELS];
int subwoofer_cutoff; //< subwoofer cutoff value
int cValidBarkBand;
int* rgiBarkIndex;
Modified: wmapro/wma3dec.c
==============================================================================
--- wmapro/wma3dec.c Sun Jan 25 16:27:18 2009 (r3997)
+++ wmapro/wma3dec.c Sun Jan 25 16:27:50 2009 (r3998)
@@ -613,7 +613,7 @@ static int wma_decode_channel_transform(
if(remaining_channels > 2){
for(i=0;i<s->channels_for_cur_subframe;i++){
- int channel_idx = s->channel_indices_for_cur_subframe[i];
+ int channel_idx = s->channel_indexes_for_cur_subframe[i];
if(!s->channel[channel_idx].grouped && get_bits(gb,1)){
++chgroup->nb_channels;
s->channel[channel_idx].grouped = 1;
@@ -870,7 +870,7 @@ static int wma_decode_scale_factors(WMA3
{
int i;
for(i=0;i<s->channels_for_cur_subframe;i++){
- int c = s->channel_indices_for_cur_subframe[i];
+ int c = s->channel_indexes_for_cur_subframe[i];
/** resample scale factors for the new block size */
if(s->channel[c].reuse_sf){
@@ -1033,7 +1033,7 @@ static void wma_inverse_channel_transfor
wma_calc_decorrelation_matrix(s,&s->chgroup[i]);
for(x=0;x<s->channels_for_cur_subframe;x++){
- int chan = s->channel_indices_for_cur_subframe[x];
+ int chan = s->channel_indexes_for_cur_subframe[x];
if(s->chgroup[i].use_channel[chan] == 1){ // assign ptrs
ch_data[cnt] = s->channel[chan].coeffs;
++cnt;
@@ -1072,7 +1072,7 @@ static void wma_window(WMA3DecodeContext
{
int i;
for(i=0;i<s->channels_for_cur_subframe;i++){
- int c = s->channel_indices_for_cur_subframe[i];
+ int c = s->channel_indexes_for_cur_subframe[i];
int j = s->channel[c].cur_subframe;
int x;
// FIXME: use dsp.vector_fmul_window
@@ -1150,7 +1150,7 @@ static int wma_decode_subframe(WMA3Decod
if(offset == s->channel[i].decoded_samples && subframe_len == s->channel[i].subframe_len[s->channel[i].cur_subframe]){
total_samples -= s->channel[i].subframe_len[s->channel[i].cur_subframe];
s->channel[i].decoded_samples += s->channel[i].subframe_len[s->channel[i].cur_subframe];
- s->channel_indices_for_cur_subframe[s->channels_for_cur_subframe] = i;
+ s->channel_indexes_for_cur_subframe[s->channels_for_cur_subframe] = i;
++s->channels_for_cur_subframe;
}
}
@@ -1164,7 +1164,7 @@ static int wma_decode_subframe(WMA3Decod
/** configure the decoder for the current subframe */
for(i=0;i<s->channels_for_cur_subframe;i++){
- int c = s->channel_indices_for_cur_subframe[i];
+ int c = s->channel_indexes_for_cur_subframe[i];
if(s->channel[c].num_subframes <= 1){
s->cValidBarkBand = s->num_sfb[0];
@@ -1214,7 +1214,7 @@ static int wma_decode_subframe(WMA3Decod
for(i=0;i<s->channels_for_cur_subframe;i++){
- int c = s->channel_indices_for_cur_subframe[i];
+ int c = s->channel_indexes_for_cur_subframe[i];
if((s->channel[c].transmit_coefs = get_bits(gb,1)))
transmit_coeffs = 1;
}
@@ -1255,11 +1255,11 @@ static int wma_decode_subframe(WMA3Decod
/** decode quantization step modifiers for every channel */
if(s->channels_for_cur_subframe == 1)
- s->channel[s->channel_indices_for_cur_subframe[0]].quant_step_modifier = 0;
+ s->channel[s->channel_indexes_for_cur_subframe[0]].quant_step_modifier = 0;
else{
int modifier_len = get_bits(gb,3);
for(i=0;i<s->channels_for_cur_subframe;i++){
- int c = s->channel_indices_for_cur_subframe[i];
+ int c = s->channel_indexes_for_cur_subframe[i];
s->channel[c].quant_step_modifier = 0;
if(get_bits(gb,1)){
if(modifier_len)
@@ -1281,7 +1281,7 @@ static int wma_decode_subframe(WMA3Decod
/** parse coefficients */
for(i=0;i<s->channels_for_cur_subframe;i++){
- int c = s->channel_indices_for_cur_subframe[i];
+ int c = s->channel_indexes_for_cur_subframe[i];
if(s->channel[c].transmit_coefs)
decode_coeffs(s,gb,c);
}
@@ -1291,7 +1291,7 @@ static int wma_decode_subframe(WMA3Decod
if(transmit_coeffs){
wma_inverse_channel_transform(s);
for(i=0;i<s->channels_for_cur_subframe;i++){
- int c = s->channel_indices_for_cur_subframe[i];
+ int c = s->channel_indexes_for_cur_subframe[i];
int b;
float* dst;
if(c == s->lfe_channel)
@@ -1328,7 +1328,7 @@ static int wma_decode_subframe(WMA3Decod
/** handled one subframe */
for(i=0;i<s->channels_for_cur_subframe;i++){
- int c = s->channel_indices_for_cur_subframe[i];
+ int c = s->channel_indexes_for_cur_subframe[i];
if(s->channel[c].cur_subframe >= s->channel[c].num_subframes){
av_log(s->avctx,AV_LOG_ERROR,"broken subframe\n");
return 0;
1
0
Author: diego
Date: Sun Jan 25 16:27:18 2009
New Revision: 3997
Log:
small wording/spellling fix
Modified:
jpeg2000/j2k.h
Modified: jpeg2000/j2k.h
==============================================================================
--- jpeg2000/j2k.h Fri Jan 23 01:38:23 2009 (r3996)
+++ jpeg2000/j2k.h Sun Jan 25 16:27:18 2009 (r3997)
@@ -136,7 +136,7 @@ typedef struct {
} J2kCblk; ///< code block
typedef struct {
- uint16_t xi0, xi1, yi0, yi1; ///< indices of codeblocks ([xi0, xi1))
+ uint16_t xi0, xi1, yi0, yi1; ///< codeblock indexes ([xi0, xi1))
J2kTgtNode *zerobits;
J2kTgtNode *cblkincl;
} J2kPrec; ///< precinct
1
0
Author: faust3
Date: Sat Jan 17 12:48:58 2009
New Revision: 3964
Log:
renamed huffman tables of the vector coder so that their names contain the vectorsize
Modified:
wmapro/wma3.h
wmapro/wma3data.h
wmapro/wma3dec.c
Modified: wmapro/wma3.h
==============================================================================
--- wmapro/wma3.h Sat Jan 17 12:03:28 2009 (r3963)
+++ wmapro/wma3.h Sat Jan 17 12:48:58 2009 (r3964)
@@ -116,9 +116,9 @@ typedef struct WMA3DecodeContext {
int* rgiBarkIndex;
VLC exp_vlc;
- VLC huff_0_vlc;
- VLC huff_1_vlc;
- VLC huff_2_vlc;
+ VLC vec4_vlc;
+ VLC vec2_vlc;
+ VLC vec1_vlc;
VLC coef_vlc[2];
VLC rlc_vlc;
int coef_max[2];
Modified: wmapro/wma3data.h
==============================================================================
--- wmapro/wma3data.h Sat Jan 17 12:03:28 2009 (r3963)
+++ wmapro/wma3data.h Sat Jan 17 12:48:58 2009 (r3964)
@@ -239,9 +239,9 @@ static const uint8_t ff_wma3_coef1_huffb
};
-#define FF_WMA3_HUFF_0_SIZE 127
-#define FF_WMA3_HUFF_0_MAXBITS 14
-static const uint32_t ff_wma3_huff_0_codes[FF_WMA3_HUFF_0_SIZE] = {
+#define FF_WMA3_HUFF_VEC4_SIZE 127
+#define FF_WMA3_HUFF_VEC4_MAXBITS 14
+static const uint32_t ff_wma3_vec4_huffcodes[FF_WMA3_HUFF_VEC4_SIZE] = {
0x0019, 0x0027, 0x00F2, 0x03BA, 0x0930, 0x1267, 0x0031, 0x0030,
0x0097, 0x0221, 0x058B, 0x0124, 0x00EB, 0x01D4, 0x03D8, 0x0584,
0x0364, 0x045F, 0x0F66, 0x0931, 0x24CD, 0x002F, 0x0039, 0x00E8,
@@ -260,7 +260,7 @@ static const uint32_t ff_wma3_huff_0_cod
0x03C4, 0x08B8, 0x078B, 0x0755, 0x0581, 0x0F67, 0x0000,
};
-static const uint8_t ff_wma3_huff_0_bits[FF_WMA3_HUFF_0_SIZE] = {
+static const uint8_t ff_wma3_vec4_huffbits[FF_WMA3_HUFF_VEC4_SIZE] = {
5, 6, 8, 10, 12, 13, 6, 6,
8, 10, 11, 9, 8, 9, 10, 11,
10, 11, 12, 12, 14, 6, 6, 8,
@@ -280,9 +280,9 @@ static const uint8_t ff_wma3_huff_0_bits
};
-#define FF_WMA3_HUFF_1_SIZE 137
-#define FF_WMA3_HUFF_1_MAXBITS 12
-static const uint32_t ff_wma3_huff_1_codes[FF_WMA3_HUFF_1_SIZE] = {
+#define FF_WMA3_HUFF_VEC2_SIZE 137
+#define FF_WMA3_HUFF_VEC2_MAXBITS 12
+static const uint32_t ff_wma3_vec2_huffcodes[FF_WMA3_HUFF_VEC2_SIZE] = {
0x055, 0x01C, 0x01A, 0x02B, 0x028, 0x067, 0x08B, 0x039,
0x170, 0x10D, 0x2A5, 0x047, 0x464, 0x697, 0x523, 0x8CB,
0x01B, 0x00E, 0x000, 0x010, 0x012, 0x036, 0x048, 0x04C,
@@ -303,7 +303,7 @@ static const uint32_t ff_wma3_huff_1_cod
0x001,
};
-static const uint8_t ff_wma3_huff_1_bits[FF_WMA3_HUFF_1_SIZE] = {
+static const uint8_t ff_wma3_vec2_huffbits[FF_WMA3_HUFF_VEC2_SIZE] = {
7, 6, 6, 6, 7, 7, 8, 9,
9, 10, 10, 11, 11, 11, 12, 12,
6, 4, 5, 5, 6, 6, 7, 8,
@@ -325,9 +325,9 @@ static const uint8_t ff_wma3_huff_1_bits
};
-#define FF_WMA3_HUFF_2_SIZE 101
-#define FF_WMA3_HUFF_2_MAXBITS 11
-static const uint32_t ff_wma3_huff_2_codes[FF_WMA3_HUFF_2_SIZE] = {
+#define FF_WMA3_HUFF_VEC1_SIZE 101
+#define FF_WMA3_HUFF_VEC1_MAXBITS 11
+static const uint32_t ff_wma3_vec1_huffcodes[FF_WMA3_HUFF_VEC1_SIZE] = {
0x01A, 0x003, 0x017, 0x010, 0x00C, 0x009, 0x005, 0x000,
0x00D, 0x00A, 0x009, 0x00C, 0x00F, 0x002, 0x004, 0x007,
0x00B, 0x00F, 0x01C, 0x006, 0x010, 0x015, 0x01C, 0x022,
@@ -343,7 +343,7 @@ static const uint32_t ff_wma3_huff_2_cod
0x297, 0x355, 0x372, 0x373, 0x016,
};
-static const uint8_t ff_wma3_huff_2_bits[FF_WMA3_HUFF_2_SIZE] = {
+static const uint8_t ff_wma3_vec1_huffbits[FF_WMA3_HUFF_VEC1_SIZE] = {
7, 6, 5, 5, 5, 5, 5, 5,
4, 4, 4, 4, 4, 5, 5, 5,
5, 5, 5, 6, 6, 6, 6, 6,
Modified: wmapro/wma3dec.c
==============================================================================
--- wmapro/wma3dec.c Sat Jan 17 12:03:28 2009 (r3963)
+++ wmapro/wma3dec.c Sat Jan 17 12:48:58 2009 (r3964)
@@ -112,9 +112,9 @@ static av_cold int wma3_decode_end(AVCod
free_vlc(&s->exp_vlc);
free_vlc(&s->coef_vlc[0]);
free_vlc(&s->coef_vlc[1]);
- free_vlc(&s->huff_0_vlc);
- free_vlc(&s->huff_1_vlc);
- free_vlc(&s->huff_2_vlc);
+ free_vlc(&s->vec4_vlc);
+ free_vlc(&s->vec2_vlc);
+ free_vlc(&s->vec1_vlc);
free_vlc(&s->rlc_vlc);
for(i=0 ; i<BLOCK_NB_SIZES ; i++)
@@ -228,17 +228,17 @@ static av_cold int wma3_decode_init(AVCo
s->coef_max[1] = ((21+VLCBITS-1)/VLCBITS);
- init_vlc(&s->huff_0_vlc, VLCBITS, FF_WMA3_HUFF_0_SIZE,
- ff_wma3_huff_0_bits, 1, 1,
- ff_wma3_huff_0_codes, 4, 4, 0);
+ init_vlc(&s->vec4_vlc, VLCBITS, FF_WMA3_HUFF_VEC4_SIZE,
+ ff_wma3_vec4_huffbits, 1, 1,
+ ff_wma3_vec4_huffcodes, 4, 4, 0);
- init_vlc(&s->huff_1_vlc, VLCBITS, FF_WMA3_HUFF_1_SIZE,
- ff_wma3_huff_1_bits, 1, 1,
- ff_wma3_huff_1_codes, 4, 4, 0);
+ init_vlc(&s->vec2_vlc, VLCBITS, FF_WMA3_HUFF_VEC2_SIZE,
+ ff_wma3_vec2_huffbits, 1, 1,
+ ff_wma3_vec2_huffcodes, 4, 4, 0);
- init_vlc(&s->huff_2_vlc, VLCBITS, FF_WMA3_HUFF_2_SIZE,
- ff_wma3_huff_2_bits, 1, 1,
- ff_wma3_huff_2_codes, 4, 4, 0);
+ init_vlc(&s->vec1_vlc, VLCBITS, FF_WMA3_HUFF_VEC1_SIZE,
+ ff_wma3_vec1_huffbits, 1, 1,
+ ff_wma3_vec1_huffcodes, 4, 4, 0);
init_vlc(&s->rlc_vlc, VLCBITS, FF_WMA3_HUFF_RLC_SIZE,
ff_wma3_huff_rlc_bits, 1, 1,
@@ -725,18 +725,18 @@ static inline void wma_get_vec4(WMA3Deco
unsigned int idx;
int i = 0;
// read 4 values
- idx = get_vlc2(s->getbit, s->huff_0_vlc.table, VLCBITS, ((FF_WMA3_HUFF_0_MAXBITS+VLCBITS-1)/VLCBITS));
+ idx = get_vlc2(s->getbit, s->vec4_vlc.table, VLCBITS, ((FF_WMA3_HUFF_VEC4_MAXBITS+VLCBITS-1)/VLCBITS));
if ( idx == 126 )
{
while(i < 4){
- idx = get_vlc2(s->getbit, s->huff_1_vlc.table, VLCBITS, ((FF_WMA3_HUFF_1_MAXBITS+VLCBITS-1)/VLCBITS));
+ idx = get_vlc2(s->getbit, s->vec2_vlc.table, VLCBITS, ((FF_WMA3_HUFF_VEC2_MAXBITS+VLCBITS-1)/VLCBITS));
if ( idx == 136 ){
- vals[i] = get_vlc2(s->getbit, s->huff_2_vlc.table, VLCBITS, ((FF_WMA3_HUFF_2_MAXBITS+VLCBITS-1)/VLCBITS));
+ vals[i] = get_vlc2(s->getbit, s->vec1_vlc.table, VLCBITS, ((FF_WMA3_HUFF_VEC1_MAXBITS+VLCBITS-1)/VLCBITS));
if(vals[i] == 100)
vals[i] += wma_get_large_val(s);
- vals[i+1] = get_vlc2(s->getbit, s->huff_2_vlc.table, VLCBITS, ((FF_WMA3_HUFF_2_MAXBITS+VLCBITS-1)/VLCBITS));
+ vals[i+1] = get_vlc2(s->getbit, s->vec1_vlc.table, VLCBITS, ((FF_WMA3_HUFF_VEC1_MAXBITS+VLCBITS-1)/VLCBITS));
if(vals[i+1] == 100)
vals[i+1] += wma_get_large_val(s);
}else{
5
7
Author: faust3
Date: Sat Jan 17 13:55:52 2009
New Revision: 3970
Log:
moved scale factor run length level and run tables next to the huffman tables and renamed them to ff_wma3_scale_rl_level / run
Modified:
wmapro/wma3data.h
wmapro/wma3dec.c
Modified: wmapro/wma3data.h
==============================================================================
--- wmapro/wma3data.h Sat Jan 17 13:46:01 2009 (r3969)
+++ wmapro/wma3data.h Sat Jan 17 13:55:52 2009 (r3970)
@@ -118,6 +118,27 @@ static const uint8_t ff_wma3_scale_rl_hu
};
+static const uint8_t ff_wma3_scale_rl_run[] = {
+ 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
+ 18, 19, 20, 21, 22, 23, 24, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
+ 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 0, 1, 2, 3, 4, 5,
+ 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
+ 19, 20, 21, 22, 23, 24, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 1,
+ 0, 1, 0, 1,
+};
+
+static const uint8_t ff_wma3_scale_rl_level[] = {
+ 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7,
+ 8, 8, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+};
+
+
#define FF_WMA3_COEF0_SIZE 244
#define FF_WMA3_COEF0_MAXBITS 22
static const uint32_t ff_wma3_coef0_huffcodes[FF_WMA3_COEF0_SIZE] = {
@@ -521,27 +542,6 @@ static const uint8_t ff_wma3_level_1[] =
};
-static const uint8_t ff_wma3_run_mask[] = {
- 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
- 18, 19, 20, 21, 22, 23, 24, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
- 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 0, 1, 2, 3, 4, 5,
- 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
- 19, 20, 21, 22, 23, 24, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 1,
- 0, 1, 0, 1,
-};
-
-static const uint8_t ff_wma3_level_mask[] = {
- 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7,
- 8, 8, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-
static const float ff_wma3_default_decorrelation_matrices[] = {
1.000000, 0.707031, -0.707031, 0.707031, 0.707031, 0.578125, 0.707031,
0.410156, 0.578125, -0.707031, 0.410156, 0.578125, 0.000000, -0.816406,
Modified: wmapro/wma3dec.c
==============================================================================
--- wmapro/wma3dec.c Sat Jan 17 13:46:01 2009 (r3969)
+++ wmapro/wma3dec.c Sat Jan 17 13:55:52 2009 (r3970)
@@ -914,8 +914,8 @@ static int wma_decode_scale_factors(WMA3
}else if(idx == 1){
break;
}else{
- skip = ff_wma3_run_mask[idx-2];
- level_mask = ff_wma3_level_mask[idx-2];
+ skip = ff_wma3_scale_rl_run[idx-2];
+ level_mask = ff_wma3_scale_rl_level[idx-2];
val = get_bits(gb,1)-1;
}
3
3
Author: faust3
Date: Sat Jan 17 16:56:55 2009
New Revision: 3977
Log:
removed channel mask from the context
Modified:
wmapro/wma3.h
wmapro/wma3dec.c
Modified: wmapro/wma3.h
==============================================================================
--- wmapro/wma3.h Sat Jan 17 16:29:58 2009 (r3976)
+++ wmapro/wma3.h Sat Jan 17 16:56:55 2009 (r3977)
@@ -143,7 +143,6 @@ typedef struct WMA3DecodeContext {
/** extradata */
unsigned int decode_flags; //< used compression features
- unsigned int dwChannelMask;
uint8_t sample_bit_depth; //< bits per sample
/** general frame info */
Modified: wmapro/wma3dec.c
==============================================================================
--- wmapro/wma3dec.c Sat Jan 17 16:29:58 2009 (r3976)
+++ wmapro/wma3dec.c Sat Jan 17 16:56:55 2009 (r3977)
@@ -37,7 +37,6 @@ static void dump_context(WMA3DecodeConte
#define PRINT(a,b) av_log(s->avctx,AV_LOG_ERROR," %s = %d\n", a, b);
#define PRINT_HEX(a,b) av_log(s->avctx,AV_LOG_ERROR," %s = %x\n", a, b);
- PRINT_HEX("ed channelmask",s->dwChannelMask);
PRINT("ed sample bit depth",s->sample_bit_depth);
PRINT_HEX("ed decode flags",s->decode_flags);
PRINT("samples per frame",s->samples_per_frame);
@@ -133,6 +132,7 @@ static av_cold int wma3_decode_init(AVCo
WMA3DecodeContext *s = avctx->priv_data;
uint8_t *edata_ptr = avctx->extradata;
int* sfb_offsets;
+ unsigned int channel_mask;
int i;
s->avctx = avctx;
@@ -142,7 +142,7 @@ static av_cold int wma3_decode_init(AVCo
s->sample_bit_depth = 16; //avctx->bits_per_sample;
if (avctx->extradata_size >= 18) {
s->decode_flags = AV_RL16(edata_ptr+14);
- s->dwChannelMask = AV_RL32(edata_ptr+2);
+ channel_mask = AV_RL32(edata_ptr+2);
// s->sample_bit_depth = AV_RL16(edata_ptr);
/** dump the extradata */
@@ -195,10 +195,10 @@ static av_cold int wma3_decode_init(AVCo
/** extract lfe channel position */
s->lfe_channel = -1;
- if(s->dwChannelMask & 8){
+ if(channel_mask & 8){
unsigned int mask = 1;
for(i=0;i<32;i++){
- if(s->dwChannelMask & mask)
+ if(channel_mask & mask)
++s->lfe_channel;
if(mask & 8)
break;
3
2
Author: diego
Date: Fri Jan 23 01:38:23 2009
New Revision: 3996
Log:
#ifdef --> #if where appropriate to sync with build system changes
Modified:
dvbmuxer/mpegenc.c
Modified: dvbmuxer/mpegenc.c
==============================================================================
--- dvbmuxer/mpegenc.c Fri Jan 23 01:35:26 2009 (r3995)
+++ dvbmuxer/mpegenc.c Fri Jan 23 01:38:23 2009 (r3996)
@@ -860,7 +860,7 @@ static int mpeg_mux_end(AVFormatContext
return 0;
}
-#ifdef CONFIG_MPEG1SYSTEM_MUXER
+#if CONFIG_MPEG1SYSTEM_MUXER
AVOutputFormat mpeg1system_muxer = {
"mpeg",
NULL_IF_CONFIG_SMALL("MPEG-1 System format"),
@@ -874,7 +874,8 @@ AVOutputFormat mpeg1system_muxer = {
mpeg_mux_end,
};
#endif
-#ifdef CONFIG_MPEG1VCD_MUXER
+
+#if CONFIG_MPEG1VCD_MUXER
AVOutputFormat mpeg1vcd_muxer = {
"vcd",
NULL_IF_CONFIG_SMALL("MPEG-1 System format (VCD)"),
@@ -888,7 +889,8 @@ AVOutputFormat mpeg1vcd_muxer = {
mpeg_mux_end,
};
#endif
-#ifdef CONFIG_MPEG2VOB_MUXER
+
+#if CONFIG_MPEG2VOB_MUXER
AVOutputFormat mpeg2vob_muxer = {
"vob",
NULL_IF_CONFIG_SMALL("MPEG-2 PS format (VOB)"),
@@ -904,7 +906,7 @@ AVOutputFormat mpeg2vob_muxer = {
#endif
/* Same as mpeg2vob_mux except that the pack size is 2324 */
-#ifdef CONFIG_MPEG2SVCD_MUXER
+#if CONFIG_MPEG2SVCD_MUXER
AVOutputFormat mpeg2svcd_muxer = {
"svcd",
NULL_IF_CONFIG_SMALL("MPEG-2 PS format (VOB)"),
@@ -920,7 +922,7 @@ AVOutputFormat mpeg2svcd_muxer = {
#endif
/* Same as mpeg2vob_mux except the 'is_dvd' flag is set to produce NAV pkts */
-#ifdef CONFIG_MPEG2DVD_MUXER
+#if CONFIG_MPEG2DVD_MUXER
AVOutputFormat mpeg2dvd_muxer = {
"dvd",
NULL_IF_CONFIG_SMALL("MPEG-2 PS format (DVD VOB)"),
1
0
Author: diego
Date: Fri Jan 23 01:35:26 2009
New Revision: 3995
Log:
Remove useless #ifdef.
Modified:
dirac/libavcodec/diracenc.c
Modified: dirac/libavcodec/diracenc.c
==============================================================================
--- dirac/libavcodec/diracenc.c Fri Jan 23 01:12:17 2009 (r3994)
+++ dirac/libavcodec/diracenc.c Fri Jan 23 01:35:26 2009 (r3995)
@@ -953,7 +953,6 @@ static int encode_frame(AVCodecContext *
return size;
}
-#ifdef CONFIG_ENCODERS
AVCodec dirac_encoder = {
"dirac",
CODEC_TYPE_VIDEO,
@@ -964,4 +963,3 @@ AVCodec dirac_encoder = {
encode_end,
.pix_fmts = (enum PixelFormat[]) {PIX_FMT_YUV420P, -1}
};
-#endif
1
0
In r16600 all ENABLE_* was renamed to CONFIG_* in file mpegenc.c.
Apply to soc branch too.
Tomer
2
1