Good evening Gilles, > I make a > > struct BuffVideo *buf= malloc( sizeof (BuffVideo)) ; > buf->pFrame=avcodec_alloc_frame(); > buf->id=i++;
This is ok but not complete. You have to do a little bit more. So like here: int size = avpicture_get_size(c->pix_fmt, c->width, c->height); // c is a AVCodecContext uint8_t* picture_buf = av_malloc(size); avpicture_fill((AVPicture *)buf->pFrame, picture_buf, c->pix_fmt, c->width, c->height); > avcodec_decode_video2(pCodecCtx, buf->pFrame, &frameFinished, &packet); And this is OK to, BUT! don't use buf->pFrame! Use a new (temporary) AVFrame. For instance make AVFrame* temp = avcodec_alloc_frame(); avcodec_decode_video2(pCodecCtx, temp, &frameFinished, &packet); and when frameFinished is true make a real copy! So like this: av_picture_copy((AVPicture*)buf->pFrame, (AVPicture*)temp, c->pix_fmt, c->width, c->height); > > but when all is done and when I want to swscale all my frame in list, all > the frame are empty unless the last one with the last value of frame > decoded. Try it out. It should work. > > I suppose the AVFrame keep only pointer to uint[4] ... > > Idea ? I hope it work. regards, Sven > > Gilles M > _______________________________________________ > libav-user mailing list > [email protected] > https://lists.mplayerhq.hu/mailman/listinfo/libav-user _______________________________________________ libav-user mailing list [email protected] https://lists.mplayerhq.hu/mailman/listinfo/libav-user
