Tag: api

如何使用FFmpeg C API剪切video

如何使用FFmpeg C API剪切video? 例如从00:10:00到00:20:00。 我需要使用哪些function? 我使用此function转换video: int convert(char *file) { AVFrame *frame; AVPacket inPacket, outPacket; if(avio_open(&outFormatContext->pb, file, AVIO_FLAG_WRITE) = 0) { if(inPacket.stream_index == inVideoStreamIndex) { avcodec_decode_video2(inCodecContext, frame, &frameFinished, &inPacket); if(frameFinished) { av_init_packet(&outPacket); avcodec_encode_video2(outCodecContext, &outPacket, frame, &outputed); if(outputed) { if (av_write_frame(outFormatContext, &outPacket) != 0) { fprintf(stderr, “convert(): error while writing video frame\n”); return 0; } } […]

如何使用C API为MySQL查询设置超时

我知道这里有很多类似的问题,当我谷歌它时,也有很多结果,但它们都没有回答我的问题。 我读了这个 , 这个 , 这个和这个,但它们都不适合我。 我不谈任何锁,我不想使用MySQL c ++连接器,只是C API。 另外,这里非常重要:我在LINUX上这样做。 我为什么提这个? 因为在mysql_options的文档中: MYSQL_OPT_READ_TIMEOUT – …此选项仅适用于 TCP / IP连接,在MySQL 5.0.25之前,仅适用于Windows。 MYSQL_OPT_WRITE_TIMEOUT- …此选项仅适用于 TCP / IP连接,在MySQL 5.0.25之前,仅适用于Windows 那么,有没有办法为5.0.25之前的版本设置查询超时? 我的MySQL版本: [root @ xxx kiril] #mysql –version mysql Ver 14.12 Distrib 5.0.22,对于使用readline 5.0的redhat-linux-gnu(i686) 编辑:至少,有没有办法取消查询? 我可以启动一个计时器作为不同的线程,但当它到期..我可以以某种方式取消查询?

如何在C API中生成ipairs(而不是成对)行为

在Lua中, pairs和ipairs可以以不同的顺序迭代相同的元素: > t = {[1]=1, [2]=2, [3]=3} > for k,v in pairs(t) do print(k,v) end 2 2 1 1 3 3 > for k,v in ipairs(t) do print(k,v) end 1 1 2 2 3 3 当使用C API时,我只看到一个用于迭代表的工具: lua_next()函数,它的行为非常像pairs() Lua函数,它产生上面显示的2-1-3顺序。 我正在寻找一种有效的C方法,用于顺序迭代表的整数键(ipairs的C API版本)。 天真地,我考虑过: int tableLength = luaL_len(L, tableIndex); for (i=0, i++, i>tableLength){ // if t[i] […]

Numpy C API:链接多个目标文件

我正在使用numpy的C API来编写一些用于矩阵计算的函数。 今天我想将我的函数的某些部分移动到一个单独的.c文件中,并使用标头来声明它们。 现在我有一个与numpy的import_array函数有关的奇怪问题。 我试图尽可能地简化问题。 起初有工作计划: mytest.c #include “mytest.h” PyObject* my_sub_function() { npy_intp dims[2] = {2, 2}; double data[] = {0.1, 0.2, 0.3, 0.4}; PyArrayObject* matrix = (PyArrayObject*)PyArray_SimpleNew(2, dims, NPY_FLOAT64); memcpy(PyArray_DATA(matrix), data, sizeof(double) * dims[0] * dims[1]); return (PyObject*)matrix; } static PyObject* my_test_function(PyObject* self, PyObject* args) { return my_sub_function(); } static PyMethodDef methods[] = { […]

C接口中句柄的正确类型

我正在创建一个隐藏DLL文件中的某些function的C api。 由于内部的所有内容都是C ++,因此大多数函数都可以处理直接映射到API内部的指针的句柄。 为了获得这些句柄的某种程度的类型安全性,我将它们定义为: typedef struct MyType1* MyType1Handle; typedef struct MyType2* MyType2Handle; 我实际上并没有在任何地方定义MyType1或MyType2,因为我只将它们用作指针,并在api内部对实际指针类型进行类型转换。 我的问题是,当我在Visual Studio的clr项目中使用我的库时,我得到了这个warning: unresolved typeref token (token) for ‘type’; image may not run. warning: unresolved typeref token (token) for ‘type’; image may not run. http://msdn.microsoft.com/en-us/library/h8027ys9(VS.80).aspx 它起作用并没什么大不了的,但它看起来不专业。 我不喜欢使用void *: typedef void* MyType1Handle; typedef void* MyType2Handle; 这使得可以调用想要MyType1Handle和MyType2Handle的函数,因为它们实际上是相同的类型。 我不想使用的另一种方法是这样的 typedef int MyType1Handle; typedef int MyType2Handle; […]

仅公开所需信息,不包括不必要的头文件

我想要一个进程来公开消息的结构,因此它可以被接收它的其他进程使用。 但是,此结构包括在其他头文件中定义的参数类型,这些头文件本身包含一堆其他头文件。 typedef struct sfp_info_s { int port; char platform_id[50]; sff_eeprom_t sff_type; char status_str[50]; sff_dom_t sff_dom; }sfp_info_t; sff_eeprom_t在名为:sff_db.h的头文件中定义,该文件本身包含其他文件: #ifndef __SFF_SFF_H__ #define __SFF_SFF_H__ #include #include #include 创建此API的最佳方法是什么,而不是在所有需要只知道消息结构的进程中包含所有这些文件?

为什么`execvp`采用`char * const argv `?

我想知道两个exec函数之间是否存在const -ness不同的原因,如果这只是Single Unix Spec中的一个错误: 摘自Linux手册页,它似乎与Single Unix Specification一致 ,这里有两个版本的exec : int execlp(const char * file , const char * arg , …); int execvp(const char * file , char *const argv []); execlp将其参数作为const char * ,它需要两个或多个。 C中的const是一个承诺,函数不会改变指向的数据,在这种情况下是构成字符串的实际字符( char )。 execvp将其参数作为指针数组。 然而,正如你所期望的那样,不是指向const char *的指针数组,而是const关键字位于不同的位置 – 这对C. execvp非常重要,它说它可能会很好地修改字符串中的字符,但是它承诺不修改数组 – 即指向字符串的指针。 所以,换句话说, int fake_execvp(const char *file, char *const argv[]) […]

如何修改通过值传递的原始变量的内容?

有一个现有的API函数,只允许插件(DLL)接收三个参数并执行一些操作: int ProcessMe(int nCommand, unsigned int wParam, long lParam); 现在,从主程序(exe),想将两个变量传递给插件,并要求插件修改其内容,主程序将再次读取它们,执行一些任务。 我的问题是,从上面的函数,我可以执行此操作,而无需更改函数参数吗? 例: int ProcessMe(int nCommand, unsigned int wParam, long lParam) { // modify the parameters// return 0; } int main() { BOOL bSave = TRUE; int nOption = 0; ProcessMe(0, (unsigned int)(&bSave), (long)(&nOption)); if(FALSE==bSave) printf(“bSave is modified!”); return 1; }

设置静态文本颜色Win32

我正在制作一个控制对话框的dll。 我喜欢让某个区域有红色文字。 这段代码确实编译,但没有看到效果。 这是dialogProc完成的区域: LRESULT CALLBACK DialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { case WM_INITDIALOG: CheckDlgButton(hDlg, IDC_CHECK, FALSE); EnableWindow(GetDlgItem(hDlg, IDOK), FALSE); return TRUE; case WM_COMMAND: switch (LOWORD(wParam)) { case IDC_CHECK: if (IsDlgButtonChecked(hDlg, IDC_CHECK)) { EnableWindow(GetDlgItem(hDlg, IDOK), TRUE); EnableWindow(GetDlgItem(hDlg, IDCANCEL), FALSE); } else { EnableWindow(GetDlgItem(hDlg, IDOK), FALSE); EnableWindow(GetDlgItem(hDlg, IDCANCEL), TRUE); } break; […]

(Windows)在C中监视API调用

无论如何在C中监视系统上的API调用?