source: branches/reyalp-ptp-live/platform/a540/sub/100b/lib.c @ 1818

Revision 1818, 5.3 KB checked in by reyalp, 13 months ago (diff)

work in progress live view protocol changes
this is unfinished likely to change in incompatible ways
a540 includes fake variable aspect code for testing

  • Property svn:eol-style set to native
Line 
1#include "platform.h"
2#include "keyboard.h"
3#include "stdlib.h"
4
5/*
6void *hook_raw_fptr()
7{
8    return (void*)0x34C50;
9}
10
11void *hook_raw_ret_addr()
12{
13    return (void*)0xFFCC7FF0;
14}
15*/
16
17char *hook_raw_image_addr()
18{
19    return (char*)0x105B8AC0; // OK (find on ".crw")
20   
21}
22
23long hook_raw_size()
24{
25    return 0x75A8F0; // OK (find on ".crw")
26}
27
28/*
29void *vid_get_viewport_live_fb()
30{
31    return (void*)0;
32}
33*/
34
35void *vid_get_bitmap_fb()
36{
37    return (void*)0x103C79A0; // OK (find in _CreatePhysicalVram)
38}
39
40void *vid_get_viewport_fb()
41{
42    return (void*)0x105F17A0; // OK (find on "VRAM Address  : %p")
43}
44
45void *vid_get_viewport_fb_d()
46{
47// from ewavr
48  int x=(*(int*)0x63AD0); // found in sub_FFD25770
49  return (void *)x;
50// if we start camera in PB mode with movie on display, this pointer will be NULL
51// _fb isn't valid data, but at least it doesn't crash
52//  return (void*) (x ? (void *)x : vid_get_viewport_fb()) ;
53}
54
55long vid_get_viewport_height()
56{
57  return 240;
58// real height in rec mode can be obtained below
59// note: 240 normally, 160 in stitch, 264 in 320x240 video, 528 in 640x480 video
60// contiuously variable with digital zoom in video
61//    return ((mode_get()&MODE_MASK) == MODE_PLAY)?240:*(int*)(0x32C68+4); // GetVRAMVPixelsSize
62}
63
64int review_fullscreen_mode(){ //from 710 added
65 char r;
66 get_parameter_data(53, &r, 1);
67 return  r==0;
68}
69
70int postreview_fullscreen_mode(){ //from 710 added
71 char r;
72 get_parameter_data(54, &r, 1);
73 return  r==0;
74}
75
76
77static int file_size_table[3][5]={{3110,2562,1666,1057,288},
78                                  {1954,1441, 928, 608,176},
79                                  {960,  736, 480, 320,112}};  // in KB   // from 710 added
80                                       
81                                 
82long raw_shoot_avail(){ // from 710 added
83 long jpegs,size,quality;
84 jpegs=atoi((char*)0x6E8D0); // orig.0x7BD98 find -> a9999
85 get_property_case(23, (void *)&quality, 4);
86 get_property_case(24, (void *)&size, 4);
87 if ((size>4) || (quality>2)) return 0;
88 return (file_size_table[quality][size]*jpegs)/(file_size_table[quality][size]+(hook_raw_size()>>10));
89}
90
91
92int mf_slider_active() // from 710 added
93{
94 return *(long*)0x6C8B0==0x100; // orig.0x798F0  found in "ControlSwitcher.c"
95}
96
97void *vid_get_viewport_live_fb() // from 710 added
98{
99   // return (void*)0x10670ee0;
100    void **fb=(void **)0x5288;
101    unsigned char buff = *((unsigned char*)0x5298);
102    if (buff == 0) {
103        buff = 2;
104    }
105    else {
106        buff--;
107    }
108    return fb[buff];
109}
110
111
112char *camera_jpeg_count_str()
113{
114    return (char*)0x6E8D0 ; // from 700 added orig. 0x78688
115}
116
117// PTP display stuff
118int vid_get_palette_type() { return 1; }
119int vid_get_palette_size() { return 16*4; }
120
121void *vid_get_bitmap_active_palette() {
122    return (void *)0x634E0; // GetPaletteFromPhysicalScreen
123}
124
125void *vid_get_bitmap_active_buffer()
126{
127    return (void*)(*(int*)0x5ED0); // FFD23420 DisplayPhysicalScreenWithYUVPalette
128}
129#if 1
130int vid_get_viewport_max_height()               { return 528; } // in 640x480 movie mode
131// this returns actual width in rec mode
132// normally 704, effectively 352 at normal 1:2 PAR. In 640 video, doesn't change but has 1:1 PAR
133// actual width is also 704 in playback mode, but the variable returns 0
134// in 320 video 352, 1:1. In stitch 352, 1:2
135int vid_get_viewport_width_proper() {
136    // fake 1:1 mode
137    if((mode_get()&MODE_SHOOTING_MASK) == MODE_PORTRAIT) {
138        return 528;
139    }
140    return ((mode_get()&MODE_MASK) == MODE_PLAY)?704:*(int*)0x32C68;
141}
142int vid_get_viewport_height_proper() {
143    // fake 16:9 mode
144    if((mode_get()&MODE_SHOOTING_MASK) == MODE_LANDSCAPE) {
145        return 180;
146    }
147    return ((mode_get()&MODE_MASK) == MODE_PLAY)?240:*(int*)(0x32C68+4);
148}
149#endif
150int vid_get_viewport_logical_height() {
151    // except for stitch, always full screen
152    int m = mode_get();
153    if((m&MODE_MASK) != MODE_PLAY && ((m&MODE_SHOOTING_MASK) == MODE_STITCH || (m&MODE_SHOOTING_MASK) == MODE_LANDSCAPE)) {
154        return 240;
155    }
156    return vid_get_viewport_height_proper();
157}
158int vid_get_viewport_logical_width() {
159    // except for stitch, always full screen
160    int m = mode_get();
161    if((m&MODE_MASK) != MODE_PLAY && ((m&MODE_SHOOTING_MASK) == MODE_STITCH || (m&MODE_SHOOTING_MASK) == MODE_PORTRAIT)) {
162        return 704;
163    }
164    return vid_get_viewport_width_proper();
165}
166int vid_get_viewport_display_xoffset_proper() {
167    int val=0;
168    int m = mode_get();
169    if((m&MODE_MASK) != MODE_PLAY && (m&MODE_SHOOTING_MASK) == MODE_STITCH) {
170        short dir=0;
171        short seq=0;
172        get_property_case(PROPCASE_STITCH_DIRECTION,&dir,sizeof(dir));
173        get_property_case(PROPCASE_STITCH_SEQUENCE,&seq,sizeof(seq));
174        // overall stitch window is 3/4 screen width, centered
175        // live part is 1/2, so margin is either 1/8th or 3/8th
176        if(dir==0) {
177            val = seq?264:88;
178        } else {
179            val = seq?88:264;
180        }
181    } else if((m&MODE_SHOOTING_MASK) == MODE_PORTRAIT) {
182        val = 88;
183    }
184    return val;
185}
186int vid_get_viewport_xoffset() {
187    if((mode_get()&MODE_SHOOTING_MASK) == MODE_PORTRAIT) {
188       return 88;
189    }
190    return 0;
191}
192int vid_get_viewport_display_yoffset_proper() {
193    int m = mode_get();
194    if((m&MODE_SHOOTING_MASK) == MODE_LANDSCAPE) {
195       return 30;
196    }
197    return ((m&MODE_MASK) != MODE_PLAY && (m&MODE_SHOOTING_MASK) == MODE_STITCH)?60:0; // window is 120, centered in 240 screen
198}
199int vid_get_viewport_yoffset() {
200    if((mode_get()&MODE_SHOOTING_MASK) == MODE_LANDSCAPE) {
201       return 30;
202    }
203    return 0;
204}
Note: See TracBrowser for help on using the repository browser.