WikiStart » Historikk » Versjon 27
Christian Skarby, 07.04.2011 12:09
1 | 25 | Niels Petter Rasch-Olsen | h1. Welcome to pylibdv-0.1 |
---|---|---|---|
2 | |||
3 | 23 | Niels Petter Rasch-Olsen | |
4 | 1 | ||
5 | |||
6 | |||
7 | 26 | Christian Skarby | |
8 | 25 | Niels Petter Rasch-Olsen | h2. Background |
9 | |||
10 | pylibdv is a project for one of my university courses; "INF5660 - Advanced problem solving with high level languages":http://www.uio.no/studier/emner/matnat/ifi/INF5660/index-eng.xml. |
||
11 | |||
12 | pylibdv is a python wrapper for "libdv":http://libdv.sourceforge.net/. |
||
13 | |||
14 | 1 | From libdv home page: "libdv is a software codec for DV video, the encoding format used by most digital camcorders, typically those that support the IEEE 1394 Firewire or i.Link) interface. Libdv was developed according to the official standards for DV video: IEC 61834 and SMPTE 314M." |
|
15 | |||
16 | 25 | Niels Petter Rasch-Olsen | |
17 | h2. Download |
||
18 | |||
19 | 27 | Christian Skarby | You can find the project as pylibdv-0.1.tar.gz here: source:/download/pylibdv-0.1.tar.gz |
20 | 25 | Niels Petter Rasch-Olsen | |
21 | h2. Overview of package |
||
22 | |||
23 | <pre> |
||
24 | 1 | pylibdv-0.1/src/pylibdv.c |
|
25 | pylibdv-0.1/src/pylibdv.h |
||
26 | pylibdv-0.1/frame_viewer/frame-viewer.py |
||
27 | 16 | Niels Petter Rasch-Olsen | pylibdv-0.1/example/parse_decode.py |
28 | 1 | pylibdv-0.1/dv/test.dv |
|
29 | 15 | Niels Petter Rasch-Olsen | pylibdv-0.1/testing.py |
30 | 1 | pylibdv-0.1/setup.py |
|
31 | pylibdv-0.1/README |
||
32 | 25 | Niels Petter Rasch-Olsen | </pre> |
33 | 1 | ||
34 | 25 | Niels Petter Rasch-Olsen | |
35 | h2. Setup |
||
36 | |||
37 | 1 | use setup.py to install package. |
|
38 | Please note! If you can't get root acces, but want to build, and try the examples (frame-viewer.py and parse_decode.py) simply copy the .so file into those folder after building. |
||
39 | 25 | Niels Petter Rasch-Olsen | <pre> |
40 | 1 | pylibdv-0.1/python setup.py build (will create a build directory, inside the arcitecthure directory you will find the shared object file pylibdv.so) |
|
41 | pylibdv-0.1/python setup.py install (requires root) |
||
42 | 25 | Niels Petter Rasch-Olsen | </pre> |
43 | 1 | ||
44 | 25 | Niels Petter Rasch-Olsen | |
45 | h2. Testing |
||
46 | |||
47 | 1 | To run the tests simply use pylibdv-0.1/python testing.py |
|
48 | |||
49 | 27 | Christian Skarby | Uses "doctest":http://docs.python.org/lib/module-doctest.html. It will search for pieces of text that look like interactive Python sessions, and then executes those sessions to verify that they work exactly as shown. See "Known Bugs":https://dev.interhost.no/projects/pylibdv/wiki#Known-bugs for more information. |
50 | 1 | ||
51 | |||
52 | 25 | Niels Petter Rasch-Olsen | h2. Requirements |
53 | |||
54 | libdv 1.4 (works with debian package 0.104-2 from debian repository) |
||
55 | |||
56 | python >= 2.4 (testing.py won't work with 2.3, doctest will fail due to a bug in 2.3) |
||
57 | |||
58 | gcc |
||
59 | |||
60 | |||
61 | |||
62 | h2. Known bugs |
||
63 | |||
64 | 1 | libdv seg-faults on some versions of the libdv library. There seems to be a bug in the asm-optimization, so a quick work-around if this occurs is to turn off asm-optimization. |
|
65 | |||
66 | The doctest suite doesn't seem to find the two tests belonging to the Decoder, only the pylibdv tests are performed. |
||
67 | |||
68 | |||
69 | 25 | Niels Petter Rasch-Olsen | h2. Progress |
70 | |||
71 | So far the following is available: |
||
72 | |||
73 | |||
74 | 1 | pylibdv: |
|
75 | Constants: |
||
76 | 25 | Niels Petter Rasch-Olsen | DV_QUALITY_BEST |
77 | |||
78 | DV_QUALITY_FASTEST |
||
79 | |||
80 | DV_QUALITY_COLOR |
||
81 | |||
82 | DV_QUALITY_DC |
||
83 | |||
84 | DV_QUALITY_AC_1 |
||
85 | |||
86 | DV_QUALITY_AC_2 |
||
87 | |||
88 | DV_QUALITY_AC_MASK |
||
89 | |||
90 | e_dv_color_rgb |
||
91 | |||
92 | e_dv_color_yuv |
||
93 | |||
94 | e_dv_color_bgr0 |
||
95 | |||
96 | 10 | Niels Petter Rasch-Olsen | Object: |
97 | 25 | Niels Petter Rasch-Olsen | Decoder |
98 | |||
99 | 8 | Niels Petter Rasch-Olsen | Methods: |
100 | 25 | Niels Petter Rasch-Olsen | parse_header() |
101 | |||
102 | decode_full_frame() |
||
103 | |||
104 | 7 | Niels Petter Rasch-Olsen | Data: |
105 | 25 | Niels Petter Rasch-Olsen | frame_size (read only) |
106 | 8 | Niels Petter Rasch-Olsen | |
107 | 25 | Niels Petter Rasch-Olsen | width (read only) |
108 | 7 | Niels Petter Rasch-Olsen | |
109 | 25 | Niels Petter Rasch-Olsen | length (read only) |
110 | |||
111 | quality (read & write) |
||
112 | |||
113 | |||
114 | |||
115 | 7 | Niels Petter Rasch-Olsen | This project is ongoing and most functions will be wrapped by the end of the summer (depending on need). |
116 | 9 | Niels Petter Rasch-Olsen | |
117 | |||
118 | 7 | Niels Petter Rasch-Olsen | |
119 | 25 | Niels Petter Rasch-Olsen | |
120 | h2. Simple example |
||
121 | |||
122 | <pre> |
||
123 | 9 | Niels Petter Rasch-Olsen | import pylibdv |
124 | |||
125 | 4 | Niels Petter Rasch-Olsen | decoder = pylibdv.Decoder(ignored=1, clamp_luma=1, clamp_chroma=1) |
126 | 9 | Niels Petter Rasch-Olsen | |
127 | file = open("somedvfile.dv,"r") |
||
128 | framebuffer = file.read(120000) # Just enough to make sure |
||
129 | |||
130 | 8 | Niels Petter Rasch-Olsen | decoder.parse_header(framebuffer) |
131 | 1 | ||
132 | # Now we can get some information about the video |
||
133 | frame_size = decoder.frame_size |
||
134 | width = decoder.width |
||
135 | height = decoder.height |
||
136 | |||
137 | file.seek(0) #Back to start |
||
138 | framebuffer = file.read(frame_size) |
||
139 | rgb_buffer = decoder.decode_full_frame(framebuffer) |
||
140 | #Now the rgb buffer can be drawn to screen, check out gtk package |
||
141 | 25 | Niels Petter Rasch-Olsen | </pre> |
142 | 1 | ||
143 | |||
144 | Enjoy! |
||
145 | 25 | Niels Petter Rasch-Olsen | |
146 | 26 | Christian Skarby | "Niels Petter Rasch-Olsen":mailto:nielsr@ifi.uio.no |