J'écris un lecteur audio pour OSX. Une vue est une vue personnalisée qui affiche une forme d'onde. La forme d'onde est stockée en tant que variable d'instance de type NSImage
avec NSBitmapImageRep
. La vue affiche également un indicateur de progression (une ligne rouge épaisse). Par conséquent, il est mis à jour/redessiné toutes les 30 millisecondes.Comment accélérer le dessin d'une image mise à l'échelle? La restitution audio s'étouffe lors du redimensionnement de la fenêtre
Comme il faut un certain temps pour recalculer l'image, je le fais dans un fil d'arrière-plan après chaque redimensionnement de la fenêtre et mettre à jour l'image affichée une fois que la nouvelle image est prête. En attendant, l'image originale est mise à l'échelle pour adapter la vue comme ceci:
// The drawing rectangle is slightly smaller than the view, defined by
// the two margins.
NSRect drawingRect;
drawingRect.origin = NSMakePoint(sideEdgeMarginWidth, topEdgeMarginHeight);
drawingRect.size = NSMakeSize([self bounds].size.width-2*sideEdgeMarginWidth,
[self bounds].size.height-2*topEdgeMarginHeight);
[waveform drawInRect:drawingRect
fromRect:NSZeroRect
operation:NSCompositeSourceOver
fraction:1];
La vue fait la plus grande partie de la fenêtre. Pendant le redimensionnement en direct, l'audio commence à s'étouffer. Sélectionner la "grosse" carte graphique sur mon Macbook Pro la rend moins mauvaise, mais pas beaucoup. L'utilisation du processeur se situe aux environs de 20 à 40% lors des redimensionnements en temps réel.
Les instruments suggèrent que le redimensionnement/redessin de l'image est le problème. Une fois que j'arrête de redimensionner la fenêtre, l'utilisation du processeur diminue et l'audio cesse de tomber en panne.
je l'ai déjà essayé de désactiver l'interpolation d'image pour accélérer le dessin comme celui-ci:
[[NSGraphicsContext currentContext]
setImageInterpolation:NSImageInterpolationNone];
Cela aide, mais audio selfs encore pendant redimensionne en direct.
Avez-vous une idée pour améliorer cela?
L'essentiel est d'éviter l'étouffement de l'audio.
Lancez-vous l'audio à partir de votre thème graphique? – extraneon
Oui. C'est considéré comme une mauvaise idée, non? Je peux voir pourquoi ☺ – bastibe