1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2025-04-24 17:12:34 +02:00

Merge commit '0b300daad2f5cb59a7c06dde5ac701685e6edf16'

* commit '0b300daad2f5cb59a7c06dde5ac701685e6edf16':
  h264: error out on unset current_picture_ptr for h->current_slice > 0
  avprobe: report per stream bit rate if set by the decoder
  aac: avoid a memcpy in sbr_qmf_analysis

Conflicts:
	avprobe.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
Michael Niedermayer 2012-12-03 01:56:47 +01:00
commit 211372e86d
2 changed files with 16 additions and 10 deletions

View File

@ -1159,10 +1159,9 @@ static void sbr_dequant(SpectralBandReplication *sbr, int id_aac)
*/ */
static void sbr_qmf_analysis(DSPContext *dsp, FFTContext *mdct, static void sbr_qmf_analysis(DSPContext *dsp, FFTContext *mdct,
SBRDSPContext *sbrdsp, const float *in, float *x, SBRDSPContext *sbrdsp, const float *in, float *x,
float z[320], float W[2][32][32][2]) float z[320], float W[2][32][32][2], int buf_idx)
{ {
int i; int i;
memcpy(W[0], W[1], sizeof(W[0]));
memcpy(x , x+1024, (320-32)*sizeof(x[0])); memcpy(x , x+1024, (320-32)*sizeof(x[0]));
memcpy(x+288, in, 1024*sizeof(x[0])); memcpy(x+288, in, 1024*sizeof(x[0]));
for (i = 0; i < 32; i++) { // numTimeSlots*RATE = 16*2 as 960 sample frames for (i = 0; i < 32; i++) { // numTimeSlots*RATE = 16*2 as 960 sample frames
@ -1171,7 +1170,7 @@ static void sbr_qmf_analysis(DSPContext *dsp, FFTContext *mdct,
sbrdsp->sum64x5(z); sbrdsp->sum64x5(z);
sbrdsp->qmf_pre_shuffle(z); sbrdsp->qmf_pre_shuffle(z);
mdct->imdct_half(mdct, z, z+64); mdct->imdct_half(mdct, z, z+64);
sbrdsp->qmf_post_shuffle(W[1][i], z); sbrdsp->qmf_post_shuffle(W[buf_idx][i], z);
x += 32; x += 32;
} }
} }
@ -1307,7 +1306,8 @@ static void sbr_chirp(SpectralBandReplication *sbr, SBRData *ch_data)
/// Generate the subband filtered lowband /// Generate the subband filtered lowband
static int sbr_lf_gen(AACContext *ac, SpectralBandReplication *sbr, static int sbr_lf_gen(AACContext *ac, SpectralBandReplication *sbr,
float X_low[32][40][2], const float W[2][32][32][2]) float X_low[32][40][2], const float W[2][32][32][2],
int buf_idx)
{ {
int i, k; int i, k;
const int t_HFGen = 8; const int t_HFGen = 8;
@ -1315,14 +1315,15 @@ static int sbr_lf_gen(AACContext *ac, SpectralBandReplication *sbr,
memset(X_low, 0, 32*sizeof(*X_low)); memset(X_low, 0, 32*sizeof(*X_low));
for (k = 0; k < sbr->kx[1]; k++) { for (k = 0; k < sbr->kx[1]; k++) {
for (i = t_HFGen; i < i_f + t_HFGen; i++) { for (i = t_HFGen; i < i_f + t_HFGen; i++) {
X_low[k][i][0] = W[1][i - t_HFGen][k][0]; X_low[k][i][0] = W[buf_idx][i - t_HFGen][k][0];
X_low[k][i][1] = W[1][i - t_HFGen][k][1]; X_low[k][i][1] = W[buf_idx][i - t_HFGen][k][1];
} }
} }
buf_idx = 1-buf_idx;
for (k = 0; k < sbr->kx[0]; k++) { for (k = 0; k < sbr->kx[0]; k++) {
for (i = 0; i < t_HFGen; i++) { for (i = 0; i < t_HFGen; i++) {
X_low[k][i][0] = W[0][i + i_f - t_HFGen][k][0]; X_low[k][i][0] = W[buf_idx][i + i_f - t_HFGen][k][0];
X_low[k][i][1] = W[0][i + i_f - t_HFGen][k][1]; X_low[k][i][1] = W[buf_idx][i + i_f - t_HFGen][k][1];
} }
} }
return 0; return 0;
@ -1670,8 +1671,8 @@ void ff_sbr_apply(AACContext *ac, SpectralBandReplication *sbr, int id_aac,
/* decode channel */ /* decode channel */
sbr_qmf_analysis(&ac->dsp, &sbr->mdct_ana, &sbr->dsp, ch ? R : L, sbr->data[ch].analysis_filterbank_samples, sbr_qmf_analysis(&ac->dsp, &sbr->mdct_ana, &sbr->dsp, ch ? R : L, sbr->data[ch].analysis_filterbank_samples,
(float*)sbr->qmf_filter_scratch, (float*)sbr->qmf_filter_scratch,
sbr->data[ch].W); sbr->data[ch].W, sbr->data[ch].Ypos);
sbr_lf_gen(ac, sbr, sbr->X_low, sbr->data[ch].W); sbr_lf_gen(ac, sbr, sbr->X_low, sbr->data[ch].W, sbr->data[ch].Ypos);
sbr->data[ch].Ypos ^= 1; sbr->data[ch].Ypos ^= 1;
if (sbr->start) { if (sbr->start) {
sbr_hf_inverse_filter(&sbr->dsp, sbr->alpha0, sbr->alpha1, sbr->X_low, sbr->k[0]); sbr_hf_inverse_filter(&sbr->dsp, sbr->alpha0, sbr->alpha1, sbr->X_low, sbr->k[0]);

View File

@ -2709,6 +2709,11 @@ static int decode_slice_header(H264Context *h, H264Context *h0)
s->picture_structure = last_pic_structure; s->picture_structure = last_pic_structure;
s->dropable = last_pic_dropable; s->dropable = last_pic_dropable;
return AVERROR_INVALIDDATA; return AVERROR_INVALIDDATA;
} else if (!s->current_picture_ptr) {
av_log(s->avctx, AV_LOG_ERROR,
"unset current_picture_ptr on %d. slice\n",
h0->current_slice + 1);
return AVERROR_INVALIDDATA;
} }
} else { } else {
/* Shorten frame num gaps so we don't have to allocate reference /* Shorten frame num gaps so we don't have to allocate reference