
Recherche avancée
Médias (1)
-
Publier une image simplement
13 avril 2011, par ,
Mis à jour : Février 2012
Langue : français
Type : Video
Autres articles (91)
-
L’utiliser, en parler, le critiquer
10 avril 2011La première attitude à adopter est d’en parler, soit directement avec les personnes impliquées dans son développement, soit autour de vous pour convaincre de nouvelles personnes à l’utiliser.
Plus la communauté sera nombreuse et plus les évolutions seront rapides ...
Une liste de discussion est disponible pour tout échange entre utilisateurs. -
Websites made with MediaSPIP
2 mai 2011, parThis page lists some websites based on MediaSPIP.
-
Mediabox : ouvrir les images dans l’espace maximal pour l’utilisateur
8 février 2011, parLa visualisation des images est restreinte par la largeur accordée par le design du site (dépendant du thème utilisé). Elles sont donc visibles sous un format réduit. Afin de profiter de l’ensemble de la place disponible sur l’écran de l’utilisateur, il est possible d’ajouter une fonctionnalité d’affichage de l’image dans une boite multimedia apparaissant au dessus du reste du contenu.
Pour ce faire il est nécessaire d’installer le plugin "Mediabox".
Configuration de la boite multimédia
Dès (...)
Sur d’autres sites (10008)
-
avcodec : add AVCodecContext.frame_num as 64 bit variant to frame_number
23 janvier 2023, par Marton Balintavcodec : add AVCodecContext.frame_num as 64 bit variant to frame_number
Frame counters can overflow relatively easily (INT_MAX number of frames is
slightly more than 1 year for 60 fps content), so make sure we use 64 bit
values for them.Also deprecate the old 32 bit frame_number attribute.
Signed-off-by : Marton Balint <cus@passwd.hu>
- [DH] doc/APIchanges
- [DH] doc/examples/decode_video.c
- [DH] fftools/ffmpeg.c
- [DH] libavcodec/4xm.c
- [DH] libavcodec/8svx.c
- [DH] libavcodec/aacenc.c
- [DH] libavcodec/ansi.c
- [DH] libavcodec/atrac3plus.c
- [DH] libavcodec/avcodec.c
- [DH] libavcodec/avcodec.h
- [DH] libavcodec/bfi.c
- [DH] libavcodec/cdgraphics.c
- [DH] libavcodec/cljrenc.c
- [DH] libavcodec/decode.c
- [DH] libavcodec/dvenc.c
- [DH] libavcodec/eac3enc.c
- [DH] libavcodec/encode.c
- [DH] libavcodec/evrcdec.c
- [DH] libavcodec/flashsv2enc.c
- [DH] libavcodec/flashsvenc.c
- [DH] libavcodec/g2meet.c
- [DH] libavcodec/gif.c
- [DH] libavcodec/h261dec.c
- [DH] libavcodec/h264_slice.c
- [DH] libavcodec/interplayvideo.c
- [DH] libavcodec/ituh263dec.c
- [DH] libavcodec/libwebpenc_animencoder.c
- [DH] libavcodec/mjpegdec.c
- [DH] libavcodec/mlpenc.c
- [DH] libavcodec/mpegutils.c
- [DH] libavcodec/nuv.c
- [DH] libavcodec/options_table.h
- [DH] libavcodec/opusenc.c
- [DH] libavcodec/pngenc.c
- [DH] libavcodec/pthread_frame.c
- [DH] libavcodec/qcelpdec.c
- [DH] libavcodec/qtrleenc.c
- [DH] libavcodec/rv10.c
- [DH] libavcodec/smcenc.c
- [DH] libavcodec/snowenc.c
- [DH] libavcodec/svq1enc.c
- [DH] libavcodec/svq3.c
- [DH] libavcodec/version.h
- [DH] libavcodec/version_major.h
- [DH] libavcodec/vp3.c
- [DH] libavcodec/wcmv.c
- [DH] libavcodec/wmaprodec.c
- [DH] libavcodec/yop.c
- [DH] tools/decode_simple.c
- [DH] tools/scale_slice_test.c
- [DH] tools/venc_data_dump.c
-
Trying to decode and encode audio files with the FFMPEG C API
1er février 2023, par Giulio IacominoMy ultimate goal will be to split multi channel WAV files into single mono ones, after few days of experiments my plan is the sequence :


- 

- Decode audio file into a frame.
- Convert interleaved frame into a planar one. (in order to separate the data buffer into multiple ones)
- Grab the planar frame buffers and encode each of them into a new file.








So far I'm stuck trying to convert a wav file from interleaved to a planar one, and reprint the wav file.


edit :
I've turned on guard malloc and apparently the error is within the convert function


Here's the code :


AVCodecContext* initializeAndOpenCodecContext(AVFormatContext* formatContext, AVStream* stream){
 // grab our stream, most audio files only have one anyway
 const AVCodec* decoder = avcodec_find_decoder(stream->codecpar->codec_id);
 if (!decoder){
 std::cout << "no decoder, can't go ahead!\n";
 return nullptr;
 }
 AVCodecContext* codecContext = avcodec_alloc_context3(decoder);
 avcodec_parameters_to_context(codecContext, stream->codecpar);
 int err = avcodec_open2(codecContext, decoder, nullptr);
 if (err < 0){
 std::cout << "couldn't open codex!\n";
 }
 return codecContext;
}

void initialiseResampler(SwrContext* resampler, AVFrame* inputFrame, AVFrame* outputFrame){
 av_opt_set_chlayout(resampler, "in_channel_layout", &inputFrame->ch_layout, 0);
 av_opt_set_chlayout(resampler, "out_channel_layout", &outputFrame->ch_layout, 0);
 av_opt_set_int(resampler, "in_sample_fmt", inputFrame->format, 0);
 av_opt_set_int(resampler, "out_sample_fmt", AV_SAMPLE_FMT_FLTP, 0);
 av_opt_set_int(resampler, "in_sample_rate", inputFrame->sample_rate, 0);
 av_opt_set_int(resampler, "out_sample_rate", outputFrame->sample_rate, 0);
}

AVFrame* initialisePlanarFrame(AVFrame* frameToInit, AVFrame* inputFrame){
 //AVFrame *planar_frame = av_frame_alloc();
 frameToInit->nb_samples = inputFrame->nb_samples;
 frameToInit->ch_layout = inputFrame->ch_layout;
 frameToInit->format = AV_SAMPLE_FMT_FLTP;
 frameToInit->sample_rate = inputFrame->sample_rate;
 return nullptr;
}

int main() {
 AVCodecContext *codingContext= NULL;
 const AVCodec *codec;
 codec = avcodec_find_encoder(AV_CODEC_ID_PCM_F32LE);
 codingContext = avcodec_alloc_context3(codec);
 codingContext->bit_rate = 16000;
 codingContext->sample_fmt = AV_SAMPLE_FMT_FLT;
 codingContext->sample_rate = 48000;
 codingContext->ch_layout.nb_channels = 2;
 codingContext->ch_layout.order = (AVChannelOrder)0;
 uint8_t **buffer_ = NULL;
 AVFrame* planar_frame = NULL;
 
 // open input
 AVFormatContext* formatContext = nullptr;
 int err = avformat_open_input(&formatContext, "/Users/tonytorm/Desktop/drum kits/DECAP - Drums That Knock Vol. 9/Kicks/Brash Full Metal Kick.wav", nullptr, nullptr);
 if (err < 0){
 fprintf(stderr, "Unable to open file!\n");
 return;
 }

 // find audio stream
 err = avformat_find_stream_info(formatContext, nullptr);
 if (err > 0){
 fprintf(stderr, "Unable to retrieve stream info!\n");
 return;
 }
 
 int index = av_find_best_stream(formatContext, AVMEDIA_TYPE_AUDIO, -1, -1, nullptr, 0);
 if (index < 0){
 std::cout<< "coudn't find audio stream in this file" << '\n';
 }
 AVStream* stream = formatContext->streams[index];
 
 auto fileName = "/Users/tonytorm/Desktop/newFile.wav";
 FILE* newFile = fopen(fileName, "w+");
 
 // find right codec and open it
 if (auto openCodecContext = initializeAndOpenCodecContext(formatContext, stream)){
 AVPacket* packet = av_packet_alloc();
 AVFrame* frame = av_frame_alloc();
 AVFrame* planar_frame = av_frame_alloc();
 SwrContext *avr = swr_alloc(); //audio resampling context
 AVChannelLayout monoChannelLayout{(AVChannelOrder)0};
 monoChannelLayout.nb_channels = 2;
 

 while (!av_read_frame(formatContext, packet)){
 if (packet->stream_index != stream->index) continue; // we only care about audio
 int ret = avcodec_send_packet(openCodecContext, packet);
 if ( ret < 0) {
 if (ret != AVERROR(EAGAIN)){ // if error is actual error not EAGAIN
 std::cout << "can't do shit\n";
 return;
 }
 }
 while (int bret = avcodec_receive_frame(openCodecContext, frame) == 0){
 initialisePlanarFrame(planar_frame, frame);
 
 
 
 int buffer_size_in = av_samples_get_buffer_size(nullptr,
 frame->ch_layout.nb_channels,
 frame->nb_samples,
 (AVSampleFormat)frame->format,
 0);
 int buffer_size_out = buffer_size_in/frame->ch_layout.nb_channels;

 //planar_frame->linesize[0] = buffer_size_out;
 
 int ret = av_samples_alloc(planar_frame->data,
 NULL,
 planar_frame->ch_layout.nb_channels,
 planar_frame->nb_samples,
 AV_SAMPLE_FMT_FLTP,
 0);
 
 initialiseResampler(avr, frame, planar_frame);
 if (int errRet = swr_init(avr) < 0) {
 fprintf(stderr, "Failed to initialize the resampling context\n");
 }

 if (ret < 0){
 char error_message[AV_ERROR_MAX_STRING_SIZE];
 av_strerror(ret, error_message, AV_ERROR_MAX_STRING_SIZE);
 fprintf(stderr, "Error allocating sample buffer: %s\n", error_message);
 return -1;
 }
 
 int samples_converted = swr_convert(avr,
 planar_frame->data,
 buffer_size_out,
 (const uint8_t **)frame->data,
 buffer_size_in);
 if (samples_converted < 0) {
 // handle error
 std::cout << "error in conversion\n";
 return;
 }
 if (avcodec_open2(codingContext, codec, NULL) < 0) {
 std::cout << "can't encode!\n";
 return;
 }
 AVPacket* nu_packet = av_packet_alloc();
 while (int copy = avcodec_send_frame(codingContext, planar_frame) != 0){
 if (copy == AVERROR(EAGAIN) || copy == AVERROR_EOF){
 std::cout << "can't encode file\n";
 return;
 }
 if (avcodec_receive_packet(codingContext, nu_packet) >=0){
 fwrite(nu_packet->data, 4, nu_packet->size, newFile);
 //av_write_frame(avc, nu_packet);
 }
 }
 av_freep(planar_frame->data);
 av_frame_unref(frame);
 av_frame_unref(planar_frame);
 }
// av_packet_free(&packet);
// av_packet_free(&nu_packet);
 }
 swr_free(&avr);
 avcodec_free_context(&codingContext);
 
 }
 fclose(newFile);
}



I know i should write a header to the new wave file but for now I'm just trying to write the raw audio data. I'm getting always the same error but in different parts of the code (randomly), sometimes the code even compiles (writing the raw audio data, but filling it with some rubbish as well, i end up with a data file that is thrice the original one, sometimes i end up with a slightly smaller file - i guess the raw audio without the headers), results are basically random.


Here are some of the functions that trigger the error :


int ret = av_samples_alloc(); //(this the most common one)
swr_convert()
av_freep();



the error is :


main(64155,0x101b5d5c0) malloc: Incorrect checksum for freed object 0x106802600: probably modified after being freed.
Corrupt value: 0x0
main(64155,0x101b5d5c0) malloc: *** set a breakpoint in malloc_error_break to debug */



-
avfilter/paletteuse : remove alternative search methods
27 décembre 2022, par Clément Bœsch