Do you have PulseAudio installed?

On Wed, Oct 7, 2009 at 8:01 PM, Benjamin Gretsch <[email protected]> wrote:

> Benjamin Gretsch schrieb:
> > Hi everybody,
> >
> > I am still new to libavcodec and to a/v processing.
> >
> > I have to process an audio stream from a movie source and encode it as
> AC3.
> > So far I have only the decoding and encoding (call it transcoding)
> without
> > processing, but with a problem: The output file has a lot of noise, that
> > wasn't there before.
> >
> > This is how I do it in pseudo code:
> > make avformat contexts for input and output
> > make codec contexts for decoder and encoder
> > setup and open encoder
> > write headers to the output file
> >
> > in a loop: read packets, and if they belong to the correct stream, decode
> > the audio, collect the samples, split them into channels*frame_size parts
> > and encode them as frames. Then send the encoded data as packet to the
> > output format context.
> >
> > write trailer
> > close the output file and free everything
> >
> > Did I forget something?
> >
> > Best Regards
> > Benjamin
> >
> I have now dumped the samples into files and I see that the samples that my
> encoding class receives differs from the samples that I send to avcodec.
> Something has to be wrong with my buffering code, but I don't see the
> mistake. The first difference occurs in the first sample of the second
> output frame.
> Ok, it's not avcodec related anymore, but does anybody see the problem
> here?
>
>
> bool LAVCAudioEncoder::encodeSamples(int16_t *samples, int nb_samples)
> {
>        //debug
>        FILE *f = fopen("/media/Prometheus/tvrec/src.tmp", "ab");
>        fwrite(samples, 2, nb_samples, f);
>        fclose(f);
>        qDebug() << "Encode" << nb_samples <<"samples";
>        //debug end
>
>        //if there are too frew samples to encode a whole frame,
>        //put them into the buffer and return
>        if (sampleBufferUsed + nb_samples < channels*cctx->frame_size)
>        {
>                memcpy(&sampleBuffer[sampleBufferUsed], samples,
> 2*nb_samples);
>                sampleBufferUsed += nb_samples;
>                qDebug() << "Put" << nb_samples << "into buffer and return";
>                return true;
>        }
>
>        //if there are already samples in buffer, fill the buffer with
>        //more samples and encode the frame
>        if (sampleBufferUsed > 0)
>        {
>                int n = channels*cctx->frame_size - sampleBufferUsed;
>                qDebug() << "append" << n <<"samples to the buffer + encode
> frame";
>                if (n > 0)
>                {
>                        memcpy(&sampleBuffer[sampleBufferUsed], samples,
> 2*n);
>                }
>                sampleBufferUsed = 0;
>                if (!encodeFrame(sampleBuffer))
>                        return false;
>
>                nb_samples -= n;
>                samples += 2*n;
>        }
>
>        //while we have enough samples left for a whole frame, encode them
>        while (nb_samples >= channels*cctx->frame_size)
>        {
>                qDebug() << "Encode frame directly";
>                if (!encodeFrame(samples))
>                        return false;
>                samples += 2*channels*cctx->frame_size;
>                nb_samples -= channels*cctx->frame_size;
>        }
>
>        //put the remaining samples into the buffer
>        if (nb_samples > 0)
>        {
>                qDebug() << "Put" << nb_samples <<"remaining samples into
> buffer";
>                memcpy(sampleBuffer, samples, 2*nb_samples);
>                sampleBufferUsed = nb_samples;
>        }
>        return true;
> }
>
> The debug output starts with
> encoder has a frame size of 1536 that is 3072 samples/frame
> Encode 2304 samples
> Put 2304 into buffer and return
> Encode 2304 samples
> append 768 samples to the buffer + encode frame
> Put 1536 remaining samples into buffer
> Encode 2304 samples
> append 1536 samples to the buffer + encode frame
> Put 768 remaining samples into buffer
> ...
>
> Thanks in advance
> Benjamin
> _______________________________________________
> libav-user mailing list
> [email protected]
> https://lists.mplayerhq.hu/mailman/listinfo/libav-user
>
_______________________________________________
libav-user mailing list
[email protected]
https://lists.mplayerhq.hu/mailman/listinfo/libav-user

Reply via email to