Code style cleanup / honored 80 column line length limit. Modified FireWireDVAddOn to use BObjectList.
Feel free to chime in if I missed any style violations. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28000 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -6,6 +6,8 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "FireWireCard.h"
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@@ -16,7 +18,6 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
||||||
#include "FireWireCard.h"
|
|
||||||
#include "glue.h"
|
#include "glue.h"
|
||||||
|
|
||||||
#define TAG (1<<6)
|
#define TAG (1<<6)
|
||||||
@@ -79,11 +80,11 @@ struct mpeg_pldt {
|
|||||||
#define MPEG_RBUFSIZE (MPEG_PSIZE * MPEG_NPACKET_R)
|
#define MPEG_RBUFSIZE (MPEG_PSIZE * MPEG_NPACKET_R)
|
||||||
|
|
||||||
|
|
||||||
FireWireCard::FireWireCard(const char *path)
|
FireWireCard::FireWireCard(const char* path)
|
||||||
: fInitStatus(B_OK)
|
: fInitStatus(B_OK),
|
||||||
, fDev(-1)
|
fDev(-1),
|
||||||
, fBuf(NULL)
|
fBuf(NULL),
|
||||||
, fPad(NULL)
|
fPad(NULL)
|
||||||
{
|
{
|
||||||
printf("FireWireCard opening %s\n", path);
|
printf("FireWireCard opening %s\n", path);
|
||||||
|
|
||||||
@@ -111,7 +112,7 @@ FireWireCard::InitCheck()
|
|||||||
|
|
||||||
|
|
||||||
ssize_t
|
ssize_t
|
||||||
FireWireCard::Read(void **data)
|
FireWireCard::Read(void** data)
|
||||||
{
|
{
|
||||||
if (fFormat == FMT_MPEGTS)
|
if (fFormat == FMT_MPEGTS)
|
||||||
return MpegtsRead(data);
|
return MpegtsRead(data);
|
||||||
@@ -121,7 +122,7 @@ FireWireCard::Read(void **data)
|
|||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
FireWireCard::Extract(void *dest, void **src, ssize_t *sizeUsed)
|
FireWireCard::Extract(void* dest, void** src, ssize_t* sizeUsed)
|
||||||
{
|
{
|
||||||
if (fFormat == FMT_MPEGTS)
|
if (fFormat == FMT_MPEGTS)
|
||||||
return MpegtsExtract(dest, src, sizeUsed);
|
return MpegtsExtract(dest, src, sizeUsed);
|
||||||
@@ -131,7 +132,7 @@ FireWireCard::Extract(void *dest, void **src, ssize_t *sizeUsed)
|
|||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
FireWireCard::GetBufInfo(size_t *rbufsize, int *rcount)
|
FireWireCard::GetBufInfo(size_t* rbufsize, int* rcount)
|
||||||
{
|
{
|
||||||
*rbufsize = fRbufSize;
|
*rbufsize = fRbufSize;
|
||||||
*rcount = fRcount;
|
*rcount = fRcount;
|
||||||
@@ -141,12 +142,13 @@ FireWireCard::GetBufInfo(size_t *rbufsize, int *rcount)
|
|||||||
status_t
|
status_t
|
||||||
FireWireCard::DetectRecvFn()
|
FireWireCard::DetectRecvFn()
|
||||||
{
|
{
|
||||||
char *buf, ich = TAG | CHANNEL;
|
char* buf;
|
||||||
|
char ich = TAG | CHANNEL;
|
||||||
struct fw_isochreq isoreq;
|
struct fw_isochreq isoreq;
|
||||||
struct fw_isobufreq bufreq;
|
struct fw_isobufreq bufreq;
|
||||||
int len;
|
int len;
|
||||||
u_int32_t *ptr;
|
u_int32_t* ptr;
|
||||||
struct ciphdr *ciph;
|
struct ciphdr* ciph;
|
||||||
|
|
||||||
bufreq.rx.nchunk = 8;
|
bufreq.rx.nchunk = 8;
|
||||||
bufreq.rx.npacket = 16;
|
bufreq.rx.npacket = 16;
|
||||||
@@ -164,12 +166,12 @@ FireWireCard::DetectRecvFn()
|
|||||||
if (ioctl(fDev, FW_SRSTREAM, &isoreq) < 0)
|
if (ioctl(fDev, FW_SRSTREAM, &isoreq) < 0)
|
||||||
return errno;
|
return errno;
|
||||||
|
|
||||||
buf = (char *)malloc(1024*16);
|
buf = (char*)malloc(1024*16);
|
||||||
len = read(fDev, buf, 1024*16);
|
len = read(fDev, buf, 1024*16);
|
||||||
if (len < 0)
|
if (len < 0)
|
||||||
return errno;
|
return errno;
|
||||||
ptr = (u_int32_t *) buf;
|
ptr = (u_int32_t*) buf;
|
||||||
ciph = (struct ciphdr *)(ptr + 1);
|
ciph = (struct ciphdr*)(ptr + 1);
|
||||||
|
|
||||||
switch(ciph->fmt) {
|
switch(ciph->fmt) {
|
||||||
case CIP_FMT_DVCR:
|
case CIP_FMT_DVCR:
|
||||||
@@ -197,7 +199,7 @@ FireWireCard::DetectRecvFn()
|
|||||||
|
|
||||||
|
|
||||||
ssize_t
|
ssize_t
|
||||||
FireWireCard::DvRead(void **buffer)
|
FireWireCard::DvRead(void** buffer)
|
||||||
{
|
{
|
||||||
struct fw_isochreq isoreq;
|
struct fw_isochreq isoreq;
|
||||||
struct fw_isobufreq bufreq;
|
struct fw_isobufreq bufreq;
|
||||||
@@ -234,30 +236,30 @@ FireWireCard::DvRead(void **buffer)
|
|||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
FireWireCard::DvExtract(void *dest, void **src, ssize_t *sizeUsed)
|
FireWireCard::DvExtract(void* dest, void** src, ssize_t* sizeUsed)
|
||||||
{
|
{
|
||||||
struct dvdbc *dv;
|
struct dvdbc* dv;
|
||||||
struct ciphdr *ciph;
|
struct ciphdr* ciph;
|
||||||
struct fw_pkt *pkt;
|
struct fw_pkt* pkt;
|
||||||
u_int32_t *ptr;
|
u_int32_t* ptr;
|
||||||
int nblocks[] = {250 /* NTSC */, 300 /* PAL */};
|
int nblocks[] = {250 /* NTSC */, 300 /* PAL */};
|
||||||
int npad, k, m, system = -1, nb;
|
int npad, k, m, system = -1, nb;
|
||||||
|
|
||||||
k = m = 0;
|
k = m = 0;
|
||||||
ptr = (u_int32_t *) (*src);
|
ptr = (u_int32_t*) (*src);
|
||||||
|
|
||||||
pkt = (struct fw_pkt *) ptr;
|
pkt = (struct fw_pkt*) ptr;
|
||||||
ciph = (struct ciphdr *)(ptr + 1); /* skip iso header */
|
ciph = (struct ciphdr*)(ptr + 1); /* skip iso header */
|
||||||
if (ciph->fmt != CIP_FMT_DVCR) {
|
if (ciph->fmt != CIP_FMT_DVCR) {
|
||||||
fprintf(stderr, "unknown format 0x%x", ciph->fmt);
|
fprintf(stderr, "unknown format 0x%x", ciph->fmt);
|
||||||
return B_ERROR;
|
return B_ERROR;
|
||||||
}
|
}
|
||||||
ptr = (u_int32_t *) (ciph + 1); /* skip cip header */
|
ptr = (u_int32_t*) (ciph + 1); /* skip cip header */
|
||||||
if (pkt->mode.stream.len <= sizeof(struct ciphdr))
|
if (pkt->mode.stream.len <= sizeof(struct ciphdr))
|
||||||
/* no payload */
|
/* no payload */
|
||||||
return B_ERROR;
|
return B_ERROR;
|
||||||
for (dv = (struct dvdbc *)ptr;
|
for (dv = (struct dvdbc*)ptr;
|
||||||
(char *)dv < (char *)(ptr + ciph->len);
|
(char*)dv < (char *)(ptr + ciph->len);
|
||||||
dv+=6) {
|
dv+=6) {
|
||||||
|
|
||||||
if (dv->sct == DV_SCT_HEADER && dv->dseq == 0) {
|
if (dv->sct == DV_SCT_HEADER && dv->dseq == 0) {
|
||||||
@@ -282,7 +284,7 @@ FireWireCard::DvExtract(void *dest, void **src, ssize_t *sizeUsed)
|
|||||||
npad);
|
npad);
|
||||||
npad *= DV_DSIZE;
|
npad *= DV_DSIZE;
|
||||||
memcpy(dest, fPad, npad);
|
memcpy(dest, fPad, npad);
|
||||||
dest = (char *)dest + npad;
|
dest = (char*)dest + npad;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
k++;
|
k++;
|
||||||
@@ -297,16 +299,16 @@ FireWireCard::DvExtract(void *dest, void **src, ssize_t *sizeUsed)
|
|||||||
continue;
|
continue;
|
||||||
m++;
|
m++;
|
||||||
memcpy(dest, dv, DV_DSIZE);
|
memcpy(dest, dv, DV_DSIZE);
|
||||||
dest = (char *)dest + DV_DSIZE;
|
dest = (char*)dest + DV_DSIZE;
|
||||||
}
|
}
|
||||||
ptr = (u_int32_t *)dv;
|
ptr = (u_int32_t*)dv;
|
||||||
*src = ptr;
|
*src = ptr;
|
||||||
return B_OK;
|
return B_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
ssize_t
|
ssize_t
|
||||||
FireWireCard::MpegtsRead(void **buffer)
|
FireWireCard::MpegtsRead(void** buffer)
|
||||||
{
|
{
|
||||||
struct fw_isochreq isoreq;
|
struct fw_isochreq isoreq;
|
||||||
struct fw_isobufreq bufreq;
|
struct fw_isobufreq bufreq;
|
||||||
@@ -344,20 +346,20 @@ FireWireCard::MpegtsRead(void **buffer)
|
|||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
FireWireCard::MpegtsExtract(void *dest, void **src, ssize_t *sizeUsed)
|
FireWireCard::MpegtsExtract(void* dest, void** src, ssize_t* sizeUsed)
|
||||||
{
|
{
|
||||||
uint32_t *ptr;
|
uint32_t* ptr;
|
||||||
struct fw_pkt *pkt;
|
struct fw_pkt* pkt;
|
||||||
struct ciphdr *ciph;
|
struct ciphdr* ciph;
|
||||||
struct mpeg_pldt *pld;
|
struct mpeg_pldt* pld;
|
||||||
int pkt_size, startwr;
|
int pkt_size, startwr;
|
||||||
|
|
||||||
ptr = (uint32_t *)(*src);
|
ptr = (uint32_t *)(*src);
|
||||||
startwr = 0;
|
startwr = 0;
|
||||||
|
|
||||||
pkt = (struct fw_pkt *) ptr;
|
pkt = (struct fw_pkt*) ptr;
|
||||||
/* there is no CRC in the 1394 header */
|
/* there is no CRC in the 1394 header */
|
||||||
ciph = (struct ciphdr *)(ptr + 1); /* skip iso header */
|
ciph = (struct ciphdr*)(ptr + 1); /* skip iso header */
|
||||||
if (ciph->fmt != CIP_FMT_MPEG) {
|
if (ciph->fmt != CIP_FMT_MPEG) {
|
||||||
fprintf(stderr, "unknown format 0x%x", ciph->fmt);
|
fprintf(stderr, "unknown format 0x%x", ciph->fmt);
|
||||||
return B_ERROR;
|
return B_ERROR;
|
||||||
@@ -367,7 +369,7 @@ FireWireCard::MpegtsExtract(void *dest, void **src, ssize_t *sizeUsed)
|
|||||||
"fn=3 is supported)", ciph->fn);
|
"fn=3 is supported)", ciph->fn);
|
||||||
return B_ERROR;
|
return B_ERROR;
|
||||||
}
|
}
|
||||||
ptr = (uint32_t *) (ciph + 1); /* skip cip header */
|
ptr = (uint32_t*) (ciph + 1); /* skip cip header */
|
||||||
|
|
||||||
if (pkt->mode.stream.len <= sizeof(struct ciphdr)) {
|
if (pkt->mode.stream.len <= sizeof(struct ciphdr)) {
|
||||||
/* no payload */
|
/* no payload */
|
||||||
@@ -381,12 +383,12 @@ FireWireCard::MpegtsExtract(void *dest, void **src, ssize_t *sizeUsed)
|
|||||||
startwr = 1;
|
startwr = 1;
|
||||||
/* Read out all the MPEG TS data blocks from current packet */
|
/* Read out all the MPEG TS data blocks from current packet */
|
||||||
for (pld = (struct mpeg_pldt *)ptr;
|
for (pld = (struct mpeg_pldt *)ptr;
|
||||||
(intptr_t)pld < (intptr_t)((char *)ptr +
|
(intptr_t)pld < (intptr_t)((char*)ptr +
|
||||||
pkt->mode.stream.len - sizeof(struct ciphdr));
|
pkt->mode.stream.len - sizeof(struct ciphdr));
|
||||||
pld++) {
|
pld++) {
|
||||||
if (startwr == 1) {
|
if (startwr == 1) {
|
||||||
memcpy(dest, pld->payload, sizeof(pld->payload));
|
memcpy(dest, pld->payload, sizeof(pld->payload));
|
||||||
dest = (char *)dest + sizeof(pld->payload);
|
dest = (char*)dest + sizeof(pld->payload);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -394,7 +396,8 @@ next:
|
|||||||
/* CRCs are removed from both header and trailer
|
/* CRCs are removed from both header and trailer
|
||||||
so that only 4 bytes of 1394 header remains */
|
so that only 4 bytes of 1394 header remains */
|
||||||
pkt_size = pkt->mode.stream.len + 4;
|
pkt_size = pkt->mode.stream.len + 4;
|
||||||
ptr = (uint32_t *)((intptr_t)pkt + pkt_size);
|
ptr = (uint32_t*)((intptr_t)pkt + pkt_size);
|
||||||
*src = ptr;
|
*src = ptr;
|
||||||
return B_OK;
|
return B_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,35 +9,37 @@
|
|||||||
#ifndef __FIREWIRE_CARD_H
|
#ifndef __FIREWIRE_CARD_H
|
||||||
#define __FIREWIRE_CARD_H
|
#define __FIREWIRE_CARD_H
|
||||||
|
|
||||||
|
#include <SupportDefs.h>
|
||||||
|
|
||||||
class FireWireCard
|
class FireWireCard
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
enum fmt_type {
|
enum fmt_type {
|
||||||
FMT_MPEGTS = 0,
|
FMT_MPEGTS = 0,
|
||||||
FMT_DV = 1,
|
FMT_DV = 1,
|
||||||
};
|
};
|
||||||
FireWireCard(const char *path);
|
FireWireCard(const char* path);
|
||||||
~FireWireCard();
|
~FireWireCard();
|
||||||
|
|
||||||
status_t InitCheck();
|
status_t InitCheck();
|
||||||
|
|
||||||
status_t DetectRecvFn();
|
status_t DetectRecvFn();
|
||||||
ssize_t Read(void **buffer);
|
ssize_t Read(void** buffer);
|
||||||
status_t Extract(void *dest, void **src, ssize_t *sizeUsed);
|
status_t Extract(void* dest, void** src, ssize_t* sizeUsed);
|
||||||
|
|
||||||
void GetBufInfo(size_t *rbufsize, int *rcount);
|
void GetBufInfo(size_t* rbufsize, int* rcount);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ssize_t DvRead(void **buffer);
|
ssize_t DvRead(void** buffer);
|
||||||
status_t DvExtract(void *dest, void **src, ssize_t *sizeUsed);
|
status_t DvExtract(void* dest, void** src, ssize_t* sizeUsed);
|
||||||
ssize_t MpegtsRead(void **buffer);
|
ssize_t MpegtsRead(void** buffer);
|
||||||
status_t MpegtsExtract(void *dest, void **src, ssize_t *sizeUsed);
|
status_t MpegtsExtract(void* dest, void** src,
|
||||||
|
ssize_t* sizeUsed);
|
||||||
|
|
||||||
status_t fInitStatus;
|
status_t fInitStatus;
|
||||||
int fDev;
|
int fDev;
|
||||||
void *fBuf;
|
void* fBuf;
|
||||||
void *fPad;
|
void* fPad;
|
||||||
size_t fRbufSize;
|
size_t fRbufSize;
|
||||||
int fRcount;
|
int fRcount;
|
||||||
fmt_type fFormat;
|
fmt_type fFormat;
|
||||||
@@ -45,3 +47,4 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -15,6 +15,7 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
|
||||||
#include <Alert.h>
|
#include <Alert.h>
|
||||||
#include <Directory.h>
|
#include <Directory.h>
|
||||||
#include <Entry.h>
|
#include <Entry.h>
|
||||||
@@ -24,35 +25,38 @@
|
|||||||
|
|
||||||
struct device_info
|
struct device_info
|
||||||
{
|
{
|
||||||
FireWireCard * card;
|
FireWireCard* card;
|
||||||
char name[16];
|
char name[16];
|
||||||
media_format in_formats[1];
|
media_format in_formats[1];
|
||||||
media_format out_formats[1];
|
media_format out_formats[1];
|
||||||
flavor_info flavor;
|
flavor_info flavor;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern "C" BMediaAddOn *
|
extern "C" BMediaAddOn*
|
||||||
make_media_addon(image_id id)
|
make_media_addon(image_id id)
|
||||||
{
|
{
|
||||||
CALLED();
|
CALLED();
|
||||||
return new FireWireDVAddOn(id);
|
return new FireWireDVAddOn(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
FireWireDVAddOn::FireWireDVAddOn(image_id id)
|
||||||
|
: BMediaAddOn(id)
|
||||||
|
{
|
||||||
|
CALLED();
|
||||||
|
ScanFolder("/dev/bus/fw");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
FireWireDVAddOn::~FireWireDVAddOn()
|
FireWireDVAddOn::~FireWireDVAddOn()
|
||||||
{
|
{
|
||||||
CALLED();
|
CALLED();
|
||||||
FreeDeviceList();
|
FreeDeviceList();
|
||||||
}
|
}
|
||||||
|
|
||||||
FireWireDVAddOn::FireWireDVAddOn(image_id id)
|
|
||||||
: BMediaAddOn(id)
|
|
||||||
{
|
|
||||||
CALLED();
|
|
||||||
ScanFolder("/dev/bus/fw");
|
|
||||||
}
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
FireWireDVAddOn::InitCheck(const char **out_failure_text)
|
FireWireDVAddOn::InitCheck(const char** out_failure_text)
|
||||||
{
|
{
|
||||||
CALLED();
|
CALLED();
|
||||||
if (!fDeviceList.CountItems()) {
|
if (!fDeviceList.CountItems()) {
|
||||||
@@ -62,6 +66,7 @@ FireWireDVAddOn::InitCheck(const char **out_failure_text)
|
|||||||
return B_OK;
|
return B_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int32
|
int32
|
||||||
FireWireDVAddOn::CountFlavors()
|
FireWireDVAddOn::CountFlavors()
|
||||||
{
|
{
|
||||||
@@ -69,31 +74,36 @@ FireWireDVAddOn::CountFlavors()
|
|||||||
return fDeviceList.CountItems();
|
return fDeviceList.CountItems();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
FireWireDVAddOn::GetFlavorAt(int32 n, const flavor_info **out_info)
|
FireWireDVAddOn::GetFlavorAt(int32 n, const flavor_info** out_info)
|
||||||
{
|
{
|
||||||
CALLED();
|
CALLED();
|
||||||
device_info *dev = (device_info *)fDeviceList.ItemAt(n);
|
device_info* dev = fDeviceList.ItemAt(n);
|
||||||
if (!dev)
|
if (!dev)
|
||||||
return B_ERROR;
|
return B_ERROR;
|
||||||
*out_info = &dev->flavor;
|
*out_info = &dev->flavor;
|
||||||
return B_OK;
|
return B_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
BMediaNode *
|
BMediaNode *
|
||||||
FireWireDVAddOn::InstantiateNodeFor(const flavor_info *info, BMessage *config, status_t *out_error)
|
FireWireDVAddOn::InstantiateNodeFor(const flavor_info* info, BMessage* config,
|
||||||
|
status_t* out_error)
|
||||||
{
|
{
|
||||||
CALLED();
|
CALLED();
|
||||||
device_info *dev = (device_info *)fDeviceList.ItemAt(info->internal_id);
|
device_info* dev = fDeviceList.ItemAt(info->internal_id);
|
||||||
if (!dev || dev->flavor.internal_id != info->internal_id) {
|
if (!dev || dev->flavor.internal_id != info->internal_id) {
|
||||||
*out_error = B_ERROR;
|
*out_error = B_ERROR;
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
*out_error = B_OK;
|
*out_error = B_OK;
|
||||||
|
|
||||||
return new FireWireDVNode(this, dev->name, dev->flavor.internal_id, dev->card);
|
return new FireWireDVNode(this, dev->name, dev->flavor.internal_id,
|
||||||
|
dev->card);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
FireWireDVAddOn::WantsAutoStart()
|
FireWireDVAddOn::WantsAutoStart()
|
||||||
{
|
{
|
||||||
@@ -101,15 +111,18 @@ FireWireDVAddOn::WantsAutoStart()
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
FireWireDVAddOn::AutoStart(int index, BMediaNode **outNode, int32 *outInternalID, bool *outHasMore)
|
FireWireDVAddOn::AutoStart(int index, BMediaNode** outNode,
|
||||||
|
int32* outInternalID, bool* outHasMore)
|
||||||
{
|
{
|
||||||
CALLED();
|
CALLED();
|
||||||
return B_ERROR;
|
return B_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
FireWireDVAddOn::ScanFolder(const char *path)
|
FireWireDVAddOn::ScanFolder(const char* path)
|
||||||
{
|
{
|
||||||
CALLED();
|
CALLED();
|
||||||
BDirectory dir(path);
|
BDirectory dir(path);
|
||||||
@@ -130,10 +143,11 @@ FireWireDVAddOn::ScanFolder(const char *path)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
FireWireDVAddOn::AddDevice(FireWireCard *card, const char *path)
|
FireWireDVAddOn::AddDevice(FireWireCard* card, const char* path)
|
||||||
{
|
{
|
||||||
const char *fwnumber;
|
const char* fwnumber;
|
||||||
|
|
||||||
// get card name, info and type
|
// get card name, info and type
|
||||||
|
|
||||||
@@ -175,9 +189,10 @@ FireWireDVAddOn::AddDevice(FireWireCard *card, const char *path)
|
|||||||
void
|
void
|
||||||
FireWireDVAddOn::FreeDeviceList()
|
FireWireDVAddOn::FreeDeviceList()
|
||||||
{
|
{
|
||||||
device_info *dev;
|
device_info* dev;
|
||||||
while ((dev = (device_info *)fDeviceList.RemoveItem((int32)0))) {
|
while ((dev = fDeviceList.RemoveItemAt(0L))) {
|
||||||
delete dev->card;
|
delete dev->card;
|
||||||
delete dev;
|
delete dev;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,34 +12,37 @@
|
|||||||
#define _FIREWIRE_DV_ADDON_H_
|
#define _FIREWIRE_DV_ADDON_H_
|
||||||
|
|
||||||
#include <MediaAddOn.h>
|
#include <MediaAddOn.h>
|
||||||
|
#include <ObjectList.h>
|
||||||
|
|
||||||
class FireWireCard;
|
class FireWireCard;
|
||||||
|
struct device_info;
|
||||||
|
|
||||||
class FireWireDVAddOn : public BMediaAddOn
|
class FireWireDVAddOn : public BMediaAddOn
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
FireWireDVAddOn(image_id id);
|
FireWireDVAddOn(image_id id);
|
||||||
~FireWireDVAddOn();
|
~FireWireDVAddOn();
|
||||||
|
|
||||||
status_t InitCheck(const char **out_failure_text);
|
status_t InitCheck(const char** out_failure_text);
|
||||||
|
|
||||||
int32 CountFlavors();
|
int32 CountFlavors();
|
||||||
|
|
||||||
status_t GetFlavorAt(int32 n, const flavor_info **out_info);
|
status_t GetFlavorAt(int32 n, const flavor_info** out_info);
|
||||||
|
|
||||||
BMediaNode *InstantiateNodeFor(const flavor_info *info, BMessage *config, status_t *out_error);
|
BMediaNode* InstantiateNodeFor(const flavor_info* info,
|
||||||
|
BMessage* config, status_t* out_error);
|
||||||
|
|
||||||
bool WantsAutoStart();
|
bool WantsAutoStart();
|
||||||
status_t AutoStart(int index, BMediaNode **outNode, int32 *outInternalID, bool *outHasMore);
|
status_t AutoStart(int index, BMediaNode** outNode,
|
||||||
|
int32* outInternalID, bool* outHasMore);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void ScanFolder(const char *path);
|
void ScanFolder(const char* path);
|
||||||
|
void AddDevice(FireWireCard* card, const char* path);
|
||||||
void AddDevice(FireWireCard *card, const char *path);
|
|
||||||
void FreeDeviceList();
|
void FreeDeviceList();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
BList fDeviceList;
|
BObjectList<device_info> fDeviceList;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -8,6 +8,8 @@
|
|||||||
* Copyright (c) 2004-2007 Marcus Overhagen <[email protected]>
|
* Copyright (c) 2004-2007 Marcus Overhagen <[email protected]>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "FireWireDVNode.h"
|
||||||
|
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
@@ -17,18 +19,17 @@
|
|||||||
#include <sys/uio.h>
|
#include <sys/uio.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#include <MediaRoster.h>
|
#include <Autolock.h>
|
||||||
#include <Buffer.h>
|
#include <Buffer.h>
|
||||||
#include <BufferGroup.h>
|
#include <BufferGroup.h>
|
||||||
#include <ParameterWeb.h>
|
|
||||||
#include <TimeSource.h>
|
|
||||||
#include <String.h>
|
|
||||||
#include <Autolock.h>
|
|
||||||
#include <Debug.h>
|
#include <Debug.h>
|
||||||
|
|
||||||
#include <Directory.h>
|
#include <Directory.h>
|
||||||
#include <Entry.h>
|
#include <Entry.h>
|
||||||
|
#include <MediaRoster.h>
|
||||||
|
#include <ParameterWeb.h>
|
||||||
#include <Path.h>
|
#include <Path.h>
|
||||||
|
#include <TimeSource.h>
|
||||||
|
#include <String.h>
|
||||||
|
|
||||||
#include "FireWireDVNode.h"
|
#include "FireWireDVNode.h"
|
||||||
#include "FireWireCard.h"
|
#include "FireWireCard.h"
|
||||||
@@ -42,7 +43,7 @@
|
|||||||
#ifdef TRACE
|
#ifdef TRACE
|
||||||
# undef TRACE
|
# undef TRACE
|
||||||
#endif
|
#endif
|
||||||
#define TRACE_FIREWIRE_NODE
|
//#define TRACE_FIREWIRE_NODE
|
||||||
#ifdef TRACE_FIREWIRE_NODE
|
#ifdef TRACE_FIREWIRE_NODE
|
||||||
# define TRACE(x...) printf(x)
|
# define TRACE(x...) printf(x)
|
||||||
#else
|
#else
|
||||||
@@ -53,20 +54,19 @@
|
|||||||
|
|
||||||
#define M_REFRESH_PARAMETER_WEB (BTimedEventQueue::B_USER_EVENT + 1)
|
#define M_REFRESH_PARAMETER_WEB (BTimedEventQueue::B_USER_EVENT + 1)
|
||||||
|
|
||||||
FireWireDVNode::FireWireDVNode(
|
FireWireDVNode::FireWireDVNode(BMediaAddOn* addon, const char* name,
|
||||||
BMediaAddOn *addon, const char *name,
|
int32 internal_id, FireWireCard* card)
|
||||||
int32 internal_id, FireWireCard *card)
|
: BMediaNode(name),
|
||||||
: BMediaNode(name)
|
BBufferProducer(B_MEDIA_ENCODED_VIDEO),
|
||||||
, BBufferProducer(B_MEDIA_ENCODED_VIDEO)
|
BControllable(),
|
||||||
, BControllable()
|
BMediaEventLooper(),
|
||||||
, BMediaEventLooper()
|
fOutputEnabledEncVideo(false),
|
||||||
, fOutputEnabledEncVideo(false)
|
fCard(card),
|
||||||
, fCard(card)
|
fCaptureThreadsActive(false),
|
||||||
, fCaptureThreadsActive(false)
|
fThreadIdCardReader(-1),
|
||||||
, fThreadIdCardReader(-1)
|
fTerminateThreads(false),
|
||||||
, fTerminateThreads(false)
|
fBufferGroupEncVideo(0),
|
||||||
, fBufferGroupEncVideo(0)
|
fCaptureActive(false)
|
||||||
, fCaptureActive(false)
|
|
||||||
{
|
{
|
||||||
CALLED();
|
CALLED();
|
||||||
|
|
||||||
@@ -92,10 +92,8 @@ FireWireDVNode::~FireWireDVNode()
|
|||||||
|
|
||||||
|
|
||||||
/* BMediaNode */
|
/* BMediaNode */
|
||||||
|
BMediaAddOn*
|
||||||
|
FireWireDVNode::AddOn(int32* internal_id) const
|
||||||
BMediaAddOn *
|
|
||||||
FireWireDVNode::AddOn(int32 *internal_id) const
|
|
||||||
{
|
{
|
||||||
if (internal_id)
|
if (internal_id)
|
||||||
*internal_id = fInternalID;
|
*internal_id = fInternalID;
|
||||||
@@ -104,7 +102,7 @@ FireWireDVNode::AddOn(int32 *internal_id) const
|
|||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
FireWireDVNode::HandleMessage(int32 message, const void *data, size_t size)
|
FireWireDVNode::HandleMessage(int32 message, const void* data, size_t size)
|
||||||
{
|
{
|
||||||
return B_ERROR;
|
return B_ERROR;
|
||||||
}
|
}
|
||||||
@@ -119,7 +117,7 @@ FireWireDVNode::Preroll()
|
|||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
FireWireDVNode::SetTimeSource(BTimeSource *time_source)
|
FireWireDVNode::SetTimeSource(BTimeSource* time_source)
|
||||||
{
|
{
|
||||||
CALLED();
|
CALLED();
|
||||||
}
|
}
|
||||||
@@ -134,8 +132,6 @@ FireWireDVNode::SetRunMode(run_mode mode)
|
|||||||
|
|
||||||
|
|
||||||
/* BMediaEventLooper */
|
/* BMediaEventLooper */
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
FireWireDVNode::NodeRegistered()
|
FireWireDVNode::NodeRegistered()
|
||||||
{
|
{
|
||||||
@@ -156,8 +152,8 @@ FireWireDVNode::NodeRegistered()
|
|||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
FireWireDVNode::HandleEvent(const media_timed_event *event,
|
FireWireDVNode::HandleEvent(const media_timed_event* event,
|
||||||
bigtime_t lateness, bool realTimeEvent)
|
bigtime_t lateness, bool realTimeEvent)
|
||||||
{
|
{
|
||||||
|
|
||||||
switch(event->type)
|
switch(event->type)
|
||||||
@@ -188,12 +184,10 @@ FireWireDVNode::HandleEvent(const media_timed_event *event,
|
|||||||
|
|
||||||
|
|
||||||
/* BBufferProducer */
|
/* BBufferProducer */
|
||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
FireWireDVNode::FormatChangeRequested(const media_source &source,
|
FireWireDVNode::FormatChangeRequested(const media_source& source,
|
||||||
const media_destination &destination, media_format *io_format,
|
const media_destination& destination, media_format* io_format,
|
||||||
int32 *_deprecated_)
|
int32* _deprecated_)
|
||||||
{
|
{
|
||||||
CALLED();
|
CALLED();
|
||||||
|
|
||||||
@@ -203,7 +197,7 @@ FireWireDVNode::FormatChangeRequested(const media_source &source,
|
|||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
FireWireDVNode::GetNextOutput(int32 *cookie, media_output *out_output)
|
FireWireDVNode::GetNextOutput(int32* cookie, media_output* out_output)
|
||||||
{
|
{
|
||||||
CALLED();
|
CALLED();
|
||||||
|
|
||||||
@@ -227,7 +221,7 @@ FireWireDVNode::DisposeOutputCookie(int32 cookie)
|
|||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
FireWireDVNode::SetBufferGroup(const media_source &source, BBufferGroup *group)
|
FireWireDVNode::SetBufferGroup(const media_source& source, BBufferGroup* group)
|
||||||
{
|
{
|
||||||
CALLED();
|
CALLED();
|
||||||
return B_ERROR;
|
return B_ERROR;
|
||||||
@@ -235,9 +229,9 @@ FireWireDVNode::SetBufferGroup(const media_source &source, BBufferGroup *group)
|
|||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
FireWireDVNode::VideoClippingChanged(const media_source &for_source,
|
FireWireDVNode::VideoClippingChanged(const media_source& for_source,
|
||||||
int16 num_shorts, int16 *clip_data,
|
int16 num_shorts, int16* clip_data,
|
||||||
const media_video_display_info &display, int32 *_deprecated_)
|
const media_video_display_info& display, int32* _deprecated_)
|
||||||
{
|
{
|
||||||
CALLED();
|
CALLED();
|
||||||
return B_ERROR;
|
return B_ERROR;
|
||||||
@@ -245,7 +239,7 @@ FireWireDVNode::VideoClippingChanged(const media_source &for_source,
|
|||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
FireWireDVNode::GetLatency(bigtime_t *out_latency)
|
FireWireDVNode::GetLatency(bigtime_t* out_latency)
|
||||||
{
|
{
|
||||||
CALLED();
|
CALLED();
|
||||||
|
|
||||||
@@ -256,7 +250,7 @@ FireWireDVNode::GetLatency(bigtime_t *out_latency)
|
|||||||
|
|
||||||
status_t
|
status_t
|
||||||
FireWireDVNode::FormatSuggestionRequested(
|
FireWireDVNode::FormatSuggestionRequested(
|
||||||
media_type type, int32 quality, media_format *format)
|
media_type type, int32 quality, media_format* format)
|
||||||
{
|
{
|
||||||
CALLED();
|
CALLED();
|
||||||
|
|
||||||
@@ -280,7 +274,8 @@ FireWireDVNode::FormatSuggestionRequested(
|
|||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
FireWireDVNode::FormatProposal(const media_source &source, media_format *format)
|
FireWireDVNode::FormatProposal(const media_source& source,
|
||||||
|
media_format* format)
|
||||||
{
|
{
|
||||||
CALLED();
|
CALLED();
|
||||||
/* The connection process:
|
/* The connection process:
|
||||||
@@ -320,9 +315,9 @@ FireWireDVNode::FormatProposal(const media_source &source, media_format *format)
|
|||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
FireWireDVNode::PrepareToConnect(const media_source &source,
|
FireWireDVNode::PrepareToConnect(const media_source& source,
|
||||||
const media_destination &destination, media_format *format,
|
const media_destination& destination, media_format* format,
|
||||||
media_source *out_source, char *out_name)
|
media_source* out_source, char* out_name)
|
||||||
{
|
{
|
||||||
/* The connection process:
|
/* The connection process:
|
||||||
* BBufferProducer::FormatProposal
|
* BBufferProducer::FormatProposal
|
||||||
@@ -372,9 +367,9 @@ FireWireDVNode::PrepareToConnect(const media_source &source,
|
|||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
FireWireDVNode::Connect(status_t error, const media_source &source,
|
FireWireDVNode::Connect(status_t error, const media_source& source,
|
||||||
const media_destination &destination, const media_format &format,
|
const media_destination& destination, const media_format& format,
|
||||||
char *io_name)
|
char* io_name)
|
||||||
{
|
{
|
||||||
/* The connection process:
|
/* The connection process:
|
||||||
* BBufferProducer::FormatProposal
|
* BBufferProducer::FormatProposal
|
||||||
@@ -417,7 +412,7 @@ FireWireDVNode::Connect(status_t error, const media_source &source,
|
|||||||
|
|
||||||
void
|
void
|
||||||
FireWireDVNode::Disconnect(const media_source &source,
|
FireWireDVNode::Disconnect(const media_source &source,
|
||||||
const media_destination &destination)
|
const media_destination& destination)
|
||||||
{
|
{
|
||||||
CALLED();
|
CALLED();
|
||||||
|
|
||||||
@@ -428,16 +423,16 @@ FireWireDVNode::Disconnect(const media_source &source,
|
|||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
FireWireDVNode::LateNoticeReceived(const media_source &source,
|
FireWireDVNode::LateNoticeReceived(const media_source& source,
|
||||||
bigtime_t how_much, bigtime_t performance_time)
|
bigtime_t how_much, bigtime_t performance_time)
|
||||||
{
|
{
|
||||||
TRACE("FireWireDVNode::LateNoticeReceived %Ld late at %Ld\n", how_much, performance_time);
|
TRACE("FireWireDVNode::LateNoticeReceived %Ld late at %Ld\n", how_much, performance_time);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
FireWireDVNode::EnableOutput(const media_source &source, bool enabled,
|
FireWireDVNode::EnableOutput(const media_source& source, bool enabled,
|
||||||
int32 *_deprecated_)
|
int32* _deprecated_)
|
||||||
{
|
{
|
||||||
CALLED();
|
CALLED();
|
||||||
fOutputEnabledEncVideo = enabled;
|
fOutputEnabledEncVideo = enabled;
|
||||||
@@ -445,9 +440,9 @@ FireWireDVNode::EnableOutput(const media_source &source, bool enabled,
|
|||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
FireWireDVNode::AdditionalBufferRequested(const media_source &source,
|
FireWireDVNode::AdditionalBufferRequested(const media_source& source,
|
||||||
media_buffer_id prev_buffer, bigtime_t prev_time,
|
media_buffer_id prev_buffer, bigtime_t prev_time,
|
||||||
const media_seek_tag *prev_tag)
|
const media_seek_tag* prev_tag)
|
||||||
{
|
{
|
||||||
CALLED();
|
CALLED();
|
||||||
// we don't support offline mode
|
// we don't support offline mode
|
||||||
@@ -456,8 +451,6 @@ FireWireDVNode::AdditionalBufferRequested(const media_source &source,
|
|||||||
|
|
||||||
|
|
||||||
/* FireWireDVNode */
|
/* FireWireDVNode */
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
FireWireDVNode::HandleTimeWarp(bigtime_t performance_time)
|
FireWireDVNode::HandleTimeWarp(bigtime_t performance_time)
|
||||||
{
|
{
|
||||||
@@ -559,7 +552,7 @@ FireWireDVNode::StopCaptureThreads()
|
|||||||
|
|
||||||
|
|
||||||
int32
|
int32
|
||||||
FireWireDVNode::_card_reader_thread_(void *arg)
|
FireWireDVNode::_card_reader_thread_(void* arg)
|
||||||
{
|
{
|
||||||
static_cast<FireWireDVNode *>(arg)->card_reader_thread();
|
static_cast<FireWireDVNode *>(arg)->card_reader_thread();
|
||||||
return 0;
|
return 0;
|
||||||
@@ -585,10 +578,10 @@ FireWireDVNode::card_reader_thread()
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
end = (char *)data + sizeUsed;
|
end = (char*)data + sizeUsed;
|
||||||
|
|
||||||
while (data < end) {
|
while (data < end) {
|
||||||
BBuffer *buf = fBufferGroupEncVideo->RequestBuffer(rbufsize, 10000);
|
BBuffer* buf = fBufferGroupEncVideo->RequestBuffer(rbufsize, 10000);
|
||||||
if (!buf) {
|
if (!buf) {
|
||||||
TRACE("OutVideo: request buffer timout\n");
|
TRACE("OutVideo: request buffer timout\n");
|
||||||
continue;
|
continue;
|
||||||
@@ -608,12 +601,12 @@ FireWireDVNode::card_reader_thread()
|
|||||||
//what should the start_time be?
|
//what should the start_time be?
|
||||||
hdr->start_time = TimeSource()->PerformanceTimeFor(system_time());
|
hdr->start_time = TimeSource()->PerformanceTimeFor(system_time());
|
||||||
|
|
||||||
lock.Lock();
|
fLock.Lock();
|
||||||
if (B_OK != SendBuffer(buf, fOutputEncVideo.destination)) {
|
if (B_OK != SendBuffer(buf, fOutputEncVideo.destination)) {
|
||||||
TRACE("OutVideo: sending buffer failed\n");
|
TRACE("OutVideo: sending buffer failed\n");
|
||||||
buf->Recycle();
|
buf->Recycle();
|
||||||
}
|
}
|
||||||
lock.Unlock();
|
fLock.Unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -631,7 +624,7 @@ FireWireDVNode::RefreshParameterWeb()
|
|||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
FireWireDVNode::SetAboutInfo(BParameterGroup *about)
|
FireWireDVNode::SetAboutInfo(BParameterGroup* about)
|
||||||
{
|
{
|
||||||
//May need more useful infomation?
|
//May need more useful infomation?
|
||||||
about->MakeNullParameter(0, B_MEDIA_NO_TYPE, "FireWireDV media_addon info:", B_GENERIC);
|
about->MakeNullParameter(0, B_MEDIA_NO_TYPE, "FireWireDV media_addon info:", B_GENERIC);
|
||||||
@@ -648,17 +641,17 @@ BParameterWeb *
|
|||||||
FireWireDVNode::CreateParameterWeb()
|
FireWireDVNode::CreateParameterWeb()
|
||||||
{
|
{
|
||||||
/* Set up the parameter web */
|
/* Set up the parameter web */
|
||||||
BParameterWeb *web = new BParameterWeb();
|
BParameterWeb* web = new BParameterWeb();
|
||||||
|
|
||||||
BString name;
|
BString name;
|
||||||
name << Name();
|
name << Name();
|
||||||
|
|
||||||
BParameterGroup *main = web->MakeGroup(name.String());
|
BParameterGroup* main = web->MakeGroup(name.String());
|
||||||
|
|
||||||
if (!fCaptureActive) {
|
if (!fCaptureActive) {
|
||||||
BParameterGroup *info = main->MakeGroup("Info");
|
BParameterGroup* info = main->MakeGroup("Info");
|
||||||
info->MakeNullParameter(0, B_MEDIA_NO_TYPE, info->Name(), B_GENERIC);
|
info->MakeNullParameter(0, B_MEDIA_NO_TYPE, info->Name(), B_GENERIC);
|
||||||
BParameterGroup *about = main->MakeGroup("About");
|
BParameterGroup* about = main->MakeGroup("About");
|
||||||
about->MakeNullParameter(0, B_MEDIA_NO_TYPE, about->Name(), B_GENERIC);
|
about->MakeNullParameter(0, B_MEDIA_NO_TYPE, about->Name(), B_GENERIC);
|
||||||
SetAboutInfo(about);
|
SetAboutInfo(about);
|
||||||
info->MakeNullParameter(0, B_MEDIA_NO_TYPE, "Node is stopped", B_GENERIC);
|
info->MakeNullParameter(0, B_MEDIA_NO_TYPE, "Node is stopped", B_GENERIC);
|
||||||
@@ -666,7 +659,7 @@ FireWireDVNode::CreateParameterWeb()
|
|||||||
return web;
|
return web;
|
||||||
}
|
}
|
||||||
|
|
||||||
BParameterGroup *about = main->MakeGroup("About");
|
BParameterGroup* about = main->MakeGroup("About");
|
||||||
about->MakeNullParameter(0, B_MEDIA_NO_TYPE, about->Name(), B_GENERIC);
|
about->MakeNullParameter(0, B_MEDIA_NO_TYPE, about->Name(), B_GENERIC);
|
||||||
SetAboutInfo(about);
|
SetAboutInfo(about);
|
||||||
|
|
||||||
@@ -675,7 +668,8 @@ FireWireDVNode::CreateParameterWeb()
|
|||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
FireWireDVNode::GetParameterValue(int32 id, bigtime_t *last_change, void *value, size_t *size)
|
FireWireDVNode::GetParameterValue(int32 id, bigtime_t* last_change,
|
||||||
|
void* value, size_t* size)
|
||||||
{
|
{
|
||||||
TRACE("FireWireDVNode::GetParameterValue, id 0x%lx\n", id);
|
TRACE("FireWireDVNode::GetParameterValue, id 0x%lx\n", id);
|
||||||
//do we need Parameter for firewire dv?
|
//do we need Parameter for firewire dv?
|
||||||
@@ -684,9 +678,12 @@ FireWireDVNode::GetParameterValue(int32 id, bigtime_t *last_change, void *value,
|
|||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
FireWireDVNode::SetParameterValue(int32 id, bigtime_t when, const void *value, size_t size)
|
FireWireDVNode::SetParameterValue(int32 id, bigtime_t when, const void* value,
|
||||||
|
size_t size)
|
||||||
{
|
{
|
||||||
TRACE("FireWireDVNode::SetParameterValue, id 0x%lx, size %ld, value 0x%lx\n", id, size, *(const int32 *)value);
|
TRACE("FireWireDVNode::SetParameterValue, id 0x%lx, size %ld, "
|
||||||
|
"value 0x%lx\n", id, size, *(const int32*)value);
|
||||||
//do we need parameter for firewire dv?
|
//do we need parameter for firewire dv?
|
||||||
TRACE("FireWireDVNode::SetParameterValue finished\n");
|
TRACE("FireWireDVNode::SetParameterValue finished\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -27,119 +27,121 @@ class BParameterGroup;
|
|||||||
class FireWireDVNode : public virtual BBufferProducer,
|
class FireWireDVNode : public virtual BBufferProducer,
|
||||||
public virtual BControllable, public virtual BMediaEventLooper {
|
public virtual BControllable, public virtual BMediaEventLooper {
|
||||||
public:
|
public:
|
||||||
FireWireDVNode(BMediaAddOn *addon,
|
FireWireDVNode(BMediaAddOn *addon,
|
||||||
const char *name, int32 internal_id, FireWireCard *card);
|
const char *name, int32 internal_id,
|
||||||
virtual ~FireWireDVNode();
|
FireWireCard *card);
|
||||||
|
virtual ~FireWireDVNode();
|
||||||
virtual status_t InitCheck() const { return fInitStatus; }
|
|
||||||
|
virtual status_t InitCheck() const { return fInitStatus; }
|
||||||
|
|
||||||
/* BMediaNode */
|
/* BMediaNode */
|
||||||
public:
|
public:
|
||||||
virtual BMediaAddOn *AddOn(int32 * internal_id) const;
|
virtual BMediaAddOn *AddOn(int32 * internal_id) const;
|
||||||
virtual status_t HandleMessage(int32 message, const void *data,
|
virtual status_t HandleMessage(int32 message, const void *data,
|
||||||
size_t size);
|
size_t size);
|
||||||
protected:
|
protected:
|
||||||
virtual void Preroll();
|
virtual void Preroll();
|
||||||
virtual void SetTimeSource(BTimeSource * time_source);
|
virtual void SetTimeSource(BTimeSource * time_source);
|
||||||
virtual void SetRunMode(run_mode mode);
|
virtual void SetRunMode(run_mode mode);
|
||||||
|
|
||||||
/* BMediaEventLooper */
|
/* BMediaEventLooper */
|
||||||
protected:
|
protected:
|
||||||
virtual void NodeRegistered();
|
virtual void NodeRegistered();
|
||||||
|
virtual void HandleEvent(const media_timed_event *event,
|
||||||
virtual void HandleEvent(const media_timed_event *event,
|
bigtime_t lateness,
|
||||||
bigtime_t lateness, bool realTimeEvent = false);
|
bool realTimeEvent = false);
|
||||||
|
|
||||||
/* BBufferProducer */
|
/* BBufferProducer */
|
||||||
protected:
|
protected:
|
||||||
virtual status_t FormatSuggestionRequested(media_type type, int32 quality,
|
virtual status_t FormatSuggestionRequested(media_type type,
|
||||||
media_format * format);
|
int32 quality, media_format* format);
|
||||||
virtual status_t FormatProposal(const media_source &source,
|
virtual status_t FormatProposal(const media_source &source,
|
||||||
media_format *format);
|
media_format* format);
|
||||||
virtual status_t FormatChangeRequested(const media_source &source,
|
virtual status_t FormatChangeRequested(
|
||||||
const media_destination &destination,
|
const media_source &source,
|
||||||
media_format *io_format, int32 *_deprecated_);
|
const media_destination &destination,
|
||||||
virtual status_t GetNextOutput(int32 * cookie, media_output * out_output);
|
media_format* io_format,
|
||||||
virtual status_t DisposeOutputCookie(int32 cookie);
|
int32* _deprecated_);
|
||||||
virtual status_t SetBufferGroup(const media_source &for_source,
|
virtual status_t GetNextOutput(int32* cookie,
|
||||||
BBufferGroup * group);
|
media_output* out_output);
|
||||||
virtual status_t VideoClippingChanged(const media_source &for_source,
|
virtual status_t DisposeOutputCookie(int32 cookie);
|
||||||
int16 num_shorts, int16 *clip_data,
|
virtual status_t SetBufferGroup(const media_source& for_source,
|
||||||
const media_video_display_info &display,
|
BBufferGroup* group);
|
||||||
int32 * _deprecated_);
|
virtual status_t VideoClippingChanged(
|
||||||
virtual status_t GetLatency(bigtime_t * out_latency);
|
const media_source& for_source,
|
||||||
virtual status_t PrepareToConnect(const media_source &what,
|
int16 num_shorts, int16* clip_data,
|
||||||
const media_destination &where,
|
const media_video_display_info &display,
|
||||||
media_format *format,
|
int32* _deprecated_);
|
||||||
media_source *out_source, char *out_name);
|
virtual status_t GetLatency(bigtime_t* out_latency);
|
||||||
virtual void Connect(status_t error, const media_source &source,
|
virtual status_t PrepareToConnect(const media_source& what,
|
||||||
const media_destination &destination,
|
const media_destination& where,
|
||||||
const media_format & format, char *io_name);
|
media_format* format,
|
||||||
virtual void Disconnect(const media_source & what,
|
media_source* out_source,
|
||||||
const media_destination & where);
|
char* out_name);
|
||||||
virtual void LateNoticeReceived(const media_source & what,
|
virtual void Connect(status_t error,
|
||||||
bigtime_t how_much, bigtime_t performance_time);
|
const media_source& source,
|
||||||
virtual void EnableOutput(const media_source & what, bool enabled,
|
const media_destination& destination,
|
||||||
int32 * _deprecated_);
|
const media_format& format,
|
||||||
virtual void AdditionalBufferRequested(const media_source & source,
|
char* io_name);
|
||||||
media_buffer_id prev_buffer, bigtime_t prev_time,
|
virtual void Disconnect(const media_source& what,
|
||||||
const media_seek_tag * prev_tag);
|
const media_destination& where);
|
||||||
|
virtual void LateNoticeReceived(const media_source& what,
|
||||||
|
bigtime_t how_much,
|
||||||
|
bigtime_t performance_time);
|
||||||
|
virtual void EnableOutput(const media_source& what,
|
||||||
|
bool enabled, int32* _deprecated_);
|
||||||
|
virtual void AdditionalBufferRequested(
|
||||||
|
const media_source& source,
|
||||||
|
media_buffer_id prev_buffer,
|
||||||
|
bigtime_t prev_time,
|
||||||
|
const media_seek_tag* prev_tag);
|
||||||
|
|
||||||
/* BControllable */
|
/* BControllable */
|
||||||
protected:
|
protected:
|
||||||
virtual status_t GetParameterValue(int32 id, bigtime_t *last_change,
|
virtual status_t GetParameterValue(int32 id,
|
||||||
void *value, size_t *size);
|
bigtime_t* last_change, void* value,
|
||||||
virtual void SetParameterValue(int32 id, bigtime_t when,
|
size_t* size);
|
||||||
const void *value, size_t size);
|
virtual void SetParameterValue(int32 id, bigtime_t when,
|
||||||
|
const void* value, size_t size);
|
||||||
|
|
||||||
/* state */
|
/* state */
|
||||||
private:
|
private:
|
||||||
void HandleStart(bigtime_t performance_time);
|
void HandleStart(bigtime_t performance_time);
|
||||||
void HandleStop();
|
void HandleStop();
|
||||||
void HandleTimeWarp(bigtime_t performance_time);
|
void HandleTimeWarp(bigtime_t performance_time);
|
||||||
void HandleSeek(bigtime_t performance_time);
|
void HandleSeek(bigtime_t performance_time);
|
||||||
|
|
||||||
|
|
||||||
BParameterWeb * CreateParameterWeb();
|
BParameterWeb* CreateParameterWeb();
|
||||||
void SetAboutInfo(BParameterGroup *about);
|
void SetAboutInfo(BParameterGroup *about);
|
||||||
|
|
||||||
void RefreshParameterWeb();
|
void RefreshParameterWeb();
|
||||||
|
|
||||||
status_t StartCapture();
|
status_t StartCapture();
|
||||||
status_t StopCapture();
|
status_t StopCapture();
|
||||||
status_t StartCaptureThreads();
|
status_t StartCaptureThreads();
|
||||||
status_t StopCaptureThreads();
|
status_t StopCaptureThreads();
|
||||||
|
|
||||||
static int32 _card_reader_thread_(void *arg);
|
static int32 _card_reader_thread_(void *arg);
|
||||||
|
|
||||||
void card_reader_thread();
|
void card_reader_thread();
|
||||||
|
|
||||||
status_t fInitStatus;
|
status_t fInitStatus;
|
||||||
|
int32 fInternalID;
|
||||||
int32 fInternalID;
|
BMediaAddOn* fAddOn;
|
||||||
BMediaAddOn *fAddOn;
|
bool fOutputEnabledEncVideo;
|
||||||
|
media_output fOutputEncVideo;
|
||||||
bool fOutputEnabledEncVideo;
|
media_format fDefaultFormatEncVideo;
|
||||||
|
FireWireCard* fCard;
|
||||||
media_output fOutputEncVideo;
|
bool fCaptureThreadsActive;
|
||||||
|
thread_id fThreadIdCardReader;
|
||||||
media_format fDefaultFormatEncVideo;
|
volatile bool fTerminateThreads;
|
||||||
|
BBufferGroup* fBufferGroupEncVideo;
|
||||||
FireWireCard * fCard;
|
BParameterWeb* fWeb;
|
||||||
|
bool fCaptureActive;
|
||||||
bool fCaptureThreadsActive;
|
BLocker fLock;
|
||||||
|
|
||||||
thread_id fThreadIdCardReader;
|
|
||||||
|
|
||||||
volatile bool fTerminateThreads;
|
|
||||||
|
|
||||||
BBufferGroup * fBufferGroupEncVideo;
|
|
||||||
|
|
||||||
BParameterWeb * fWeb;
|
|
||||||
|
|
||||||
bool fCaptureActive;
|
|
||||||
BLocker lock;
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // __FIREWIRE_DV_NODE_H
|
#endif // __FIREWIRE_DV_NODE_H
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
SubDir HAIKU_TOP src add-ons media media-add-ons firewire_dv ;
|
SubDir HAIKU_TOP src add-ons media media-add-ons firewire_dv ;
|
||||||
|
|
||||||
UseHeaders [ FDirName $(HAIKU_TOP) headers compatibility bsd ] : true ;
|
UseHeaders [ FDirName $(HAIKU_TOP) headers compatibility bsd ] : true ;
|
||||||
UsePrivateHeaders media ;
|
|
||||||
UsePrivateHeaders firewire ;
|
UsePrivateHeaders firewire ;
|
||||||
|
UsePrivateHeaders media ;
|
||||||
|
UsePrivateHeaders shared ;
|
||||||
|
|
||||||
Addon firewire_dv.media_addon :
|
Addon firewire_dv.media_addon :
|
||||||
FireWireCard.cpp
|
FireWireCard.cpp
|
||||||
|
|||||||
Reference in New Issue
Block a user