일련의 CGImages에서 비디오를 디스크에 기록하는 데 사용하는 Objective-C 클래스가 있습니다 (Obj-C에만 해당하는 것은 아니지만). (픽셀 데이터를 얻기 위해 맨 위에서 사용하는 코드는 Apple에서 바로 제공됩니다 : http://developer.apple.com/mac/library/qa/qa2007/qa1509.html). 성공적으로 코덱과 컨텍스트를 만듭니다. EXC_BAD_ACCESS를 얻을 때 avcodec_encode_video가 될 때까지 모든 것이 잘 진행됩니다. 나는 이것이 간단한 수정이어야한다고 생각하지만, 나는 어디서 잘못 될지 알 수 없다.avcodec_encode_video를 호출 할 때 EXC_BAD_ACCESS
나는 간결함을 검사하는 데 몇 가지 오류가 발생했습니다. 'c'는 성공적으로 생성 된 AVCodecContext *입니다.
-(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++;
}
나는 수십 번 밟았습니다. 다음은 몇 가지 수는 ...이다
- 데이터 길이 = 408960
- picture_buff = 0x5c85000
- picture-> 데이터 [0] = 0x5c85000 - 내가 그 avpicture_fill이 일을 의미하기 위해 수행하는 ...
- outbuf_size = 408960
그리고 나서 avcodec_encode_video에서 EXC_BAD_ACCESS를 얻습니다. 관련성이 있는지는 잘 모르지만 대부분이 코드는 api-example.c에서 제공합니다. Snow Leopard에서 armv6/armv7 용으로 컴파일 한 XCode를 사용하고 있습니다.
도움을 위해 미리 감사드립니다.
혹시이 문제를 해결 했습니까? – skorulis