27 #include <libraw1394/raw1394.h> 
   28 #include <libavc1394/avc1394.h> 
   29 #include <libavc1394/rom1394.h> 
   30 #include <libiec61883/iec61883.h> 
   36 #define THREADS HAVE_PTHREADS 
   42 #define MOTDCT_SPEC_ID      0x00005068 
   43 #define IEC61883_AUTO       0 
   45 #define IEC61883_HDV        2 
   99                              int complete, 
void *callback_data)
 
  129     memcpy(packet->
buf, data, length);
 
  159         while ((result = poll(&dv->
raw1394_poll, 1, 200)) < 0) {
 
  160             if (!(errno == EAGAIN || errno == EINTR)) {
 
  169             raw1394_loop_iterate(dv->
raw1394);
 
  201                                     packet->
buf, packet->
len, -1);
 
  236     struct raw1394_portinfo pinf[16];
 
  237     rom1394_directory rom_dir;
 
  250     dv->
raw1394 = raw1394_new_handle();
 
  257     if ((nb_ports = raw1394_get_port_info(dv->
raw1394, pinf, 16)) < 0) {
 
  262     inport = strtol(context->
filename, &endptr, 10);
 
  263     if (endptr != context->
filename && *endptr == 
'\0') {
 
  266         nb_ports = inport + 1;
 
  267     } 
else if (strcmp(context->
filename, 
"auto")) {
 
  269                "\"auto\" for auto-detection, or the port number.\n", context->
filename);
 
  274         if (sscanf(dv->
device_guid, 
"%"SCNu64, &guid) != 1) {
 
  281     for (; j < nb_ports && port==-1; ++j) {
 
  282         raw1394_destroy_handle(dv->
raw1394);
 
  284         if (!(dv->
raw1394 = raw1394_new_handle_on_port(j))) {
 
  289         for (i=0; i<raw1394_get_nodecount(dv->
raw1394); ++i) {
 
  294                 if (guid == rom1394_get_guid(dv->
raw1394, i)) {
 
  303                 if (rom1394_get_directory(dv->
raw1394, i, &rom_dir) < 0)
 
  305                 if (((rom1394_get_node_type(&rom_dir) == ROM1394_NODE_TYPE_AVC) &&
 
  306                      avc1394_check_subunit_type(dv->
raw1394, i, AVC1394_SUBUNIT_TYPE_VCR)) ||
 
  308                     rom1394_free_directory(&rom_dir);
 
  313                 rom1394_free_directory(&rom_dir);
 
  325     iec61883_cmp_normalize_output(dv->
raw1394, 0xffc0 | dv->
node);
 
  330         response = avc1394_transaction(dv->
raw1394, dv->
node,
 
  331                                        AVC1394_CTYPE_STATUS |
 
  332                                        AVC1394_SUBUNIT_TYPE_TAPE_RECORDER |
 
  333                                        AVC1394_SUBUNIT_ID_0 |
 
  334                                        AVC1394_VCR_COMMAND_OUTPUT_SIGNAL_MODE |
 
  336         response = AVC1394_GET_OPERAND0(response);
 
  337         dv->
type = (response == 0x10 || response == 0x90 || response == 0x1A || response == 0x9A) ?
 
  344                                        raw1394_get_local_id(dv->
raw1394),
 
  384     dv->
raw1394_poll.events = POLLIN | POLLERR | POLLHUP | POLLPRI;
 
  406     raw1394_destroy_handle(dv->
raw1394);
 
  466                             raw1394_get_local_id(dv->
raw1394),
 
  469     raw1394_destroy_handle(dv->
raw1394);
 
  475     { 
"dvtype", 
"override autodetection of DV/HDV", offsetof(
struct iec61883_data, 
type), 
AV_OPT_TYPE_INT, {.i64 = 
IEC61883_AUTO}, 
IEC61883_AUTO, 
IEC61883_HDV, 
AV_OPT_FLAG_DECODING_PARAM, 
"dvtype" },
 
int bandwidth
returned by libiec61883 
 
static av_always_inline int pthread_mutex_destroy(pthread_mutex_t *mutex)
 
int len
size of buffer allocated 
 
#define pthread_mutex_lock(a)
 
static av_always_inline int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex)
 
ptrdiff_t const GLvoid * data
 
static int iec61883_parse_queue_hdv(struct iec61883_data *dv, AVPacket *pkt)
 
#define LIBAVUTIL_VERSION_INT
 
MpegTSContext * avpriv_mpegts_parse_open(AVFormatContext *s)
 
static const AVOption options[]
 
static int iec61883_read_packet(AVFormatContext *context, AVPacket *pkt)
 
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
 
int(* parse_queue)(struct iec61883_data *dv, AVPacket *pkt)
Parse function for DV/HDV differs, so this is set before packets arrive. 
 
static const AVClass iec61883_class
 
DVPacket * queue_first
first element of packet queue 
 
static av_always_inline int pthread_cond_destroy(pthread_cond_t *cond)
 
For DV, one packet corresponds exactly to one frame. 
 
int(* cond)(enum AVPixelFormat pix_fmt)
 
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
 
int input_port
returned by libiec61883 
 
struct DVPacket * next
next DVPacket 
 
raw1394handle_t raw1394
handle for libraw1394 
 
AVInputFormat ff_iec61883_demuxer
 
MpegTSContext * mpeg_demux
generic HDV muxing/demuxing context 
 
struct pollfd raw1394_poll
to poll for new data from libraw1394 
 
AVStream * avformat_new_stream(AVFormatContext *s, const AVCodec *c)
Add a new stream to a media file. 
 
int packets
Number of packets queued. 
 
int receive_error
Set in receive task in case of error. 
 
iec61883_dv_fb_t iec61883_dv
handle for libiec61883 when used with DV 
 
Main libavdevice API header. 
 
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered. 
 
static void * iec61883_receive_task(void *opaque)
 
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
 
static int iec61883_close(AVFormatContext *context)
 
static int iec61883_callback(unsigned char *data, int length, int complete, void *callback_data)
 
iec61883_mpeg2_t iec61883_mpeg2
handle for libiec61883 when used with HDV 
 
char filename[1024]
input or output filename 
 
char * device_guid
to select one of multiple DV devices 
 
uint8_t * buf
actual buffer data 
 
static av_always_inline int pthread_join(pthread_t thread, void **value_ptr)
 
static av_always_inline int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr)
 
#define pthread_mutex_unlock(a)
 
static pthread_mutex_t * mutex
 
static int iec61883_parse_queue_dv(struct iec61883_data *dv, AVPacket *pkt)
 
DVDemuxContext * dv_demux
generic DV muxing/demuxing context 
 
static av_always_inline int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg)
 
#define AV_LOG_INFO
Standard information. 
 
int node
returned by libiec61883 
 
DVPacket * queue_last
last element of packet queue 
 
Describe the class of an AVClass context structure. 
 
int type
Stream type, to distinguish DV/HDV. 
 
int receiving
True as soon data from device available. 
 
#define AV_OPT_FLAG_DECODING_PARAM
a generic parameter which can be set by the user for demuxing or decoding 
 
int avpriv_mpegts_parse_packet(MpegTSContext *ts, AVPacket *pkt, const uint8_t *buf, int len)
 
static int iec61883_read_header(AVFormatContext *context)
 
int output_port
returned by libiec61883 
 
static av_always_inline int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr)
 
int channel
returned by libiec61883 
 
static av_always_inline int pthread_cond_broadcast(pthread_cond_t *cond)
 
void * priv_data
Format private data. 
 
int thread_loop
Condition for thread while-loop. 
 
int max_packets
Max. number of packets in queue. 
 
int eof
True as soon as no more data available. 
 
void avpriv_mpegts_parse_close(MpegTSContext *ts)
 
This structure stores compressed data.