Prosjekt

Generell

Profil

Actions

Welcome to pylibdv-0.1

Background

pylibdv is a project for one of my university courses; INF5660 - Advanced problem solving with high level languages.

pylibdv is a python wrapper for libdv.

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."

Download

You can find the project as pylibdv-0.1.tar.gz here: source:/download/pylibdv-0.1.tar.gz

Overview of package

pylibdv-0.1/src/pylibdv.c
pylibdv-0.1/src/pylibdv.h
pylibdv-0.1/frame_viewer/frame-viewer.py
pylibdv-0.1/example/parse_decode.py
pylibdv-0.1/dv/test.dv
pylibdv-0.1/testing.py
pylibdv-0.1/setup.py
pylibdv-0.1/README

Setup

use setup.py to install package.
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.

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)
pylibdv-0.1/python setup.py install (requires root)

Testing

To run the tests simply use pylibdv-0.1/python testing.py

Uses doctest. 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 for more information.

Requirements

libdv 1.4 (works with debian package 0.104-2 from debian repository)

python >= 2.4 (testing.py won't work with 2.3, doctest will fail due to a bug in 2.3)

gcc

Known bugs

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.

The doctest suite doesn't seem to find the two tests belonging to the Decoder, only the pylibdv tests are performed.

Progress

So far the following is available:

pylibdv:
Constants:
DV_QUALITY_BEST

DV_QUALITY_FASTEST
DV_QUALITY_COLOR
DV_QUALITY_DC
DV_QUALITY_AC_1
DV_QUALITY_AC_2
DV_QUALITY_AC_MASK
e_dv_color_rgb
e_dv_color_yuv
e_dv_color_bgr0
Object:
Decoder
Methods:
parse_header()
decode_full_frame()
Data:
frame_size (read only)
width (read only)
length (read only)
quality (read & write)

This project is ongoing and most functions will be wrapped by the end of the summer (depending on need).

Simple example

import pylibdv

decoder = pylibdv.Decoder(ignored=1, clamp_luma=1, clamp_chroma=1) 

file = open("somedvfile.dv,"r")
framebuffer = file.read(120000) # Just enough to make sure

decoder.parse_header(framebuffer)

# Now we can get some information about the video
frame_size = decoder.frame_size
width = decoder.width
height = decoder.height

file.seek(0) #Back to start
framebuffer = file.read(frame_size)
rgb_buffer = decoder.decode_full_frame(framebuffer)
#Now the rgb buffer can be drawn to screen, check out gtk package

Enjoy!

Niels Petter Rasch-Olsen

Oppdatert av Christian Skarby for nesten 13 år siden · 27 revisions