//
//  DecodedFrame.h
//  DecoderWrapper
//
//  Created by Mike Montalbo on 6/4/12.
//  Copyright (c) 2012 Dropcam. All rights reserved.
//

#import <CoreVideo/CoreVideo.h>

@interface DecodedFrame : NSObject
+ (DecodedFrame *)decodedFrameWithWidth:(NSUInteger)width 
                                 height:(NSUInteger)height
                            imageBuffer:(CVImageBufferRef)imageBuffer
                              timestamp:(int64_t)pts;

- (id)initWithWidth:(NSUInteger)width 
             height:(NSUInteger)height
             yPlane:(NSData *)yPlane
             uPlane:(NSData *)uPlane
             vPlane:(NSData *)vPlane
          timestamp:(int64_t)pts;

- (id)initWithWidth:(NSUInteger)width
             height:(NSUInteger)height
        imageBuffer:(CVImageBufferRef)imageBuffer
          timestamp:(int64_t)pts;

- (NSData *)sceneChangeData;
+ (BOOL)isSceneChangeFromData:(NSData *)data1 toData:(NSData *)data2;

@property (nonatomic, strong) NSData *yPlane;
@property (nonatomic, strong) NSData *uPlane;
@property (nonatomic, strong) NSData *vPlane;
@property (nonatomic, assign) int64_t PTS;
@property (nonatomic, assign) CVImageBufferRef imageBuffer;
@property (nonatomic, assign) NSUInteger width;
@property (nonatomic, assign) NSUInteger height;
@end
