// QGBaseDecoder.m // Tencent is pleased to support the open source community by making vap available. // // Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. // // Licensed under the MIT License (the "License"); you may not use this file except in // compliance with the License. You may obtain a copy of the License at // // http://opensource.org/licenses/MIT // // Unless required by applicable law or agreed to in writing, software distributed under the License is // distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, // either express or implied. See the License for the specific language governing permissions and // limitations under the License. #import "QGBaseDecoder.h" #import "QGAnimatedImageDecodeThreadPool.h" @interface QGBaseDecoder() { QGBaseDFileInfo *_fileInfo; } @end @implementation QGBaseDecoder - (instancetype)initWith:(QGBaseDFileInfo *)fileInfo error:(NSError **)error { if (self = [super init]) { _currentDecodeFrame = -1; _fileInfo = fileInfo; _fileInfo.occupiedCount ++; } return self; } - (QGBaseDFileInfo *)fileInfo { return _fileInfo; } /** 由具体子类实现 该方法在decodeframe方法即将被调用时调用,如果返回YES则停止解码工作 @param nextFrameIndex 将要解码的帧索引 @return 是否需要继续解码 */ - (BOOL)shouldStopDecode:(NSInteger)nextFrameIndex { // No implementation here. Meant to be overriden in subclass. return NO; } - (BOOL)isFrameIndexBeyondEnd:(NSInteger)frameIndex { return NO; } /** 在专用线程内解码指定帧并放入对应的缓冲区内 @param frameIndex 帧索引 @param buffers 缓冲 */ - (void)decodeFrame:(NSInteger)frameIndex buffers:(NSMutableArray *)buffers { // No implementation here. Meant to be overriden in subclass. } @end