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

Reply via email to