#ifndef __LIVE_VIEW_H
#define __LIVE_VIEW_H

// Note: used in modules and platform independent code. 
// Do not add platform dependent stuff in here (#ifdef/#endif compile options or camera dependent values)

/*
Protocol notes:
- Unless otherwise specified, all structure values are packed in camera native (little
  endian) byte order
- Frame buffer and palette data are in native camera formats
  Some documentation may be found at http://chdk.wikia.com/wiki/Frame_buffers 
- The frame buffer descriptions returned may not be correct depending on the
  camera model and various camera settings (shooting mode, digital zoom, aspect ratio)
  This may result in partial images, garbage in the "valid" area or incorrect position
- In some cases, the requested data may not be available. If this happens, the framebuffer
  or palette data offset will be zero. 
- The frame buffer descriptions are returned regardless of whether the data is available
*/
// Live View protocol version
#define LIVE_VIEW_VERSION_MAJOR 2  // increase only with backwards incompatible changes (and reset minor)
#define LIVE_VIEW_VERSION_MINOR 1  // increase with extensions of functionality

/*
protocol version history
< 2.0 - development versions
2.0 - initial release, chdk 1.1
2.1 - added palette type 4 - 16 entry VUYA, 2 bit alpha
*/


// Control flags for determining which data block to transfer
#define LV_TFR_VIEWPORT     0x01
#define LV_TFR_BITMAP       0x04
#define LV_TFR_PALETTE      0x08

enum lv_aspect_rato {
    LV_ASPECT_4_3,
    LV_ASPECT_16_9,
};

/*
Framebuffer types
additional values will be added if new data formats appear
*/
enum lv_fb_type {
    LV_FB_YUV8, // 8 bit per element UYVYYY, used for live view
    LV_FB_PAL8, // 8 bit paletted, used for bitmap overlay. Note palette data and type sent separately
};

/*
framebuffer data description
NOTE YUV pixels widths are based on the number of Y elements
*/
typedef struct {
    int fb_type; // framebuffer type - note future versions might use different structures depending on type
    int data_start; // offset of data from start of live view header
    /*
    buffer width in pixels
    data size is always buffer_width*visible_height*(buffer bpp based on type)
    */
    int buffer_width;
    /*
    visible size in pixels
    describes data within the buffer which contains image data to be displayed
    any offsets within buffer data are added before sending, so the top left
    pixel is always the first first byte of data.
    width must always be <= buffer_width
    if buffer_width is > width, the additional data should be skipped
    visible_height also defines the number of data rows
    */
    int visible_width;
    int visible_height;

    /*
    margins
    pixels offsets needed to replicate display position on cameras screen
    not used for any buffer offsets
    */
    int margin_left;
    int margin_top;

    int margin_right;
    int margin_bot;
} lv_framebuffer_desc;

typedef struct {
    // live view sub-protocol version
    int version_major;
    int version_minor;
    int lcd_aspect_ratio; // physical aspect ratio of LCD
    int palette_type;
    int palette_data_start;
    // framebuffer descriptions are given as offsets, to allow expanding the structures in minor protocol changes
    int vp_desc_start;
    int bm_desc_start;
} lv_data_header;

#endif // __LIVE_VIEW_H
