0

对于以下代码(不使用 ARC 构建)

在.h

@interface VideoFrameExtractor : NSObject {
AVFormatContext *pFormatCtx;
AVCodecContext *pCodecCtx;
}

int av_open_input_file(AVFormatContext **ic_ptr, const char *filename,
                       AVInputFormat *fmt,
                       int buf_size,
                       AVFormatParameters *ap);

    // Open video file
    if(av_open_input_file(&pFormatCtx, [moviePath  cStringUsingEncoding:NSASCIIStringEncoding], NULL, 0, NULL)!=0)
        goto initError; // Couldn't open file

    // Retrieve stream information
    if(av_find_stream_info(pFormatCtx)<0)
        goto initError; // Couldn't find stream information

我们应该将 pFormatCtx 属性的属性设置为保留还是其他?提出这个问题的原因是我们在 av_find_stream_info 调用中引用属性时遇到了 EXC_BAD_ACCESS 错误。

4

1 回答 1

0

我们应该将 pFormatCtx 属性的属性设置为 strong 还是其他?

av_open_input_file不是Objective C方法,它直接在ARC之外分配内存,没有任何类型的引用计数。因此,您绝对不需要通过强属性处理这些引用。

av_find_stream_info您绝对应该以可能失败的方式寻找它。

实际上,我看到的是您应该按照一些步骤正确设置您的库以使其正常工作:

AVFormatContext* pFormatCtx = avformat_alloc_context();
avformat_open_input(&pFormatCtx, filename, NULL, NULL);
int64_t duration = pFormatCtx->duration;
// etc
avformat_free_context(pFormatCtx);

无论如何,请检查文档并查看本教程

于 2012-07-24T07:59:29.640 回答