static int dshow_read_packet(AVFormatContext *s, AVPacket *pkt)

{

    struct dshow_ctx *ctx = s->priv_data;

    AVPacketList *pktl = NULL;



    while (!ctx->eof && !pktl) {

        WaitForSingleObject(ctx->mutex, INFINITE);

        pktl = ctx->pktl;

        if (pktl) {

            *pkt = pktl->pkt;

            ctx->pktl = ctx->pktl->next;

            av_free(pktl);

            ctx->curbufsize -= pkt->size;

        }

        ResetEvent(ctx->event[1]);

        ReleaseMutex(ctx->mutex);

        if (!pktl) {

            if (dshow_check_event_queue(ctx->media_event) < 0) {

                ctx->eof = 1;

            } else if (s->flags & AVFMT_FLAG_NONBLOCK) {

                return AVERROR(EAGAIN);

            } else {

                WaitForMultipleObjects(2, ctx->event, 0, INFINITE);

            }

        }

    }



    return ctx->eof ? AVERROR(EIO) : pkt->size;

}

static int dshow_read_packet(AVFormatContext *s, AVPacket *pkt)

{

    struct dshow_ctx *ctx = s->priv_data;

    AVPacketList *pktl = NULL;



    while (!ctx->eof && !pktl) {

        WaitForSingleObject(ctx->mutex, INFINITE);

        pktl = ctx->pktl;

        if (pktl) {

            *pkt = pktl->pkt;

            ctx->pktl = ctx->pktl->next;

            av_free(pktl);

            ctx->curbufsize -= pkt->size;

        }

        ResetEvent(ctx->event[1]);

        ReleaseMutex(ctx->mutex);

        if (!pktl) {

            if (dshow_check_event_queue(ctx->media_event) < 0) {

                ctx->eof = 1;

            } else if (s->flags & AVFMT_FLAG_NONBLOCK) {

                return AVERROR(EAGAIN);

            } else {

                WaitForMultipleObjects(2, ctx->event, 0, INFINITE);

            }

        }

    }



    return ctx->eof ? AVERROR(EIO) : pkt->size;

}

            ctx->curbufsize -= pkt->size;
static int FUNC_0(AVFormatContext *VAR_0, AVPacket *VAR_1)

{

    struct dshow_ctx *VAR_2 = VAR_0->priv_data;

    AVPacketList *pktl = NULL;



    while (!VAR_2->eof && !pktl) {

        WaitForSingleObject(VAR_2->mutex, INFINITE);

        pktl = VAR_2->pktl;

        if (pktl) {

            *VAR_1 = pktl->VAR_1;

            VAR_2->pktl = VAR_2->pktl->next;

            av_free(pktl);

            VAR_2->curbufsize -= VAR_1->size;

        }

        ResetEvent(VAR_2->event[1]);

        ReleaseMutex(VAR_2->mutex);

        if (!pktl) {

            if (dshow_check_event_queue(VAR_2->media_event) < 0) {

                VAR_2->eof = 1;

            } else if (VAR_0->flags & AVFMT_FLAG_NONBLOCK) {

                return AVERROR(EAGAIN);

            } else {

                WaitForMultipleObjects(2, VAR_2->event, 0, INFINITE);

            }

        }

    }



    return VAR_2->eof ? AVERROR(EIO) : VAR_1->size;

}

static int FUNC_0(AVFormatContext *VAR_0, AVPacket *VAR_1)
{ struct dshow_ctx *VAR_2 = VAR_0->priv_data; AVPacketList *pktl = NULL; while (!VAR_2->eof && !pktl) { WaitForSingleObject(VAR_2->mutex, INFINITE); pktl = VAR_2->pktl; if (pktl) { *VAR_1 = pktl->VAR_1; VAR_2->pktl = VAR_2->pktl->next; av_free(pktl); VAR_2->curbufsize -= VAR_1->size; } ResetEvent(VAR_2->event[1]); ReleaseMutex(VAR_2->mutex); if (!pktl) { if (dshow_check_event_queue(VAR_2->media_event) < 0) { VAR_2->eof = 1; } else if (VAR_0->flags & AVFMT_FLAG_NONBLOCK) { return AVERROR(EAGAIN); } else { WaitForMultipleObjects(2, VAR_2->event, 0, INFINITE); } } } return VAR_2->eof ? AVERROR(EIO) : VAR_1->size; }