Esempio n. 1
0
int getFrameAt(int64_t timeUs, int width, int height)
{
    int ret = -1;
    AVFrame* pFrame = NULL;

    ret = avformat_seek_file(m_pFormatContext, -1, INT16_MIN, timeUs, INT16_MAX, 0);

    pFrame = av_frame_alloc();
    m_pThumbFrame = av_frame_alloc();
    ret = openDecoder();
    if (ret != 0)
    {
        av_frame_free(&pFrame);
        av_frame_free(&m_pThumbFrame);
        return ret;
    }
#ifdef DEBUG_SPEND_TIME
#ifdef _WIN32
    DWORD start_time = timeGetTime();
#else
    struct timeval start, end;
    gettimeofday(&start, NULL);
#endif
#endif

    ret = decodeOneFrame(pFrame);
    if (ret < 0)
    {
        av_frame_free(&pFrame);
        av_frame_free(&m_pThumbFrame);
        return ret;
    }
#ifdef DEBUG_SPEND_TIME
#ifdef _WIN32
    DWORD end_time = timeGetTime();
    printf("decodeOneFrame spend time = %d ms\n", end_time - start_time);
#else
    gettimeofday(&end, NULL);
    int spend_time = (end.tv_sec - start.tv_sec) * 1000 + (end.tv_usec - start.tv_usec) / 1000;
    printf("spend_time = %d ms\n", spend_time);
#endif
#endif

    ret = getThumbnail(pFrame, m_pThumbFrame, width, height);
    if (ret < 0)
    {
        av_frame_free(&pFrame);
        av_frame_free(&m_pThumbFrame);
        return ret;
    }

    // save the rgb565
    FILE *pFile = fopen(strThumbFileName, "ab");
    if (pFile)
    {
        fwrite(m_pThumbFrame->data[0], 1, m_pThumbFrame->width * m_pThumbFrame->height * 2, pFile);
        fclose(pFile);
    }

    av_frame_free(&pFrame);
    av_frame_free(&m_pThumbFrame);

    closeDecoder();

    return ret;
}
Esempio n. 2
0
bool SoundSourceM4A::reopenDecoder() {
    closeDecoder();
    return openDecoder();
}
Esempio n. 3
0
CFfmpegDecode::~CFfmpegDecode()
{
    closeDecoder();
    av_lockmgr_register(NULL);
}