美文网首页
ijk硬编码队列

ijk硬编码队列

作者: 一川烟草i蓑衣 | 来源:发表于2019-05-30 19:41 被阅读0次

    typedef struct sort_queue {

        AVFrame pic; //解码后一帧

        int serial;

        int64_t sort; //如果有pts则为pts,否则为dts

        volatile struct sort_queue * nextframe; //下一帧

    } sort_queue; //解码队列,排在前面的先出,根据pts排序

     volatile sort_queue      *m_sort_queue; //记录对头

    volatile int32_t  m_queue_depth; //队列深度

    static void SortQueuePush(Ijk_VideoToolBox_Opaque * ctx, sort_queue * newFrame) //插入一帧

    {

        pthread_mutex_lock(&ctx->m_queue_mutex);

        volatile sort_queue*queueWalker = ctx->m_sort_queue;

        if(!queueWalker || (newFrame->sort< queueWalker->sort)) { //这种情况下将newFrame直接插入首端

            newFrame->nextframe= queueWalker;

            ctx->m_sort_queue= newFrame;

        }else{ //这种情况下根据sort即pts插入到合适位置

            bool frameInserted =false;

            volatile sort_queue*nextFrame =NULL;

            while(!frameInserted) {

                nextFrame = queueWalker->nextframe;

                if(!nextFrame || (newFrame->sort< nextFrame->sort)) {

                    newFrame->nextframe= nextFrame;

                    queueWalker->nextframe= newFrame;

                    frameInserted =true;

                }

                queueWalker = nextFrame;

            }

        }

        ctx->m_queue_depth++;

        pthread_mutex_unlock(&ctx->m_queue_mutex);

    }

    static void SortQueuePop(Ijk_VideoToolBox_Opaque* context) //删除一帧

    {

        if(!context->m_sort_queue|| context->m_queue_depth==0) {

            return;

        }

        pthread_mutex_lock(&context->m_queue_mutex);

        volatile sort_queue*top_frame = context->m_sort_queue;

        context->m_sort_queue = context->m_sort_queue->nextframe;

        context->m_queue_depth--;

        pthread_mutex_unlock(&context->m_queue_mutex);

        CVBufferRelease(top_frame->pic.opaque);

        free((void*)top_frame);

    }

    相关文章

      网友评论

          本文标题:ijk硬编码队列

          本文链接:https://www.haomeiwen.com/subject/lklbtctx.html