Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 渲染原始像素缓冲区时遇到慢路径_Objective C_Macos_Core Graphics_Core Image_Core Video - Fatal编程技术网

Objective c 渲染原始像素缓冲区时遇到慢路径

Objective c 渲染原始像素缓冲区时遇到慢路径,objective-c,macos,core-graphics,core-image,core-video,Objective C,Macos,Core Graphics,Core Image,Core Video,我的OSX应用程序生成了很多电影的缩略图。为了在缩略图生成成本和快速显示之间找到合适的折衷方案,我做了很多实验。当前的设置非常有效,包括将原始ARGB CVPixelBufferData写入磁盘,然后将其转换为图像以显示它们(缩略图非常小,最大为100x100)。我遇到的问题是,以这种方式生成的图像需要很长时间才能渲染 这是我用来将缓冲区数据转换回图像的代码: CGImageRef videoImage = NULL; CVPixelBufferRef pixel

我的OSX应用程序生成了很多电影的缩略图。为了在缩略图生成成本和快速显示之间找到合适的折衷方案,我做了很多实验。当前的设置非常有效,包括将原始ARGB CVPixelBufferData写入磁盘,然后将其转换为图像以显示它们(缩略图非常小,最大为100x100)。我遇到的问题是,以这种方式生成的图像需要很长时间才能渲染

这是我用来将缓冲区数据转换回图像的代码:

        CGImageRef videoImage = NULL;
        CVPixelBufferRef pixelBufferOut = NULL;

        NSData *imageData = [NSData dataWithContentsOfURL:imgURL];

        if (imageData) {

            size_t width = [self.bufferAttributes[(__bridge NSString *)kCVPixelBufferWidthKey] unsignedIntegerValue];
            size_t height = [self.bufferAttributes[(__bridge NSString *)kCVPixelBufferHeightKey] unsignedIntegerValue];
            //size_t bytesPerRow = [self.bufferAttributes[(__bridge NSString *)kCVPixelBufferBytesPerRowAlignmentKey] unsignedIntegerValue];
            OSType pixelFormatType = [self.bufferAttributes[(__bridge NSString *)kCVPixelBufferPixelFormatTypeKey] unsignedIntValue];

            CVReturn ret = CVPixelBufferCreate(NULL, width, height, pixelFormatType, (__bridge CFDictionaryRef _Nullable)(self.bufferAttributes), &pixelBufferOut);

            if (ret == kCVReturnSuccess) {

                CVPixelBufferLockBaseAddress(pixelBufferOut, 0);
                void *baseAddress = CVPixelBufferGetBaseAddress(pixelBufferOut);
                memcpy(baseAddress, imageData.bytes, imageData.length);
                CIImage *ciImage = [CIImage imageWithCVImageBuffer:pixelBufferOut];
                CIContext *temporaryContext = [CIContext contextWithOptions:nil];
                videoImage = [temporaryContext createCGImage:ciImage fromRect:CGRectMake(0, 0, CVPixelBufferGetWidth(pixelBufferOut), CVPixelBufferGetHeight(pixelBufferOut))];
                CVPixelBufferUnlockBaseAddress(pixelBufferOut, 0);
            } else {

                //CFRelease(imgDataCF);
            }
        }

        if (videoImage) {
            images[count] = CFBridgingRelease(videoImage);
        } else {


        }

        CVPixelBufferRelease(pixelBufferOut);
渲染这些图像要比加载png数据慢得多。我试图复制相关的仪器回溯:

Running Time    Self (ms)       Symbol Name
5851.0ms   56.7%    0.0                      -[_NSScrollingConcurrentMainThreadSynchronizer _synchronize:completionHandler:]
5437.0ms   52.7%    0.0                       CA::Transaction::commit()
5428.0ms   52.6%    1.0                        CA::Context::commit_transaction(CA::Transaction*)
5297.0ms   51.4%    0.0                         CA::Layer::prepare_commit(CA::Transaction*)
5289.0ms   51.3%    0.0                          CA::Render::prepare_image(CGImage*, CGColorSpace*, unsigned int, double)
5289.0ms   51.3%    0.0                           CA::Render::copy_image(CGImage*, CGColorSpace*, unsigned int, double)
5288.0ms   51.3%    0.0                            CA::Render::create_image(CGImage*, CGColorSpace*, unsigned int)
5278.0ms   51.2%    0.0                             CA::Render::(anonymous namespace)::create_image_by_rendering(CGImage*, CGColorSpace*, unsigned int)
5199.0ms   50.4%    0.0                              CGContextDrawImage
5197.0ms   50.4%    0.0                               ripc_DrawImage
5175.0ms   50.2%    1.0                                ripc_AcquireImage
5174.0ms   50.2%    0.0                                 CGSImageDataLock
5174.0ms   50.2%    4.0                                  img_data_lock
5048.0ms   48.9%    0.0                                   img_blocks_extent
5048.0ms   48.9%    0.0                                    img_blocks_create
5048.0ms   48.9%    0.0                                     FECIImageImageProvider::copyImageBlockSet(void*, CGImageProvider*, CGRect, CGSize)
5048.0ms   48.9%    0.0                                      FECIImageImageProvider::copyImageBlockSet_(CGImageProvider*, CGRect, CGSize)
5024.0ms   48.7%    0.0                                       FECIImageImageProvider::ensureData(CGColorSpace*, CGRect, CGSize, fe_bitmap_struct*, CGPoint*)
4670.0ms   45.3%    1.0                                        -[FEImage getBitmap:withContext:origin:transform:colorSpace:alreadyClampedToAlpha:]
4668.0ms   45.3%    0.0                                         -[FEImage(Internal) _renderWithContext:bounds:transform:colorSpace:format:premultiplied:setupCallback:finishCallback:callbackData:alreadyClampedToAlpha:]
4663.0ms   45.2%    1.0                                          FETreeContext::renderImage(FEImage*, CGRect, FEShape const*, CGAffineTransform, CGColorSpace*, FEFormat, bool, void (*)(FEContext*, void*, FEFormat), void (*)(FEContext*, void*), void*, signed char)
4571.0ms   44.3%    0.0                                           FETreeContext::renderImage_(FEImage*, CGRect, FEShape const*, CGAffineTransform, CGColorSpace*, FEFormat, bool, void (*)(FEContext*, void*, FEFormat), void (*)(FEContext*, void*), void*, bool)
4545.0ms   44.1%    1.0                                            FETreeContext::renderTree(FETreeNode*, FEShape const&, void (*)(FEContext*, void*, FEFormat), void (*)(FEContext*, void*), void*)
4532.0ms   43.9%    0.0                                             FETreeNode::render(FETreeContext*, FEShape const&, void (*)(FEContext*, void*, FEFormat), void (*)(FEContext*, void*), void*)
4529.0ms   43.9%    2.0                                              FETreeNode::render_(FETreeContext*, FEShape const*, void (*)(FEContext*, void*, FEFormat), void (*)(FEContext*, void*), void*)
4522.0ms   43.8%    3.0                                               FEApplyTreeNode::render2(FETreeContext*, FEShape const*, void (*)(FEContext*, void*, FEFormat), void (*)(FEContext*, void*), void*)
2659.0ms   25.8%    1.0                                                FEApplyTreeNode::render1(FETreeContext*, FEShape const&, fe_kernel_target_struct*, int, float*, FETreeTexture*)
1252.0ms   12.1%    0.0                                                 glBegin_Exec
1252.0ms   12.1%    0.0                                                  gleDoDrawDispatchCore
1250.0ms   12.1%    1.0                                                   gldUpdateDispatch
645.0ms    6.2% 0.0                                                    g575_LoadAndOptimizePipelinePrograms(GLDContextRec*, unsigned int*)
645.0ms    6.2% 0.0                                                     gpusLoadCurrentPipelinePrograms
645.0ms    6.2% 1.0                                                      glrUpdateCtxSysVertexProgram
623.0ms    6.0% 0.0                                                       GHAL3D::CPrivateStateProcessor::CreateVertexShader(GHAL3D::CVertexShader*)
580.0ms    5.6% 0.0                                                        GHAL3D::CGen6StateProcessorCache::CreateVertexShader(GHAL3D::HANDLE_TYPE)
579.0ms    5.6% 1.0                                                         GHAL3D::CStateCache<GHAL3D::SGen6VertexShaderKernelProgramCacheKey, GHAL3D::CGen6VertexShaderKernelProgramCacheData>::PreAllocateData(GHAL3D::SGen6VertexShaderKernelProgramCacheKey const&, GHAL3D::HANDLE_TYPE&)
578.0ms    5.6% 0.0                                                          GHAL3D::CGen6VertexShaderKernelProgramCacheData::Create(GHAL3D::CStateProcessorCache*, GHAL3D::SGen6VertexShaderKernelProgramCacheKey const&, GHAL3D::CGen6VertexShaderKernelProgramCacheData*&)
578.0ms    5.6% 0.0                                                           GHAL3D::CGen6VertexShaderKernelProgramCacheData::Initialize()
577.0ms    5.6% 2.0                                                            GHAL3D::CGen6VertexShaderKernelProgram::Create(void const*, PLATFORM_STR, GHAL3D::CVertexShader const*, S3DKernelHardwareCapabilities const&, GHAL3D::CGen6VertexShaderKernelProgram*&)
574.0ms    5.5% 0.0                                                             GHAL3D::CGen6VertexShaderKernelProgram::Initialize()
567.0ms    5.5% 0.0                                                              GHAL3D::CGen6VertexShaderKernelProgram::Build()
499.0ms    4.8% 0.0                                                               GHAL3D::CGen6VertexShaderKernelProgram::Compile(GHAL3D::SKernelCompilerControls const&)
393.0ms    3.8% 3.0                                                                GHAL3D::CGen4KernelFunctionList::VirtualRegistersToRegisters(GHAL3D::CGen4EURegisterAllocator*, bool, GHAL3D::CGen4ShaderDecomposer*, GHAL3D::CGen4ShaderSymbolTable*, S3DKernelHardwareCapabilities const&, unsigned int, unsigned int, unsigned int, bool&, unsigned int&, unsigned int&, unsigned int&, GHAL3D::SHADER_TYPE)
123.0ms    1.1% 2.0                                                                 GHAL3D::CGen4KernelFunctionList::ComputeLivenessSets(unsigned int, bool, bool)
105.0ms    1.0% 1.0                                                                  GHAL3D::CGen4LIRControlFlowGraph::ComputeLivenessSets(iSTD::CBitSet<GHAL3D::CAllocator>&, iSTD::CBitSet<GHAL3D::CAllocator>&, iSTD::CBitSet<GHAL3D::CAllocator>&, iSTD::CBitSet<GHAL3D::CAllocator>&, iSTD::CBitSet<GHAL3D::CAllocator>&, iSTD::CBitSet<GHAL3D::CAllocator>&, iSTD::CBitSet<GHAL3D::CAllocator>&, iSTD::CBitSet<GHAL3D::CAllocator>&, iSTD::CBitSet<GHAL3D::CAllocator>&, iSTD::CBitSet<GHAL3D::CAllocator>&, unsigned int, bool, bool, bool, bool, bool&)
96.0ms    0.9%  77.0                                                                      GHAL3D::CGen4LIRBasicBlock::ComputeLivenessSets(iSTD::CBitSet<GHAL3D::CAllocator>&, iSTD::CBitSet<GHAL3D::CAllocator>&, iSTD::CBitSet<GHAL3D::CAllocator>&, iSTD::CBitSet<GHAL3D::CAllocator>&, iSTD::CBitSet<GHAL3D::CAllocator>&, iSTD::CBitSet<GHAL3D::CAllocator>&, iSTD::CBitSet<GHAL3D::CAllocator>&, iSTD::CBitSet<GHAL3D::CAllocator>&, iSTD::CBitSet<GHAL3D::CAllocator>&, iSTD::CBitSet<GHAL3D::CAllocator>&, bool, bool, bool, bool, bool, GHAL3D::CGen4LIRControlFlowGraph*, bool&, bool&)
6.0ms    0.0%   2.0                                                                    iSTD::CBitSet<GHAL3D::CAllocator>::Create(unsigned int)
3.0ms    0.0%   0.0                                                                     malloc
3.0ms    0.0%   0.0                                                                      malloc_zone_malloc
3.0ms    0.0%   2.0                                                                       szone_malloc_should_clear
1.0ms    0.0%   1.0                                                                        tiny_malloc_from_free_list
运行时自身(ms)符号名称
5851.0ms 56.7%0.0-[\n滚动ConcurrentMainThreadSynchronizer\u同步:completionHandler:]
5437.0ms 52.7%0.0 CA::事务::提交()
5428.0ms 52.6%1.0 CA::上下文::提交事务(CA::事务*)
5297.0ms 51.4%0.0 CA::层::准备提交(CA::事务*)
5289.0ms 51.3%0.0 CA::Render::prepare_image(CGImage*,CGColorSpace*,无符号整数,双精度)
5289.0ms 51.3%0.0 CA::Render::copy_image(CGImage*,CGColorSpace*,无符号整数,双精度)
5288.0ms 51.3%0.0 CA::Render::创建_图像(CGImage*,CGColorSpace*,无符号整数)
5278.0ms 51.2%0.0 CA::Render::(匿名命名空间)::按渲染创建图像(CGImage*,CGColorSpace*,unsigned int)
5199.0ms 50.4%0.0 CGContextDrawImage
5197.0ms 50.4%0.0 ripc_绘图图像
5175.0ms 50.2%1.0 ripc_采集图像
5174.0ms 50.2%0.0 CGSImageDataLock
5174.0ms 50.2%4.0 img\u数据锁
5048.0ms 48.9%0.0 img\u块\u范围
5048.0ms 48.9%0.0 img\u块创建
5048.0ms 48.9%0.0 FECIImageImageProvider::copyImageBlockSet(无效*,CGImageProvider*,CGRect,CGSize)
5048.0ms 48.9%0.0 FECIImageImageProvider::copyImageBlockSet(CGImageProvider*,CGRect,CGSize)
5024.0ms 48.7%0.0 FECIImageImageProvider::ensureData(CGColorSpace*、CGRect、CGSize、fe_位图_结构*、CGPoint*)
4670.0ms 45.3%1.0-[FeImageGetBitmap:withContext:origin:transform:colorSpace:AlreadyCampedtoalpha:]
4668.0ms 45.3%0.0-[FEImage(内部)\渲染器,其上下文:边界:变换:颜色空间:格式:预乘:设置回调:完成回调:回调数据:alreadyClampedToAlpha:]
4663.0ms 45.2%1.0 FETreeContext::renderImage(FEImage*,CGRect,FEShape const*,CGAffineTransform,CGColorSpace*,FEFormat,bool,void(*)(FEContext*,void*,FEFormat),void(*)(FEContext*,void*),void*,带符号字符)
4571.0ms 44.3%0.0 FETreeContext::renderImage(FEImage*,CGRect,FEShape const*,CGAffineTransform,CGColorSpace*,FEFormat,bool,void(*)(FEContext*,void*,FEFormat),void(*)(FEContext*,void*,void*),voil*,bool)
4545.0ms 44.1%1.0 FETreeContext::renderTree(FETreeNode*,FEShape常量和,void(*)(FEContext*,void*,FEFormat),void(*)(FEContext*,void*),void*)
4532.0ms 43.9%0.0 FETreeNode::render(FETreeContext*,FEShape const&,void(*)(FEContext*,void*,FEFormat),void(*)(FEContext*,void*),void*)
4529.0ms 43.9%2.0 FETreeNode::render(FETreeContext*,FEShape const*,void(*)(FEContext*,void*,FEFormat),void(*)(FEContext*,void*),void*)
4522.0ms 43.8%3.0 FEApplyTreeNode::render2(FETreeContext*,FEShape常量*,void(*)(FEContext*,void*,FEFormat),void(*)(FEContext*,void*),void*)
2659.0ms 25.8%1.0 FEApplyTreeNode::render1(FETreeContext*、FEShape常量和、fe_内核\目标\结构*、int、float*、FETreeTexture*)
1252.0ms 12.1%0.0 glBegin_Exec
1252.0ms 12.1%0.0 gleDoDrawDispatchCore
1250.0ms 12.1%1.0 gldUpdateDispatch
645.0ms 6.2%0.0 g575_加载并优化管道程序(GLDContextRec*,unsigned int*)
645.0ms 6.2%0.0 gpusLoadCurrentPipelinePrograms
645.0ms 6.2%1.0 glrUpdateCtxSysVertexProgram
623.0ms 6.0%0.0 GHAL3D::CPrivateStateProcessor::CreateVertexShader(GHAL3D::CVertexShader*)
580.0ms 5.6%0.0 GHAL3D::CGen6StateProcessorCache::CreateVertexShader(GHAL3D::HANDLE_类型)
579.0ms 5.6%1.0 GHAL3D::CStateCache::PreAllocateData(GHAL3D::SGen6VertexShaderKernelProgramCacheKey常量&,GHAL3D::句柄类型&)
578.0ms 5.6%0.0 GHAL3D::CGen6VertexShaderKernelProgramCacheData::Create(GHAL3D::CStateProcessorCache*,GHAL3D::SGen6VertexShaderKernelProgramCacheKey常量&,GHAL3D::CGen6VertexShaderKernelProgramCacheData*&)
578.0ms 5.6%0.0 GHAL3D::CGen6VertexShaderKernelProgramCacheData::Initialize()
577