J'ai une classe Objective-C (bien que je ne pense pas que ce soit quelque chose d'Obj-C) que j'utilise pour écrire une vidéo sur disque à partir d'une série d'images CG. (Le code que j'utilise en haut pour obtenir les données de pixels vient directement d'Apple: http://developer.apple.com/mac/library/qa/qa2007/qa1509.html). J'ai réussi à créer le codec et le contexte - tout va bien jusqu'à ce qu'il arrive à avcodec_encode_video, quand j'obtiens EXC_BAD_ACCESS. Je pense que cela devrait être une solution simple, mais je ne peux pas comprendre où je vais mal.EXC_BAD_ACCESS lors de l'appel de avcodec_encode_video
J'ai supprimé une vérification d'erreur pour la concision. 'c' est un AVCodecContext * qui a été créé avec succès.
-(void)addFrame:(CGImageRef)img
{
CFDataRef bitmapData = CGDataProviderCopyData(CGImageGetDataProvider(img));
long dataLength = CFDataGetLength(bitmapData);
uint8_t* picture_buff = (uint8_t*)malloc(dataLength);
CFDataGetBytes(bitmapData, CFRangeMake(0, dataLength), picture_buff);
AVFrame *picture = avcodec_alloc_frame();
avpicture_fill((AVPicture*)picture, picture_buff, c->pix_fmt, c->width, c->height);
int outbuf_size = avpicture_get_size(c->pix_fmt, c->width, c->height);
uint8_t *outbuf = (uint8_t*)av_malloc(outbuf_size);
out_size = avcodec_encode_video(c, outbuf, outbuf_size, picture); // ERROR occurs here
printf("encoding frame %3d (size=%5d)\n", i, out_size);
fwrite(outbuf, 1, out_size, f);
CFRelease(bitmapData);
free(picture_buff);
free(outbuf);
av_free(picture);
i++;
}
Je l'ai traversé des douzaines de fois. Voici quelques chiffres ...
- dataLength = 408960
- picture_buff = 0x5c85000
- peinture-> données [0] = 0x5c85000 - que je considère dire que avpicture_fill a travaillé ...
- outbuf_size = 408960
puis j'obtiens EXC_BAD_ACCESS à avcodec_encode_video. Je ne sais pas si c'est pertinent, mais la plupart de ce code provient d'api-example.c. J'utilise XCode, compilant pour armv6/armv7 sur Snow Leopard.
Merci d'avance pour votre aide!
Avez-vous déjà trouvé la solution? – skorulis