小编Enc*_*ble的帖子

限制对C++构造函数和析构函数的访问

请原谅我,如果已经提出这个问题,我没有找到任何特定问题的答案.

我在库中创建了一个类,我希望某些类能够创建和销毁,其他类可以访问其他公共函数.有一个friend class不是我想要的,因为朋友类将访问我不想要的成员变量和成员函数.我偶然发现了这个几乎可以工作的习语,除了析构函数,因为它不能采用其他参数.有了这个成语,我得到:

class B;
class A
{
    public:
        class LifecycleKey
        {
            private:
                LifecycleKey() {}
                friend class B;
        };

        A(LifecycleKey); // Now only class B can call this
        // Other public functions

    private:
        ~A(); // But how can I get class B to have access to this?

        void somePrivateFunction();

        // Members and other private functions
};
Run Code Online (Sandbox Code Playgroud)

如上面的代码中所提到的,该解决方案不允许仅class B访问析构函数.

虽然上述问题都没有任何影响,因为我总是可以将ctor和dtor公之于众,并且只是说"RTFM".

我的问题是:

有没有办法限制访问ctor和dtor到特定的类(但只有ctor和dtor),同时坚持更熟知的语法(如果人们想要的东西在堆栈上,通过删除销毁,等等)?

任何帮助是极大的赞赏!

A.h

class B;
class A
{
    protected:
        A() …
Run Code Online (Sandbox Code Playgroud)

c++ constructor destructor

6
推荐指数
1
解决办法
1038
查看次数

控制VirtualDisplay的帧速率

我正在编写一个Android应用程序,在其中,我有一个VirtualDisplay镜像屏幕上的内容,然后我将帧从屏幕发送到一个实例MediaCodec.它有效,但是,我想添加一种指定编码视频的FPS的方法,但我不确定如何这样做.

根据我的阅读和实验,丢弃编码的帧(基于演示时间)不能很好地工作,因为它最终会产生块状/伪影的视频,而不是低帧率的平滑视频.其他阅读表明,做我想要的唯一方法(限制FPS)将限制传入的FPS到MediaCodec,但是VirtualDisplay刚收到一个SurfaceMediaCodec下面构造的

mSurface = <instance of MediaCodec>.createInputSurface();
mVirtualDisplay = mMediaProjection.createVirtualDisplay(
    "MyDisplay",
    screenWidth,
    screenHeight,
    screenDensity,
    DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR,
    mSurface,
    null,
    null);
Run Code Online (Sandbox Code Playgroud)

我也试过子类Surface和限制被馈送到帧MediaCodec通过unlockCanvasAndPost(Canvas canvas),但该功能似乎从来没有对我的情况下被调用,因此,有可能是我如何延长一些古怪Surface以及与互动ParcelwriteToParcel功能称为上我的实例,但这是在我的实例中调用的唯一函数(我可以告诉).

其他阅读建议我可以从编码器 - >解码器 - >编码器,并限制第二个编码器馈送帧的速率,但这是很多额外的计算,如果我可以避免它,我宁愿不做.

有没有人成功限制VirtualDisplay饲喂它的速度Surface?任何帮助将不胜感激!

android mediacodec

4
推荐指数
1
解决办法
2879
查看次数

标签 统计

android ×1

c++ ×1

constructor ×1

destructor ×1

mediacodec ×1