码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Python&C++相互混合调用编程全面实战-26完成扩展库PyFFmpeg对象创建、初始化和析构


    作者:虚坏叔叔
    博客:https://xuhss.com

    早餐店不会开到晚上,想吃的人早就来了!😄

    完成扩展库PyFFmpeg对象创建、初始化和析构

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JjausvVg-1656452451318)(C:\Users\Administrator\Desktop\1.png)]

    一、头文件实现

    添加头文件PyFFmpeg.h

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P66KmiGF-1656452451319)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220629052949521.png)]

    #pragma once
    #include<Python.h>
    class PyFFmpeg
    {
    public:
    	PyObject_HEAD
    
    //开放给python的函数
    public:
    	static PyObject *Create(PyTypeObject *type, PyObject *args, PyObject *kw);
    	static int Init(PyFFmpeg*self, PyObject *args, PyObject *kw);
    	static void Close(PyFFmpeg*self);
    
    };
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    二、源文件实现

    源文件PyFFmpeg.cpp如下

    #include "PyFFmpeg.h"
    // 开放给python
    PyObject *PyFFmpeg::Create(PyTypeObject *type, PyObject *args, PyObject *kw) {
    	printf("PyFFmpeg::Create\n");
    	return type->tp_alloc(type, 0);
    }
    
    int PyFFmpeg::Init(PyFFmpeg*self, PyObject *args, PyObject *kw)
    {
    	printf("PyFFmpeg::Init\n");
    	return 0;
    }
    void PyFFmpeg::Close(PyFFmpeg*self)
    {
    	printf("PyFFmpeg::Close\n");
    	Py_TYPE(self)->tp_free(self);
    }
    
    // 模块入口 模块名称 pyffmpeg
    PyMODINIT_FUNC PyInit_pyffmpeg(void)
    {
    	PyObject *m = NULL;
    	static PyModuleDef ffmod = {
    		PyModuleDef_HEAD_INIT,
    		"pyffmpeg",
    		"", -1, 0
    	};
    	m = PyModule_Create(&ffmod);
    
    	// 添加PyFFmpeg_python类
    	static PyTypeObject type;
    	memset(&type, 0, sizeof(PyFFmpeg));
    	type.ob_base = { PyObject_HEAD_INIT(NULL) 0 };
    	type.tp_name = "";
    	type.tp_basicsize = sizeof(PyFFmpeg);
    	type.tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE;
    	type.tp_new = PyFFmpeg::Create;
    	type.tp_init = (initproc)PyFFmpeg::Init;
    	type.tp_dealloc = (destructor)PyFFmpeg::Close;
    
    	// 初始化类型
    	if (PyType_Ready(&type) < 0) {
    		return NULL;
    	}
    
    	PyModule_AddObject(m, "PyFFmpeg", (PyObject*)&type);  
    
    	printf("Pyinit_pyffmpeg\n");
    	return m;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50

    三、python调用运行扩展库

    编译通过,然后在testmod.py中引用:

    # import pyffmpeg
    from pyffmpeg import *
    ff = PyFFmpeg()
    del ff
    input()
    
    • 1
    • 2
    • 3
    • 4
    • 5

    运行 visual studio 程序:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N0lpp3b5-1656452451321)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220629053037576.png)]

    可以看到创建成功并且空间也已经分配,模块的构造函数别调用,冰鞋析构时内存也得到了释放。

    四、总结

    • 本文完成了扩展库PyFFmpeg对象创建、初始化和析构 。
    • 下节课会讲解QT源码方面的知识
    • 如果觉得文章对你有用处,记得 点赞 收藏 转发 一波哦,博主也支持为铁粉丝制作专属动态壁纸哦~

    💬 往期优质文章分享

    • C++ QT结合FFmpeg实战开发视频播放器-01环境的安装和项目部署
    • 解决QT问题:运行qmake:Project ERROR: Cannot run compiler ‘cl‘. Output:
    • 解决安装QT后MSVC2015 64bit配置无编译器和调试器问题
    • Qt中的套件提示no complier set in kit和no debugger,出现黄色感叹号问题解决(MSVC2017)
    • Python+selenium 自动化 - 实现自动导入、上传外部文件(不弹出windows窗口)

    🚀 优质教程分享 🚀

    • 🎄如果感觉文章看完了不过瘾,可以来我的其他 专栏 看一下哦~
    • 🎄比如以下几个专栏:Python实战微信订餐小程序、Python量化交易实战、C++ QT实战类项目 和 算法学习专栏
    • 🎄可以学习更多的关于C++/Python的相关内容哦!直接点击下面颜色字体就可以跳转啦!
    学习路线指引(点击解锁)知识定位人群定位
    🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。
    💛Python量化交易实战 💛入门级手把手带你打造一个易扩展、更安全、效率更高的量化交易系统
    ❤️ C++ QT结合FFmpeg实战开发视频播放器❤️难度偏高分享学习QT成品的视频播放器源码,需要有扎实的C++知识!
    💚 游戏爱好者九万人社区💚互助/吹水九万人游戏爱好者社区,聊天互助,白嫖奖品
    💙 Python零基础到入门 💙Python初学者针对没有经过系统学习的小伙伴,核心目的就是让我们能够快速学习Python的知识以达到入门

    🚀 资料白嫖,温馨提示 🚀

    关注下面卡片即刻获取更多编程知识,包括各种语言学习资料,上千套PPT模板和各种游戏源码素材等等资料。更多内容可自行查看哦!

    请添加图片描述

  • 相关阅读:
    【Rust日报】2022-09-19 测量 CPU 不同核心之间的延迟
    【QT】布局管理器及常用控件
    Spring MVC使用JSON的过程与步骤
    Android案例手册 - 实现一个华容道拼图游戏
    行业落地呈现新进展 | 2022开放原子全球开源峰会OpenAtom OpenHarmony分论坛圆满召开
    创建对象内存分析
    webpack 使用与配置
    单元测试:会变化的定义
    Py之tkinter:tkinter库的简介、安装、使用方法之详细攻略
    【计算机毕设之基于Java的用户行为分析图书销售智能推荐系统-哔哩哔哩】 https://b23.tv/OVxIJs6
  • 原文地址:https://blog.csdn.net/huangbangqing12/article/details/125513020
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号