Pregunta

Estoy escribiendo un decodificador de audio basado en FFMPEG para Android, donde tengo que decodificar AAC Audio, pero por alguna razón siempre devuelve 0 bytes decodificados.

Parece que paso todo bien. ¿Alguien puede decirme qué salió mal en mi caso? Copié código de ffplay.c. ¿Cuál es la razón por la cual la función AVCODEC_DECODE_AUDIO3 siempre devuelve cero?

Aquí está el código de 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;
    }
¿Fue útil?

Solución

Puedo resolver mi problema, no con el código anterior. Pero reescribí completamente mi código de audio, que no tiene ningún hilo o mecanismo de espera. Sospecho que el problema no se encuentra en el código anterior, pero es en la forma en que paso los datos a una función.

Otros consejos

Cuando tu lo hagas:

data_size = sizeof(is->audio_buf1);

Obtiene el tamaño de un puntero, en lugar del tamaño del búfer apuntado por IS-> Audio_Buf1

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top