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:
		
						commit
						211372e86d
					
				@ -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]);
 | 
				
			||||||
 | 
				
			|||||||
@ -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
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user