forked from gnachman/iTerm2
-
Notifications
You must be signed in to change notification settings - Fork 0
/
DVREncoder.h
executable file
·89 lines (70 loc) · 2.9 KB
/
DVREncoder.h
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
// -*- mode:objc -*-
/*
** DVREncoder.h
**
** Copyright 20101
**
** Author: George Nachman
**
** Project: iTerm2
**
** Description: Encodes screen images into a DVRBuffer. Implements
** a basic key-frame + differential encoding scheme.
**
** 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., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#import <Cocoa/Cocoa.h>
#import "DVRBuffer.h"
@interface DVREncoder : NSObject
{
// Underlying buffer to write to. Not owned by us.
DVRBuffer* buffer_;
// The last encoded frame.
NSMutableData* lastFrame_;
// Info from the last frame.
DVRFrameInfo lastInfo_;
// Number of frames. Used to ensure key frames are encoded every so often.
int count_;
// Used to ensure that reserve is called before appendFrame.
BOOL haveReservation_;
// Used to ensure a key frame is encoded before the circular buffer wraps.
long long bytesSinceLastKeyFrame_;
// Number of bytes reserved.
int reservation_;
}
- (id)initWithBuffer:(DVRBuffer*)buffer;
- (void)dealloc;
// Encoded a frame into the DVRBuffer. Call -[reserve:] first.
// frameLines: An array of screen lines
// length: number of bytes (not elements) in buffer.
// info: screen state.
- (void)appendFrame:(NSArray *)frameLines length:(int)length info:(DVRFrameInfo*)info;
// Allocate some number of bytes for an upcoming appendFrame call.
// Returns true if some frames were freed to make room. The caller should
// invalidate nonexistent leading frames in all decoders.
- (BOOL)reserve:(int)length;
@end
@interface DVREncoder (Private)
// Save a key frame into DVRBuffer.
- (void)_appendKeyFrame:(NSArray *)frameLines length:(int)length info:(DVRFrameInfo*)info;
// Save a diff frame into DVRBuffer.
- (void)_appendDiffFrame:(NSArray *)frameLine length:(int)length info:(DVRFrameInfo*)info;
// Save a frame into DVRBuffer.
- (void)_appendFrameImpl:(char *)buffer length:(int)length type:(DVRFrameType)type info:(DVRFrameInfo*)info;
// Calculate the diff between buffer,length and the previous frame. Saves results into
// scratch. Won't use more than maxSize bytes in scratch. Returns number of bytes used or
// -1 if the diff was larger than maxSize.
- (int)_computeDiff:(NSArray *)frameLines length:(int)length dest:(char*)scratch maxSize:(int)maxSize;
@end