# Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import glob, os
import numpy as np

# Dimension padding/unpadding function for converting points matrices to
# the OpenCV format (channel-based).
def Pad(x):
    return np.expand_dims(x, axis=0)


def Unpad(x):
    return np.squeeze(x)


class Pod(object):
    '''A POD (plain-old-data) object containing arbitrary fields.'''
    def __init__(self, **args):
        self.__dict__.update(args)

    def __repr__(self):
        '''Returns a representation of the object, including its properties.'''
        return (self.__class__.__name__ + '(' +
        ', '.join('%s=%s' % (k, v) for k, v in sorted(self.__dict__.items())
                  if not k.startswith('_')) + ')')


def find_camera():
    """
    Find a V4L camera device.

    @return (device_name, device_index). If no camera is found, (None, None).
    """
    cameras = [os.path.basename(camera) for camera in
               glob.glob('/sys/bus/usb/drivers/uvcvideo/*/video4linux/video*')]
    if not cameras:
        return None, None
    camera = cameras[0]
    return camera, int(camera[5:])