[Ffmpeg-devel] Captured buffer (PCM) to MPEG frame(s).. How to do this???
Paul
paul.pham
Fri Jan 12 07:58:13 CET 2007
I capture (using directsound) my voice to a buffer, and i would like to encode every buffer (captured) into MPEG frame(s) and then write to output file.
Here are my code to encode a buffer (audio date with PCM format) to MPEG frame(s)
But it is not success, i donot know where/what i missing. So, can you help?
{
//packet.data is a buffer that stored audio data (PCM format)
//AVCODEC_MAX_AUDIO_FRAME_SIZE = 192000
samples = (short *) av_fast_realloc(samples, &samples_size, FFMAX(4096, AVCODEC_MAX_AUDIO_FRAME_SIZE));
samples = (short *)packet.data;
avcodec_decode_audio(pCodecCtx, samples, &frameFinished, packet.data, 4096);
fifo_write(&fifo, (uint8_t *)samples, 4096, &fifo.wptr);
if(frameFinished)
{
int frame_bytes = c->frame_size * 2 * c->channels;
fifo_read(&fifo, data_buf, frame_bytes, &fifo.rptr);
{
// encode the samples
pkt.size= avcodec_encode_audio(c, audio_out, 4096,(short *)data_buf);
pkt.stream_index= audio_st->index;
pkt.data= audio_out;
pkt.flags |= PKT_FLAG_KEY;
fwrite(pkt.data,sizeof(int8_t),pkt.size,file);
// write the compressed frame in the media file
if (av_interleaved_write_frame(oc, &pkt) != 0)
{
fprintf(stderr, "Error while writing audio frame\n");
return false;
}
}
}
av_free_packet(&m_pMPEG.packet);
av_free_packet(&m_pMPEG.pkt);
}
i plan to write the output with 4 seconds of lenghts. But the output i receive is only one second and the data not same as i "said" into microphone.
More information about the ffmpeg-devel
mailing list