- 博客(48)
- 资源 (3)
- 收藏
- 关注
原创 gst_pad_query_default以及gst_pad_event_default
1、GST_QUERY_SCHEDULING,条件forward = GST_PAD_IS_PROXY_SCHEDULING (pad);也就是获取当前pad的内部linked的pad,这里可以看到是调用pad的GST_PAD_ITERINTLINKFUNC。2、GST_QUERY_ALLOCATION,条件GST_PAD_IS_PROXY_ALLOCATION (pad);那么内部流动就会出现问题了?那我们再看下默认函数gst_pad_iterate_internal_links_default。
2025-05-30 11:06:25
233
原创 gstreamer之gst_element_add_pad/gst_element_remove_pad
(1)会被保存在element->srcpads 或者element->sinkpads (2)会去check for active pads,也就是如果pad是非active,但是当前elemnt是如下state,则需要激活pad。
2025-04-03 10:53:04
203
原创 gstreamer之playbin切流(音轨、视频轨、字幕轨)剖析
(channels = group->audio_channels)),重点变量,channels是一个数组,存储的是inputselector的sinkpad。group->combiner[PLAYBIN_STREAM_AUDIO].has_active_pad),combiner(也就是inputselector)是有“active-pad”。(5)if ((combiner = gst_pad_get_parent (sinkpad))),通过sinkpad获取inpuselector元素实例。
2025-03-31 09:51:02
593
原创 AV1 Codec ISO Media File Format Binding 规范,定义了如何在基于 ISO BMFF(ISO Base Media File Format) 的容器(如 MP4)
网站:wAV1 Codec ISO Media File Format Binding
2025-03-24 19:32:54
112
原创 gstreamer之GstBaseSink源码剖析
如果是PULL模式,gst_base_sink_pad_activate_pull中调用gst_base_sink_default_activate_pull启动gst_base_sink_loop线程循环处理数据。(2)gst_base_sink_do_preroll ,如果需要need_preroll,怎会调用preroll处理数据。5.qos处理gst_base_sink_perform_qos (qos_enabled 开关)补充说明:gst_base_sink_default_event。
2025-03-19 15:53:55
829
原创 gstreamer之GstTask源码剖析
通过@gst_task_new创建任务,会在独立线程循环调用@GstTaskFunction,实现数据处理。 通过gst_task_start/gst_task_pause/gst_task_stop/gst_task_set_state等方法管控任务task。其中gst_task_set_state->gst_task_set_state_unlocked,然后会调用start_task启动任务。如下代码也就是在线程池中执行 gst_task_func函数。也就是gsttask机制
2025-03-19 14:09:55
262
原创 gstreamer之GstVideoDecoder源码剖析
gst_video_decoder_have_frame,其中关键流程会调用gst_video_decoder_decode_frame继而调用到decoder_class->handle_frame,完成解码。set_format调用在gst_video_decoder_sink_event_default->gst_video_decoder_setcaps。其中gst_video_decoder_add_to_frame会将数据push到priv->output_adapter中。
2025-03-17 19:26:48
862
原创 gstreamer之typefind源码剖析
a)关键流程gst_type_find_get_extension,获取uri后缀结尾,如.mp3,然后调用gst_type_find_helper_get_range_full去识别数据格式found_caps。一样流程gst_type_find_get_extension->gst_type_find_helper_for_data_with_extension识别到caps,然后切换到MODE_NORMAL阶段。三者没有本质区别,最终都是通过gst_type_find_register注册。
2025-03-07 11:50:52
599
原创 Source插件之GstBaseSrc/GstPushSrc源码剖析
然后调用gst_pad_activate_mode(srcpad),然后调用GST_PAD_ACTIVATEMODEFUNC(GST_PAD_ACTIVATEMODEFUNC),也就调用到了basesrc中。init中我们看到注册了gst_pad_set_activatemode_function (pad, gst_base_src_activate_mode)函数。其实是必须要调用gst_base_src_start,但是首先可以看到查询函数gst_base_src_default_query。
2025-03-05 17:33:36
815
原创 gstreamer之gst_pad_link/gst_element_link源码剖析
(1)如果GST_PAD_PEER (srcpad)/GST_PAD_PEER (sinkpad)已经存在了,则GST_PAD_LINK_WAS_LINKED,说明pad already linked.a)GST_PAD_LINK_CHECK_CAPS是默认值,通过gst_pad_query_caps查询srcpad和sinkpad的caps。(2)prepare pad link实现函数gst_pad_link_prepare。相关的回调函数类型。2.函数gst_pad_link_prepare。
2025-03-03 14:17:23
868
原创 playbin之Source插件加载流程源码剖析
(6)那我们继续看下gst_element_make_from_uri中的关键步骤 possibilities = get_element_factories_from_uri_protocol (type, protocol)->gst_registry_feature_filter。(2)possibilities = get_element_factories_from_uri_protocol (type, protocol),从注册表中搜索可匹配上的source的lists。
2025-03-03 11:01:28
430
原创 playbin之autoplug_factories源码剖析
也就是同过gst_element_factory_list_get_elements从registry中获取type是GST_ELEMENT_FACTORY_TYPE_DECODABLE,GST_ELEMENT_FACTORY_TYPE_AUDIOVIDEO_SINKS,优先级高于GST_RANK_MARGINAL的factory。1.gst_play_bin_update_elements_list函数,创建可用的factories列表playbin->elements(
2025-02-28 17:43:55
514
原创 gstreamer插件注册流程剖析
这里会创建plugin对象,然后调用gst_plugin_register_func,从而调用到plugin_init,也就是插件中实现的plugin_init,从而调用到GST_ELEMENT_REGISTER。宏GST_PLUGIN_DEFINE定义了两个函数,解析出来如下,这个函数会在gst_init流程中执行,然后注册对应的插件,后面详细解析该流程。看下gst_registry_get就获取一个静态全局变量_gst_registry_default,用来保存插件的注册信息。
2025-02-25 21:27:28
860
原创 安卓native层抓trace
方法可以参考(simpleperf record -t $PID --duration 30 -o /data/perf.data --call-graph dwarf)(注意浏览器,可用 Microsoft Edge版本 131.0.2903.99 (正式版本) (64 位))#define ATRACE_TAG ATRACE_TAG_ALWAYS //要指定tag。
2024-12-21 17:03:14
345
原创 pthread在自己创建的线程中执行pthread_jion并不会死锁
函数pthread_join()函数挂起调用线程的执行,直到目标线程之三结束为止,除非目标线程已经终止。实际上这种情况他会直接返回并不会一直阻塞!!!
2024-06-15 11:19:45
305
原创 playbin获取节目duration流程分析
playsink没有实现duration的查询,但是其内部的sink,如audiosink继承了gstbasesink。第二种直接使用gst_pad_peer_query查询。b)迭代器获取srcpad。第一种适用于pull模式。a)迭代器获取sink。继续分析下上面的细节。
2024-03-26 21:06:26
332
原创 如何判断对象指针已经释放-指针的引用
1)指针的引用作为函数参数,当实参指针被设置NULL,函数内部可以使用NULL来判断。1)将一个指针赋值给另一个指针,也就是智能指针作为函数参数时候,引用计数会增加。当调用shared_ptr.reset()时候,并不会导致形参被设置NULL。1.使用智能指针shared_ptr。
2024-03-26 20:17:18
482
原创 tunnel模式audiotrack每笔数据需要送入同步头
这个header包含一个起始码,pts(nano sec),和数据的size。再写入audio数据前先写入这个header data。需要在音频写入audiotrack的时候在头部插入一个16 byte的avsync header。
2024-02-27 18:05:54
384
原创 libtool使用-Wl,-Bstatic失败
如上代码通过修改-Wl,-Bstatic -ljpeg实现静态依赖libjpeg,但是编译之后仍然是依赖动态库libjpeg.so,打印命令也是正常的。-Wl,-Bstatic -ljpeg为一个指令,也是就没有将-ljpeg是为Wl后面的参数,导致问题。libtool: link:的可以看到。-Bstatic,ljpeg 或者。发现问题了,link没有正常识别。对Wl的使用不太规范。
2023-10-16 12:36:41
255
1
原创 安卓通过Parcel传递Surface到native层(Mediaplayer.java)
因为parcel中默认添加了一个name字段,因为这里是第一次读取这个parcel,设置false后是surfaceShim.readFromParcel会去取这个name字段,不影响后读取surface字段。可以获取到graphicBufferProducer 了。使用MediaPlayer中的。备注:这里要设置false。
2023-09-19 17:45:21
217
原创 This version of the Android Support plugin for IntelliJ IDEA (or Android Studio) cannot open 问题
android.injected.studio.version.check=false”这行代码加进去,修改“gradle.properties”文件。
2023-09-07 20:03:34
170
1
原创 安卓预置apk/so权限
权限添加:/system/etc/permissions/privapp-permissions-platform.xml。权限添加:/vendor/etc/permissions $ privapp-permissions-vendor.xml。so白名单:/system/etc # public.libraries.txt。预置:/system $ priv-app。预置:/vendor $ priv-app。
2023-06-27 11:16:28
371
1
原创 把gstreamer插件androidmedia的3个java编译成jar
【代码】把gstreamer插件androidmedia的3个java编译成jar。
2023-06-26 21:04:53
197
1
原创 gradlew makejar报错Android Gradle plugin requires Java 11 to run
错误:修改方法:修改后,仍报错修改后,仍报错3、项目根目录下:文件(gradle.properties)添加代码:修改后可以。
2023-06-25 11:42:56
390
原创 安卓高版本c/c++调用java,通过JNI_CreateJavaVM/JNI_GetCreatedJavaVMs创建虚拟机实例
c/c++调用java;JNI_CreateJavaVM/JNI_GetCreatedJavaVMs创建虚拟机实例;libnativehelper;JNI_CreateJavaVM运行挂载libart
2023-06-21 10:09:30
2044
2
原创 ld链接器基本命令
通过-Wl,--exclude-libs,libssl.a -Wl,--exclude-libs,libcrypto.a 设置链接器命令
2023-06-14 10:54:07
800
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人