Domanda

Sto scrivendo un decodificatore audio basato su FFMPEG per Android, dove devo decodificare l'audio AAC, ma per qualche motivo restituisce sempre 0 byte decodificati.

Sembra che io passi tutto bene. Qualcuno può dirmi cosa è andato storto nel mio caso. Ho copiato il codice da ffplay.c. Qual è il motivo per cui la funzione AVCODEC_DECODE_AUDIO3 restituisce sempre zero?

Ecco il codice da ffplay.c:

AVPacket *pkt_temp = &is->audio_pkt_temp;
    AVPacket *pkt = &is->audio_pkt;
    AVCodecContext *dec= is->audio_st->codec;
    int n, len1, data_size;
    double pts;

          data_size = sizeof(is->audio_buf1);
        len1 = avcodec_decode_audio3(dec, (int16_t *)is->audio_buf1, &data_size, pkt_temp);
        if (len1 < 0) {
            pkt_temp->size = 0;
            break;
        } 

       if (data_size <= 0){
                   //This block always gets executed.
            continue;
    }
È stato utile?

Soluzione

Sono in grado di risolvere il mio problema, non con il codice sopra. Ma ho riscritto completamente il mio codice audio, che non ha thread o meccanismo di attesa. Sospetto che il problema non si trovi nel codice sopra, ma è nel modo in cui passo i dati a una funzione.

Altri suggerimenti

Quando lo fai:

data_size = sizeof(is->audio_buf1);

Stai ottenendo le dimensioni di un puntatore, anziché le dimensioni del buffer appuntato da is-> audio_buf1

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top