On Thu, 12 Sep 2013 14:46:31 +0200 Fulbert Boussaton <[email protected]> wrote:
> AVFormatContext* Ctx; > avformat_open_input(&Ctx, <...>, NULL, &Options); > avformat_find_stream_info(Ctx, NULL); > AVCodecContext* VCodecCtx = Ctx->streams[0]->codec; > AVCodec* TargetVideoCodec = avcodec_find_decoder(VCodecCtx->codec_id); > avcodec_open2(VCodecCtx, TargetVideoCodec, NULL); > AVFrame* TargetFrame = avcodec_alloc_frame(); > AVFrame* TargetFrameRGB = avcodec_alloc_frame(); > int FrameSizeInBytes = avpicture_get_size(PIX_FMT_RGB24, VCodecCtx->width, > VCodecCtx->height); > uint8_t* FrameBuffer = (uint8_t*) av_malloc(FrameSizeInBytes); > avpicture_fill((AVPicture*) TargetFrameRGB, FrameBuffer, PIX_FMT_RGB24, > VCodecCtx->width, VCodecCtx->height); > struct SwsContext* ScaleCtx = sws_getContext(VCodecCtx->width, > VCodecCtx->height, VCodecCtx->pix_fmt, VCodecCtx->width, VCodecCtx->height, > PIX_FMT_RGB24, SWS_BICUBIC, NULL, NULL, NULL); > > And here are the functions I call to release all the previous structures : > > sws_freeContext(ScaleCtx); > avpicture_free((AVPicture*)TargetFrameRGB); > av_free(FrameBuffer); > avcodec_free_frame(&TargetFrame); > avcodec_free_frame(&TargetFrameRGB); > avcodec_close(VCodecCtx); > avformat_close_input(&Ctx); This all looks very wrong. I'd just stick to the AVFrame API, and not touch AVPicture. In some cases, you cast AVFrame to AVPicture, which only works by coincidence. (I'm not sure if it's possibly supposed to work - as far as I'm concerned AVPicture is ridiculous. You can get everything done without using AVPicture at all.) See libavutil/frame.h. _______________________________________________ Libav-user mailing list [email protected] http://ffmpeg.org/mailman/listinfo/libav-user
