データのサイズが4800で制限されているようだったので、 /uvchost/uvc/uvc.cpp内の int uvc::get_jpeg(const char* path) const int size = 9600; に変更。
Fork of uvchost by
usb/Usb_td.cpp@4:97438d526ad3, 2013-02-10 (annotated)
- Committer:
- Dromar
- Date:
- Sun Feb 10 15:20:36 2013 +0000
- Revision:
- 4:97438d526ad3
- Parent:
- 0:b0f04c137829
????????4800????????????????; /uvchost/uvc/uvc.cpp??; int uvc::get_jpeg(const char* path); const int size = 9600;; ????
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
va009039 | 0:b0f04c137829 | 1 | #include "mbed.h" |
va009039 | 0:b0f04c137829 | 2 | #include "Usb_td.h" |
va009039 | 0:b0f04c137829 | 3 | #define __DEBUG |
va009039 | 0:b0f04c137829 | 4 | #include "mydbg.h" |
va009039 | 0:b0f04c137829 | 5 | |
va009039 | 0:b0f04c137829 | 6 | #define __TEST |
va009039 | 0:b0f04c137829 | 7 | |
va009039 | 0:b0f04c137829 | 8 | #ifdef __TEST |
va009039 | 0:b0f04c137829 | 9 | #include <queue> |
va009039 | 0:b0f04c137829 | 10 | #endif |
va009039 | 0:b0f04c137829 | 11 | |
va009039 | 0:b0f04c137829 | 12 | template class tdqueue<HCTD*>; |
va009039 | 0:b0f04c137829 | 13 | template class tdqueue<HCITD*>; |
va009039 | 0:b0f04c137829 | 14 | |
va009039 | 0:b0f04c137829 | 15 | HCTD* td_reverse(HCTD* td) |
va009039 | 0:b0f04c137829 | 16 | { |
va009039 | 0:b0f04c137829 | 17 | HCTD* result = NULL; |
va009039 | 0:b0f04c137829 | 18 | HCTD* next; |
va009039 | 0:b0f04c137829 | 19 | while(td) { |
va009039 | 0:b0f04c137829 | 20 | next = (HCTD*)td->Next; |
va009039 | 0:b0f04c137829 | 21 | td->Next = (uint32_t)result; |
va009039 | 0:b0f04c137829 | 22 | result = td; |
va009039 | 0:b0f04c137829 | 23 | td = next; |
va009039 | 0:b0f04c137829 | 24 | } |
va009039 | 0:b0f04c137829 | 25 | return result; |
va009039 | 0:b0f04c137829 | 26 | } |
va009039 | 0:b0f04c137829 | 27 | |
va009039 | 0:b0f04c137829 | 28 | template <class T> |
va009039 | 0:b0f04c137829 | 29 | tdqueue<T>::tdqueue():m_head(NULL),m_tail(NULL) |
va009039 | 0:b0f04c137829 | 30 | { |
va009039 | 0:b0f04c137829 | 31 | |
va009039 | 0:b0f04c137829 | 32 | } |
va009039 | 0:b0f04c137829 | 33 | |
va009039 | 0:b0f04c137829 | 34 | template <class T> |
va009039 | 0:b0f04c137829 | 35 | int tdqueue<T>::size() |
va009039 | 0:b0f04c137829 | 36 | { |
va009039 | 0:b0f04c137829 | 37 | int n = 0; |
va009039 | 0:b0f04c137829 | 38 | T td = m_head; |
va009039 | 0:b0f04c137829 | 39 | while(td) { |
va009039 | 0:b0f04c137829 | 40 | td = (T)td->Next; |
va009039 | 0:b0f04c137829 | 41 | n++; |
va009039 | 0:b0f04c137829 | 42 | } |
va009039 | 0:b0f04c137829 | 43 | return n; |
va009039 | 0:b0f04c137829 | 44 | } |
va009039 | 0:b0f04c137829 | 45 | |
va009039 | 0:b0f04c137829 | 46 | template <class T> |
va009039 | 0:b0f04c137829 | 47 | bool tdqueue<T>::empty() |
va009039 | 0:b0f04c137829 | 48 | { |
va009039 | 0:b0f04c137829 | 49 | return (m_head == NULL); |
va009039 | 0:b0f04c137829 | 50 | } |
va009039 | 0:b0f04c137829 | 51 | |
va009039 | 0:b0f04c137829 | 52 | template <class T> |
va009039 | 0:b0f04c137829 | 53 | T tdqueue<T>::front() |
va009039 | 0:b0f04c137829 | 54 | { |
va009039 | 0:b0f04c137829 | 55 | return m_head; |
va009039 | 0:b0f04c137829 | 56 | } |
va009039 | 0:b0f04c137829 | 57 | |
va009039 | 0:b0f04c137829 | 58 | template <class T> |
va009039 | 0:b0f04c137829 | 59 | void tdqueue<T>::pop() |
va009039 | 0:b0f04c137829 | 60 | { |
va009039 | 0:b0f04c137829 | 61 | T td = m_head; |
va009039 | 0:b0f04c137829 | 62 | if (td) { |
va009039 | 0:b0f04c137829 | 63 | m_head = (T)td->Next; |
va009039 | 0:b0f04c137829 | 64 | } |
va009039 | 0:b0f04c137829 | 65 | if (td == m_tail) { |
va009039 | 0:b0f04c137829 | 66 | m_tail = NULL; |
va009039 | 0:b0f04c137829 | 67 | } |
va009039 | 0:b0f04c137829 | 68 | } |
va009039 | 0:b0f04c137829 | 69 | |
va009039 | 0:b0f04c137829 | 70 | template <class T> |
va009039 | 0:b0f04c137829 | 71 | void tdqueue<T>::push(T td) |
va009039 | 0:b0f04c137829 | 72 | { |
va009039 | 0:b0f04c137829 | 73 | td->Next = NULL; |
va009039 | 0:b0f04c137829 | 74 | if (m_tail) { |
va009039 | 0:b0f04c137829 | 75 | m_tail->Next = (uint32_t)td; |
va009039 | 0:b0f04c137829 | 76 | } |
va009039 | 0:b0f04c137829 | 77 | m_tail = td; |
va009039 | 0:b0f04c137829 | 78 | if (m_head == NULL) { |
va009039 | 0:b0f04c137829 | 79 | m_head = td; |
va009039 | 0:b0f04c137829 | 80 | } |
va009039 | 0:b0f04c137829 | 81 | } |
va009039 | 0:b0f04c137829 | 82 | |
va009039 | 0:b0f04c137829 | 83 | #ifdef __TEST |
va009039 | 0:b0f04c137829 | 84 | static void test_td_list() |
va009039 | 0:b0f04c137829 | 85 | { |
va009039 | 0:b0f04c137829 | 86 | tdqueue<HCTD*> list; |
va009039 | 0:b0f04c137829 | 87 | HCTD* td1; |
va009039 | 0:b0f04c137829 | 88 | HCTD* td2; |
va009039 | 0:b0f04c137829 | 89 | HCTD* td3; |
va009039 | 0:b0f04c137829 | 90 | HCTD* td4; |
va009039 | 0:b0f04c137829 | 91 | // 0 |
va009039 | 0:b0f04c137829 | 92 | DBG_ASSERT(list.size() == 0); |
va009039 | 0:b0f04c137829 | 93 | td1 = list.front(); |
va009039 | 0:b0f04c137829 | 94 | DBG_ASSERT(td1 == NULL); |
va009039 | 0:b0f04c137829 | 95 | list.pop(); |
va009039 | 0:b0f04c137829 | 96 | td1 = list.front(); |
va009039 | 0:b0f04c137829 | 97 | DBG_ASSERT(td1 == NULL); |
va009039 | 0:b0f04c137829 | 98 | // 1 |
va009039 | 0:b0f04c137829 | 99 | td1 = (HCTD*)usb_get_td(1); |
va009039 | 0:b0f04c137829 | 100 | list.push(td1); |
va009039 | 0:b0f04c137829 | 101 | DBG_ASSERT(list.size() == 1); |
va009039 | 0:b0f04c137829 | 102 | td2 = list.front(); |
va009039 | 0:b0f04c137829 | 103 | DBG_ASSERT(td2 == td1); |
va009039 | 0:b0f04c137829 | 104 | list.pop(); |
va009039 | 0:b0f04c137829 | 105 | td2 = list.front(); |
va009039 | 0:b0f04c137829 | 106 | DBG_ASSERT(td2 == NULL); |
va009039 | 0:b0f04c137829 | 107 | DBG_ASSERT(list.size() == 0); |
va009039 | 0:b0f04c137829 | 108 | usb_free_td((byte*)td1); |
va009039 | 0:b0f04c137829 | 109 | // 2 |
va009039 | 0:b0f04c137829 | 110 | td1 = (HCTD*)usb_get_td(1); |
va009039 | 0:b0f04c137829 | 111 | td2 = (HCTD*)usb_get_td(2); |
va009039 | 0:b0f04c137829 | 112 | list.push(td1); |
va009039 | 0:b0f04c137829 | 113 | list.push(td2); |
va009039 | 0:b0f04c137829 | 114 | DBG_ASSERT(list.size() == 2); |
va009039 | 0:b0f04c137829 | 115 | td3 = list.front(); |
va009039 | 0:b0f04c137829 | 116 | DBG_ASSERT(td3 == td1); |
va009039 | 0:b0f04c137829 | 117 | list.pop(); |
va009039 | 0:b0f04c137829 | 118 | td3 = list.front(); |
va009039 | 0:b0f04c137829 | 119 | DBG_ASSERT(td3 == td2); |
va009039 | 0:b0f04c137829 | 120 | list.pop(); |
va009039 | 0:b0f04c137829 | 121 | td3 = list.front(); |
va009039 | 0:b0f04c137829 | 122 | DBG_ASSERT(td3 == NULL); |
va009039 | 0:b0f04c137829 | 123 | usb_free_td((byte*)td1); |
va009039 | 0:b0f04c137829 | 124 | usb_free_td((byte*)td2); |
va009039 | 0:b0f04c137829 | 125 | // 3 |
va009039 | 0:b0f04c137829 | 126 | td1 = (HCTD*)usb_get_td(1); |
va009039 | 0:b0f04c137829 | 127 | td2 = (HCTD*)usb_get_td(2); |
va009039 | 0:b0f04c137829 | 128 | td3 = (HCTD*)usb_get_td(3); |
va009039 | 0:b0f04c137829 | 129 | list.push(td1); |
va009039 | 0:b0f04c137829 | 130 | list.push(td2); |
va009039 | 0:b0f04c137829 | 131 | list.push(td3); |
va009039 | 0:b0f04c137829 | 132 | DBG_ASSERT(list.size() == 3); |
va009039 | 0:b0f04c137829 | 133 | td4 = list.front(); |
va009039 | 0:b0f04c137829 | 134 | DBG_ASSERT(td4 == td1); |
va009039 | 0:b0f04c137829 | 135 | list.pop(); |
va009039 | 0:b0f04c137829 | 136 | td4 = list.front(); |
va009039 | 0:b0f04c137829 | 137 | DBG_ASSERT(td4 == td2); |
va009039 | 0:b0f04c137829 | 138 | list.pop(); |
va009039 | 0:b0f04c137829 | 139 | td4 = list.front(); |
va009039 | 0:b0f04c137829 | 140 | DBG_ASSERT(td4 == td3); |
va009039 | 0:b0f04c137829 | 141 | list.pop(); |
va009039 | 0:b0f04c137829 | 142 | td4 = list.front(); |
va009039 | 0:b0f04c137829 | 143 | DBG_ASSERT(td4 == NULL); |
va009039 | 0:b0f04c137829 | 144 | usb_free_td((byte*)td1); |
va009039 | 0:b0f04c137829 | 145 | usb_free_td((byte*)td2); |
va009039 | 0:b0f04c137829 | 146 | usb_free_td((byte*)td3); |
va009039 | 0:b0f04c137829 | 147 | // n |
va009039 | 0:b0f04c137829 | 148 | queue<HCTD*> queue; |
va009039 | 0:b0f04c137829 | 149 | for(int n = 1; n <= 10; n++) { |
va009039 | 0:b0f04c137829 | 150 | DBG_ASSERT(list.size() == queue.size()); |
va009039 | 0:b0f04c137829 | 151 | DBG_ASSERT(list.empty() == queue.empty()); |
va009039 | 0:b0f04c137829 | 152 | if (list.empty() || (rand()%10) > 5) { |
va009039 | 0:b0f04c137829 | 153 | td1 = (HCTD*)usb_get_td(n); |
va009039 | 0:b0f04c137829 | 154 | if (td1) { |
va009039 | 0:b0f04c137829 | 155 | list.push(td1); |
va009039 | 0:b0f04c137829 | 156 | queue.push(td1); |
va009039 | 0:b0f04c137829 | 157 | } |
va009039 | 0:b0f04c137829 | 158 | //DBG("+ %d %p\n", n, td1); |
va009039 | 0:b0f04c137829 | 159 | } else { |
va009039 | 0:b0f04c137829 | 160 | td1 = list.front(); |
va009039 | 0:b0f04c137829 | 161 | td2 = queue.front(); |
va009039 | 0:b0f04c137829 | 162 | if (td1 != td2) { |
va009039 | 0:b0f04c137829 | 163 | //DBG("td1=%p td2=%p\n", td1, td2); |
va009039 | 0:b0f04c137829 | 164 | } |
va009039 | 0:b0f04c137829 | 165 | DBG_ASSERT(td1 == td2); |
va009039 | 0:b0f04c137829 | 166 | if (td1) { |
va009039 | 0:b0f04c137829 | 167 | list.pop(); |
va009039 | 0:b0f04c137829 | 168 | queue.pop(); |
va009039 | 0:b0f04c137829 | 169 | usb_free_td((byte*)td1); |
va009039 | 0:b0f04c137829 | 170 | } |
va009039 | 0:b0f04c137829 | 171 | //DBG("- %d %p\n", n, td1); |
va009039 | 0:b0f04c137829 | 172 | } |
va009039 | 0:b0f04c137829 | 173 | } |
va009039 | 0:b0f04c137829 | 174 | while(!list.empty()) { |
va009039 | 0:b0f04c137829 | 175 | td1 = list.front(); |
va009039 | 0:b0f04c137829 | 176 | list.pop(); |
va009039 | 0:b0f04c137829 | 177 | usb_free_td((byte*)td1); |
va009039 | 0:b0f04c137829 | 178 | } |
va009039 | 0:b0f04c137829 | 179 | //DBG_ASSERT(0); |
va009039 | 0:b0f04c137829 | 180 | } |
va009039 | 0:b0f04c137829 | 181 | |
va009039 | 0:b0f04c137829 | 182 | static void test_td_reverse() |
va009039 | 0:b0f04c137829 | 183 | { |
va009039 | 0:b0f04c137829 | 184 | |
va009039 | 0:b0f04c137829 | 185 | HCTD* td1; |
va009039 | 0:b0f04c137829 | 186 | HCTD* td2; |
va009039 | 0:b0f04c137829 | 187 | HCTD* td3; |
va009039 | 0:b0f04c137829 | 188 | HCTD* td4; |
va009039 | 0:b0f04c137829 | 189 | // 0 |
va009039 | 0:b0f04c137829 | 190 | td1 = NULL; |
va009039 | 0:b0f04c137829 | 191 | td2 = td_reverse(td1); |
va009039 | 0:b0f04c137829 | 192 | DBG_ASSERT(td2 == NULL); |
va009039 | 0:b0f04c137829 | 193 | // 1 |
va009039 | 0:b0f04c137829 | 194 | td1 = (HCTD*)usb_get_td(1); |
va009039 | 0:b0f04c137829 | 195 | DBG_ASSERT(td1); |
va009039 | 0:b0f04c137829 | 196 | DBG_ASSERT(td1->Next == NULL); |
va009039 | 0:b0f04c137829 | 197 | td2 = td_reverse(td1); |
va009039 | 0:b0f04c137829 | 198 | DBG_ASSERT(td2 == td1); |
va009039 | 0:b0f04c137829 | 199 | DBG_ASSERT(td2->Next == NULL); |
va009039 | 0:b0f04c137829 | 200 | usb_free_td((byte*)td1); |
va009039 | 0:b0f04c137829 | 201 | // 2 |
va009039 | 0:b0f04c137829 | 202 | td1 = (HCTD*)usb_get_td(1); |
va009039 | 0:b0f04c137829 | 203 | DBG_ASSERT(td1); |
va009039 | 0:b0f04c137829 | 204 | td2 = (HCTD*)usb_get_td(2); |
va009039 | 0:b0f04c137829 | 205 | DBG_ASSERT(td2); |
va009039 | 0:b0f04c137829 | 206 | td1->Next = (uint32_t)td2; |
va009039 | 0:b0f04c137829 | 207 | td3 = td_reverse(td1); |
va009039 | 0:b0f04c137829 | 208 | DBG_ASSERT(td3 == td2); |
va009039 | 0:b0f04c137829 | 209 | DBG_ASSERT(td3->Next == (uint32_t)td1); |
va009039 | 0:b0f04c137829 | 210 | DBG_ASSERT(td1->Next == NULL); |
va009039 | 0:b0f04c137829 | 211 | usb_free_td((byte*)td1); |
va009039 | 0:b0f04c137829 | 212 | usb_free_td((byte*)td2); |
va009039 | 0:b0f04c137829 | 213 | // 3 |
va009039 | 0:b0f04c137829 | 214 | td1 = (HCTD*)usb_get_td(1); |
va009039 | 0:b0f04c137829 | 215 | td2 = (HCTD*)usb_get_td(2); |
va009039 | 0:b0f04c137829 | 216 | td3 = (HCTD*)usb_get_td(3); |
va009039 | 0:b0f04c137829 | 217 | td1->Next = (uint32_t)td2; |
va009039 | 0:b0f04c137829 | 218 | td2->Next = (uint32_t)td3; |
va009039 | 0:b0f04c137829 | 219 | td4 = td_reverse(td1); |
va009039 | 0:b0f04c137829 | 220 | DBG_ASSERT(td4 == td3); |
va009039 | 0:b0f04c137829 | 221 | DBG_ASSERT(td3->Next == (uint32_t)td2); |
va009039 | 0:b0f04c137829 | 222 | DBG_ASSERT(td2->Next == (uint32_t)td1); |
va009039 | 0:b0f04c137829 | 223 | DBG_ASSERT(td1->Next == NULL); |
va009039 | 0:b0f04c137829 | 224 | usb_free_td((byte*)td1); |
va009039 | 0:b0f04c137829 | 225 | usb_free_td((byte*)td2); |
va009039 | 0:b0f04c137829 | 226 | usb_free_td((byte*)td3); |
va009039 | 0:b0f04c137829 | 227 | } |
va009039 | 0:b0f04c137829 | 228 | |
va009039 | 0:b0f04c137829 | 229 | void test_td() |
va009039 | 0:b0f04c137829 | 230 | { |
va009039 | 0:b0f04c137829 | 231 | test_td_reverse(); |
va009039 | 0:b0f04c137829 | 232 | test_td_list(); |
va009039 | 0:b0f04c137829 | 233 | DBG("Usb_td.cpp TD test done.\n"); |
va009039 | 0:b0f04c137829 | 234 | } |
va009039 | 0:b0f04c137829 | 235 | #else //__TEST |
va009039 | 0:b0f04c137829 | 236 | void test_td() |
va009039 | 0:b0f04c137829 | 237 | { |
va009039 | 0:b0f04c137829 | 238 | |
va009039 | 0:b0f04c137829 | 239 | } |
va009039 | 0:b0f04c137829 | 240 | #endif //__TEST |