5090
- 收藏
- 点赞
- 分享
- 举报
独立进程的数据流获取
使用sample_venc里面的代码写了一个程序A,程序A除了去除获取流写盘的线程代码外其他均和sample_venc一样
[code]
#if 0
s32Ret = SAMPLE_COMM_VENC_StartGetStream(s32ChnNum);
if (HI_SUCCESS != s32Ret)
{
SAMPLE_PRT("Start Venc failed!\n");
goto END_VENC_720P_CLASSIC_5;
#endif
}[/code]
然后移植Live555的代码,测试程序写在另外一个单独的程序B里面,使用的获取流的代码示例里面的
[code]SAMPLE_COMM_VENC_GetVencStreamProc(HI_VOID* p ) {
.....
/*******************************************************
step 2.3 : call mpi to get one-frame stream
*******************************************************/
stStream.u32PackCount = stStat.u32CurPacks;
s32Ret = HI_MPI_VENC_GetStream(i, &stStream, HI_TRUE);
if (HI_SUCCESS != s32Ret)
{
free(stStream.pstPack);
stStream.pstPack = NULL;
SAMPLE_PRT("HI_MPI_VENC_GetStream failed with %#x!\n", \
s32Ret);
break;
}
....
}
[/code]
但是测试到最后出现了问题,最总获VENC_PACK_S里面的地址是无效的地址:
u32PhyAddr[0]=0xc9875dc0, pu8Addr[0] = 0xc9875dc0, u32Len[0]=8597
一写文件就段错误。
[code]
typedef struct hiVENC_PACK_S
{
HI_U32 u32PhyAddr[2]; // 地址无效
HI_U8 *pu8Addr[2]; //地址无效
HI_U32 u32Len[2];
VENC_DATA_TYPE_U DataType;
HI_U64 u64PTS;
HI_BOOL bFieldEnd;
HI_BOOL bFrameEnd;
}VENC_PACK_S;
[/code]
分析了下原因,是因为进程B无法使用进程A申请的VB缓存地址,但是奇怪的是物理地址也无法访问(有了物理地址我们可以在本进程内做个映射就可以访问了)不知道海思内部怎么处理的。
现在问题是:
1.我如何才能在单独的进程中获取到流地址呢?(我们的Live555是单独的进程跑的)。
[code]
#if 0
s32Ret = SAMPLE_COMM_VENC_StartGetStream(s32ChnNum);
if (HI_SUCCESS != s32Ret)
{
SAMPLE_PRT("Start Venc failed!\n");
goto END_VENC_720P_CLASSIC_5;
#endif
}[/code]
然后移植Live555的代码,测试程序写在另外一个单独的程序B里面,使用的获取流的代码示例里面的
[code]SAMPLE_COMM_VENC_GetVencStreamProc(HI_VOID* p ) {
.....
/*******************************************************
step 2.3 : call mpi to get one-frame stream
*******************************************************/
stStream.u32PackCount = stStat.u32CurPacks;
s32Ret = HI_MPI_VENC_GetStream(i, &stStream, HI_TRUE);
if (HI_SUCCESS != s32Ret)
{
free(stStream.pstPack);
stStream.pstPack = NULL;
SAMPLE_PRT("HI_MPI_VENC_GetStream failed with %#x!\n", \
s32Ret);
break;
}
....
}
[/code]
但是测试到最后出现了问题,最总获VENC_PACK_S里面的地址是无效的地址:
u32PhyAddr[0]=0xc9875dc0, pu8Addr[0] = 0xc9875dc0, u32Len[0]=8597
一写文件就段错误。
[code]
typedef struct hiVENC_PACK_S
{
HI_U32 u32PhyAddr[2]; // 地址无效
HI_U8 *pu8Addr[2]; //地址无效
HI_U32 u32Len[2];
VENC_DATA_TYPE_U DataType;
HI_U64 u64PTS;
HI_BOOL bFieldEnd;
HI_BOOL bFrameEnd;
}VENC_PACK_S;
[/code]
分析了下原因,是因为进程B无法使用进程A申请的VB缓存地址,但是奇怪的是物理地址也无法访问(有了物理地址我们可以在本进程内做个映射就可以访问了)不知道海思内部怎么处理的。
现在问题是:
1.我如何才能在单独的进程中获取到流地址呢?(我们的Live555是单独的进程跑的)。
我来回答
回答0个
时间排序
认可量排序
![易百纳技术社区](https://ebaina.oss-cn-hangzhou.aliyuncs.com/production/direct/resource/202306/14/empty.png)
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币
Markdown 语法
- 加粗**内容**
- 斜体*内容*
- 删除线~~内容~~
- 引用> 引用内容
- 代码`代码`
- 代码块```编程语言↵代码```
- 链接[链接标题](url)
- 无序列表- 内容
- 有序列表1. 内容
- 缩进内容
- 图片![alt](url)
相关问答
-
2016-03-15 13:49:53
-
2017-02-14 11:19:19
-
32018-07-02 14:26:48
-
2016-12-21 17:06:44
-
2018-10-18 16:59:16
-
2013-08-20 14:53:23
-
2021-05-24 17:10:57
-
2016-05-05 18:39:45
-
2017-06-12 15:06:48
-
2020-05-08 14:32:36
-
2016-10-10 14:51:52
-
2020-08-10 10:21:22
-
02018-08-13 14:33:31
-
2016-07-07 15:04:59
-
2021-02-28 20:00:17
-
2023-01-11 14:52:21
-
2016-08-25 16:03:37
-
2019-07-18 17:02:58
-
2017-01-20 12:01:07
无更多相似问答 去提问
![易百纳技术社区](/img/web/quest_unlogin_avatar.png)
点击登录
-- 积分
-- E币
提问
—
收益
—
被采纳
—
我要提问
切换马甲
上一页
下一页
举报反馈
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明
提醒
你的问题还没有最佳答案,是否结题,结题后将扣除20%的悬赏金
取消
确认
提醒
你的问题还没有最佳答案,是否结题,结题后将根据回答情况扣除相应悬赏金(1回答=1E币)
取消
确认