ref: 2737378f8dbd9e362909e19956f817adc78df16a
parent: 24b3fe86e5ab0d35a40475eb043ace1f1b640c1d
author: menno <menno>
date: Mon Oct 20 11:43:52 EDT 2003
DRM fix
--- a/libfaad/decoder.c
+++ b/libfaad/decoder.c
@@ -22,7 +22,7 @@
** Commercial non-GPL licensing of this software is possible.
** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
**
-** $Id: decoder.c,v 1.76 2003/10/20 14:46:55 menno Exp $
+** $Id: decoder.c,v 1.77 2003/10/20 15:43:52 menno Exp $
**/
#include "common.h"
@@ -344,7 +344,11 @@
}
hDecoder->channelConfiguration = mp4ASC.channelsConfiguration;
if (mp4ASC.frameLengthFlag)
+#ifdef ALLOW_SMALL_FRAMELENGTH
hDecoder->frameLength = 960;
+#else
+ return -1;
+#endif
/* must be done before frameLength is divided by 2 for LD */
#ifdef SSR_DEC
@@ -442,7 +446,8 @@
#ifdef LTP_DEC
hDecoder->ltp_lag[i] = 0;
if (hDecoder->lt_pred_stat[i]) free(hDecoder->lt_pred_stat[i]);
- hDecoder->lt_pred_stat[i] = NULL; #endif
+ hDecoder->lt_pred_stat[i] = NULL;
+#endif
}
return 0;
@@ -726,7 +731,7 @@
adts_header adts;
uint8_t channels = 0, ch_ele = 0;
uint8_t output_channels = 0;
- bitfile *ld = (bitfile*)malloc(sizeof(bitfile));
+ bitfile ld;
uint32_t bitsconsumed;
#ifdef DRM
uint8_t *revbuffer;
@@ -753,15 +758,12 @@
#endif
fb_info *fb;
drc_info *drc;
-#ifdef LTP_DEC
- uint16_t *ltp_lag;
-#endif
program_config *pce;
void *sample_buffer;
/* safety checks */
- if ((hDecoder == NULL) || (hInfo == NULL) || (buffer == NULL) || (ld == NULL))
+ if ((hDecoder == NULL) || (hInfo == NULL) || (buffer == NULL))
{
return NULL;
}
@@ -787,9 +789,6 @@
fb = hDecoder->fb;
drc = hDecoder->drc;
outputFormat = hDecoder->config.outputFormat;
-#ifdef LTP_DEC
- ltp_lag = hDecoder->ltp_lag;
-#endif
pce = &hDecoder->pce;
frame_len = hDecoder->frameLength;
@@ -798,12 +797,12 @@
memset(hDecoder->internal_channel, 0, MAX_CHANNELS*sizeof(hDecoder->internal_channel[0]));
/* initialize the bitstream */
- faad_initbits(ld, buffer, buffer_size);
+ faad_initbits(&ld, buffer, buffer_size);
#ifdef DRM
if (object_type == DRM_ER_LC)
{
- faad_getbits(ld, 8
+ faad_getbits(&ld, 8
DEBUGVAR(1,1,"faacDecDecode(): skip CRC"));
}
#endif
@@ -811,7 +810,7 @@
if (hDecoder->adts_header_present)
{
adts.old_format = hDecoder->config.useOldADTSFormat;
- if ((hInfo->error = adts_frame(&adts, ld)) > 0)
+ if ((hInfo->error = adts_frame(&adts, &ld)) > 0)
goto error;
/* MPEG2 does byte_alignment() here,
@@ -825,7 +824,7 @@
#endif
/* decode the complete bitstream */
- raw_data_block(hDecoder, hInfo, ld, pce, drc);
+ raw_data_block(hDecoder, hInfo, &ld, pce, drc);
ch_ele = hDecoder->fr_ch_ele;
channels = hDecoder->fr_channels;
@@ -835,16 +834,14 @@
/* no more bit reading after this */
- bitsconsumed = faad_get_processed_bits(ld);
+ bitsconsumed = faad_get_processed_bits(&ld);
hInfo->bytesconsumed = bit2byte(bitsconsumed);
- if (ld->error)
+ if (ld.error)
{
hInfo->error = 14;
goto error;
}
- faad_endbits(ld);
- if (ld) free(ld);
- ld = NULL;
+ faad_endbits(&ld);
#ifdef DRM
#ifdef SBR_DEC
@@ -1047,10 +1044,6 @@
return sample_buffer;
error:
- /* free all memory that could have been allocated */
- faad_endbits(ld);
- if (ld) free(ld);
-
/* cleanup */
#ifdef ANALYSIS
fflush(stdout);