File: FileSequenceWriter.m

package info (click to toggle)
lynkeos.app 3.10%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 6,832 kB
  • sloc: objc: 41,053; ansic: 812; cpp: 151; sh: 68; makefile: 27
file content (127 lines) | stat: -rw-r--r-- 4,010 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
//
//  Lynkeos
//  $Id$
//
//  Created by Jean-Etienne LAMIAUD on Sat Aug 5 2023.
//  Copyright (c) 2023. Jean-Etienne LAMIAUD
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
//

#include <tiffio.h>

#include <AppKit/AppKit.h>

#include "FileSequenceWriter.h"

@implementation FileSequenceWriter

+ (void) load
{
   // Nothing to do, this is just to force the runtime to load this class
}

- (id) init
{
   if ( (self = [super init]) != nil )
   {
      _tiffWriter = nil;
   }
   
   return( self );
}

+ (NSString*) writerName { return( @"File sequence" ); }

+ (NSString*) fileExtension { return( @"tiff" ); }

+ (BOOL) canSaveDataWithPlanes:(u_short)nPlanes
                         width:(u_short)w height:(u_short)h
                      metaData:(NSDictionary*)metaData
{
   return( [MyTiffWriter canSaveDataWithPlanes:nPlanes
                                         width:w
                                        height:h
                                      metaData:metaData] );
}

- (NSPanel*) configurationPanel
{
   if (_tiffWriter != nil)
      return [_tiffWriter configurationPanel];
   else
      return nil;
}

+ (id <LynkeosFileWriter>) writerForURL:(NSURL*)url
                                 planes:(u_short)nPlanes
                                  width:(u_short)w height:(u_short)h
                               metaData:(NSDictionary*)metaData
{
   // No pre-processing needed
   FileSequenceWriter *writer = [[[self alloc] init] autorelease];
   writer->_tiffWriter = (MyTiffWriter*)[[MyTiffWriter writerForURL:url   // TiffWriter does not use url here
                                                             planes:nPlanes
                                                              width:w
                                                             height:h
                                                           metaData:metaData] retain];

   return writer;
}

- (u_short) numberOfPlanes {return 3;}

- (void) saveMovieAtURL:(NSURL *)url
           withDelegate:(id<LynkeosMovieFileWriterDelegate>)delegate
                 opaque:(void *)opaque
             blackLevel:(double)black
             whiteLevel:(double)white
             withPlanes:(u_short)nPlanes
                  width:(u_short)w
                 height:(u_short)h
               metaData:(NSDictionary *)metaData
{
   const REAL * const * planes;
   u_short lineW;
   int index = 0;

   for (;;)
   {
      // Get rid of autoreleased objects at each loop iteration
      // otherwise the memory usage may grow up to an unbearable value
      NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];

      BOOL canceled;
      [delegate getNextFrameWithData:&planes lineWidth:&lineW opaque:opaque canceled:&canceled];
      if (canceled || planes == NULL)
         return;

      NSString *path = [url path];
      path = [path stringByDeletingPathExtension];
      path = [path stringByAppendingFormat:@"-%04d.", index];
      path = [path stringByAppendingString:[url pathExtension]];
      [_tiffWriter saveImageAtURL:[NSURL fileURLWithPath:path]
                         withData:planes
                       blackLevel:black whiteLevel:white
                       withPlanes:nPlanes width:w lineWidth:lineW height:h
                         metaData:metaData];

      index++;

      [pool release];
   }
}

@end