Il 16/02/2011 20:31, Max The Quantum ha scritto:
avcodec_alloc_frame() allocates memory for AVFrame structure, but not
it's data buffer.
by data buffer I mean AVFrame::data[4].
if you do not explicitly allocate memory for it's buffer but program
works ok, it means that
1) you don't use data field of your AVFrame anywhere :)
2) buffer is allocated by one of ffmpeg functions (for example
avcodec_decode_video() does this )
p.s av_picture_fill() doesn't allocates memory. it only sets correct
linesize values and points data[] to the buffer that you specified
2011/2/16 Lorenzo Mattiussi<lorenzo.mattiuss...@gmail.com>:
Il 16/02/2011 16:48, Gilles Maire ha scritto:
av_picturefill fill a Picture not a Frame. Picture and Frame start with
the
same informations. If you fill frame you will have missed
informations.....
2011/2/16 Lorenzo Mattiussi<lorenzo.mattiuss...@gmail.com>
Il 16/02/2011 14:14, Gilles Maire ha scritto:
Hi Lorenzo
Perhaps you forget to make a
int size = avpicture_get_size(avctx->fmt, avctx->width, avctx->height);
tempFrame = av_malloc(size*sizeof(uint8_t));
before your
avpicture_fill ((AVPicture *)tempFrame,(uint8_t
*)img.data,PIX_FMT_BGR24,img.width,img.height)
After don't forget to free the tempFrame.
Cheers
Gilles Maire
2011/2/16 Lorenzo Mattiussi<lorenzo.mattiuss...@gmail.com>
hi all,
I've a problem, when the program execute avpicture_fill, I find this
message error:
Unhandled exception at 0x632415fe in EraEndo.exe:0xC0000005: Access
violation writing location 0xcdcdcddd.
Someone can help me?!?
This is the code:
int videoCode::comprimi(const ImageData&img,AVPacket&pack)//PAck deve
giĆ
essere stato inizializzato
{
uint8_t *tempFramebuf;
int sizebuf;
int x;
frameMutex->lock();
//riempo un immagine temporanea con i dati provenienti dalla webcam
x = avpicture_fill ((AVPicture *)tempFrame,(uint8_t
*)img.data,PIX_FMT_BGR24,img.width,img.height)
...
where imageData is this structure:
struct ImageData
{
// In DirectShow standard RGB formats
// have an inverted memory layout
enum Format {BGR24, BGR32};
Format format;
unsigned char* data;
long dataSize;
int width;
int height;
};
_______________________________________________
libav-user mailing list
libav-user@mplayerhq.hu
https://lists.mplayerhq.hu/mailman/listinfo/libav-user
_______________________________________________
libav-user mailing list
libav-user@mplayerhq.hu
https://lists.mplayerhq.hu/mailman/listinfo/libav-user
Tnx for your replay
In a early function that initialize all FFmpeg parameter, I initialize
tempFrame with this methods:
tempFrame = avcodec_alloc_frame();
I can't make:
int size = avpicture_get_size(avctx->fmt, avctx->width, avctx->height);
tempFrame = av_malloc(size*sizeof(uint8_t));
because the compiler say " Impossible conversion from 'void *' to
'AVFrame
*' " at av_malloc function
_______________________________________________
libav-user mailing list
libav-user@mplayerhq.hu
https://lists.mplayerhq.hu/mailman/listinfo/libav-user
_______________________________________________
libav-user mailing list
libav-user@mplayerhq.hu
https://lists.mplayerhq.hu/mailman/listinfo/libav-user
Thanks for all replay
I've found my error. The error was in another function that initialize all
ffmpeg structures.
I've a question about this:
In all my code I never make tempFrame = (AVFrame
*)av_malloc(size*sizeof(uint8_t));
but it seems runnig correctly..
Isn't Inside the avcodec_alloc_frame() something that allocate memory for
the frame??!?!
_______________________________________________
libav-user mailing list
libav-user@mplayerhq.hu
https://lists.mplayerhq.hu/mailman/listinfo/libav-user
_______________________________________________
libav-user mailing list
libav-user@mplayerhq.hu
https://lists.mplayerhq.hu/mailman/listinfo/libav-user
Tnx for your replay,
I think my buffer allocation is realised with avcodec_decode_video() e
avcodec_encode_video() functions
<javascript:void(0);>
_______________________________________________
libav-user mailing list
libav-user@mplayerhq.hu
https://lists.mplayerhq.hu/mailman/listinfo/libav-user