On 15.2.2011 16:19, Leandro Santiago wrote:
Thx for your answer.

Do you have any examples? Where need I use this callback? When I open
the video? Which parameters are necessary to this function? I couldn't
find much information searching on web.

Hello,

here is my code with the callback function to realize a timeout on av_read_frame. It is written in C++ with Visual Studio in Windows, but with a little change also usable in other systems.

First you have to initialize the call back function in libav. At this time libav call this function in blocking functions (av_read_frame)

url_set_interrupt_cb(decode_interrupt_cb);

 The implementation of this function looks like that:

LONGLONG timeout; //für decode_interuppt_cb
static int decode_interrupt_cb(void)
{
    LARGE_INTEGER ptime;
    QueryPerformanceCounter(&ptime);
    if (ptime.QuadPart > timeout)  //timeout arrived?
        return 1;
    //return 0 for no timeout
    return 0;
}

In the program every time i call a blocking function of libav I set a new timeout (ptime):

QueryPerformanceCounter(&ptime);
timeout = ptime.QuadPart + pfreq.QuadPart *5; //Timeout
res = av_read_frame(decforctx,&re_pkt);

The QueryperformanceCounter is a 64 bit value of windows. The frequnecy depends on the architecture of the pc, but is constant. I use it as a relative time to define the timeout. The Callback function check the time and decide to skip the function of libav.

I hope the code helps you.

Steffen
_______________________________________________
libav-user mailing list
[email protected]
https://lists.mplayerhq.hu/mailman/listinfo/libav-user

Reply via email to