首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NPAPI:数据推送模型?

NPAPI:数据推送模型?
EN

Stack Overflow用户
提问于 2014-07-11 14:44:45
回答 1查看 51关注 0票数 0

在使用NPAPI时,您可以控制两个函数:WriteReady。这基本上是一个数据推送模型。

但是,我需要实现对新文件格式的支持。我使用的库接受以下源模型的任何具体子类(简化的c++代码):

代码语言:javascript
复制
struct compressed_source {
  virtual int read(char *buf, int num_bytes) = 0;
}

这个模型在处理文件* (C)或套接字(BSD)和其他文件时很容易实现,因为它们符合拉数据模型。但是,我不知道如何从NPAPI push模型中完全填充这个拉出模型。

据我所知,我无法在::read(char *, size_t)的具体实现中明确地调用::read(char *, size_t)

这里的解决方案是什么?

编辑:

我不想增加太多的细节,以避免混淆的答案。仅供参考,我想要构建一个OpenJPEG/NPAPI插件。OpenJPEG是一个巨大的库,底层的JPEG 2000实现确实需要一个拉数据模型来允许对海量图像的精细访问(例如:由于低级别的索引信息,100000×100000图像的特定子区域)。换句话说,我真的需要一个拉数据模型插件接口。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-11 18:01:28

预加载文件

嗯,预加载整个文件总是一个可行的选择,但通常不是一个好的选项。从您的其他问题中,我认为所讨论的文件/下载可能相当大,因此避免网络通信可能是个好主意,因此预装文件并不是一种真正的选择。

黑进图书馆

如果您使用的是一些开放源码库,那么您可能可以在库中实现一个push API,或者直接实现当前的拉API。

或者你可以完全靠自己来实现。IIRC你试图解码一些图像格式,而且图像格式通常很容易从零开始实现。

通过阻塞线程来实现阻塞读取

您可以将图像解码内容放入一个新线程,当没有足够的缓冲数据来立即完成read时,请执行阻塞等待数据接收线程(在NPAPI情况下的主线程),直到它指示缓冲区再次填满为止。这本质上就是生产者/消费者问题

当然,您首先需要选择如何使用线程和同步原语(一个库,如C++11 std::thread、Boost线程、低级线程和/或Windows线程等等)。互联网上有大量关于SO/SE的相关SO问题,以及大量的文章/帖子/讨论/教程等。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24700457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档