* Implemented BMediaRoster hooks GetRefFor, SetRefFor, SniffRefFor to access BFileInterface related file functions.
* Implemented BFileInterface class which was nearly empty so far. Added handling of messages passed to BFileInterface class. * Added needed structs and message values to DataExchange. * This is needed to get for instance the reader.media_addon to work. Usually one calls above functions to set a file to be decoded by the node. If the target is a consumer, they are used for setting the target for encoding data. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24671 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -171,6 +171,9 @@ enum {
|
|||||||
|
|
||||||
PRODUCER_MESSAGE_END,
|
PRODUCER_MESSAGE_END,
|
||||||
FILEINTERFACE_MESSAGE_START = 0x500,
|
FILEINTERFACE_MESSAGE_START = 0x500,
|
||||||
|
FILEINTERFACE_SET_REF,
|
||||||
|
FILEINTERFACE_GET_REF,
|
||||||
|
FILEINTERFACE_SNIFF_REF,
|
||||||
FILEINTERFACE_MESSAGE_END,
|
FILEINTERFACE_MESSAGE_END,
|
||||||
CONTROLLABLE_MESSAGE_START = 0x600,
|
CONTROLLABLE_MESSAGE_START = 0x600,
|
||||||
CONTROLLABLE_GET_PARAMETER_WEB,
|
CONTROLLABLE_GET_PARAMETER_WEB,
|
||||||
@@ -979,6 +982,45 @@ struct timesource_get_start_latency_reply : public reply_data
|
|||||||
bigtime_t start_latency;
|
bigtime_t start_latency;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct fileinterface_set_ref_request : public request_data
|
||||||
|
{
|
||||||
|
dev_t device;
|
||||||
|
ino_t directory;
|
||||||
|
char name[B_FILE_NAME_LENGTH];
|
||||||
|
bigtime_t duration;
|
||||||
|
bool create;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct fileinterface_set_ref_reply : public reply_data
|
||||||
|
{
|
||||||
|
bigtime_t duration;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct fileinterface_get_ref_request : public request_data
|
||||||
|
{
|
||||||
|
};
|
||||||
|
|
||||||
|
struct fileinterface_get_ref_reply : public reply_data
|
||||||
|
{
|
||||||
|
dev_t device;
|
||||||
|
ino_t directory;
|
||||||
|
char name[B_FILE_NAME_LENGTH];
|
||||||
|
char mimetype[256];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct fileinterface_sniff_ref_request : public request_data
|
||||||
|
{
|
||||||
|
dev_t device;
|
||||||
|
ino_t directory;
|
||||||
|
char name[B_FILE_NAME_LENGTH];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct fileinterface_sniff_ref_reply : public reply_data
|
||||||
|
{
|
||||||
|
char mimetype[256];
|
||||||
|
float capability;
|
||||||
|
};
|
||||||
|
|
||||||
struct controllable_get_parameter_web_request : public request_data
|
struct controllable_get_parameter_web_request : public request_data
|
||||||
{
|
{
|
||||||
area_id area;
|
area_id area;
|
||||||
|
|||||||
@@ -3,8 +3,18 @@
|
|||||||
* FILE: FileInterface.cpp
|
* FILE: FileInterface.cpp
|
||||||
* DESCR:
|
* DESCR:
|
||||||
***********************************************************************/
|
***********************************************************************/
|
||||||
#include <FileInterface.h>
|
/*
|
||||||
|
* Copyright 2008 Maurice Kalinowski, [email protected]
|
||||||
|
*
|
||||||
|
* All rights reserved. Distributed under the terms of the MIT License.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
#include "DataExchange.h"
|
||||||
|
#include <FileInterface.h>
|
||||||
|
#include <MimeType.h>
|
||||||
|
|
||||||
|
|
||||||
/*************************************************************
|
/*************************************************************
|
||||||
* protected BFileInterface
|
* protected BFileInterface
|
||||||
@@ -12,7 +22,6 @@
|
|||||||
|
|
||||||
BFileInterface::~BFileInterface()
|
BFileInterface::~BFileInterface()
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*************************************************************
|
/*************************************************************
|
||||||
@@ -26,9 +35,9 @@ BFileInterface::~BFileInterface()
|
|||||||
*************************************************************/
|
*************************************************************/
|
||||||
|
|
||||||
BFileInterface::BFileInterface()
|
BFileInterface::BFileInterface()
|
||||||
: BMediaNode("XXX fixme")
|
: BMediaNode("called by FileInterface")
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED();
|
CALLED();
|
||||||
|
|
||||||
AddNodeKind(B_FILE_INTERFACE);
|
AddNodeKind(B_FILE_INTERFACE);
|
||||||
}
|
}
|
||||||
@@ -39,9 +48,58 @@ BFileInterface::HandleMessage(int32 message,
|
|||||||
const void *data,
|
const void *data,
|
||||||
size_t size)
|
size_t size)
|
||||||
{
|
{
|
||||||
PRINT(4, "BFileInterface::HandleMessage %#lx, node %ld\n", message, ID());
|
CALLED();
|
||||||
|
|
||||||
return B_OK;
|
status_t rv;
|
||||||
|
|
||||||
|
switch(message) {
|
||||||
|
case FILEINTERFACE_SET_REF:
|
||||||
|
{
|
||||||
|
const fileinterface_set_ref_request *request =
|
||||||
|
(const fileinterface_set_ref_request*) data;
|
||||||
|
fileinterface_set_ref_reply reply;
|
||||||
|
entry_ref ref(request->device, request->directory,
|
||||||
|
request->name);
|
||||||
|
reply.duration = request->duration;
|
||||||
|
|
||||||
|
rv = SetRef(ref, request->create, &reply.duration);
|
||||||
|
reply.duration = request->duration;
|
||||||
|
request->SendReply(rv, &reply, sizeof(reply));
|
||||||
|
return B_OK;
|
||||||
|
}
|
||||||
|
case FILEINTERFACE_GET_REF:
|
||||||
|
{
|
||||||
|
const fileinterface_get_ref_request *request =
|
||||||
|
(const fileinterface_get_ref_request*) data;
|
||||||
|
fileinterface_get_ref_reply reply;
|
||||||
|
entry_ref resultRef;
|
||||||
|
rv = GetRef(&resultRef, reply.mimetype);
|
||||||
|
if (rv == B_OK) {
|
||||||
|
reply.device = resultRef.device;
|
||||||
|
reply.directory = resultRef.directory;
|
||||||
|
strcpy(reply.name, resultRef.name);
|
||||||
|
}
|
||||||
|
request->SendReply(rv, &reply, sizeof(reply));
|
||||||
|
return B_OK;
|
||||||
|
}
|
||||||
|
case FILEINTERFACE_SNIFF_REF:
|
||||||
|
{
|
||||||
|
const fileinterface_sniff_ref_request *request =
|
||||||
|
(const fileinterface_sniff_ref_request*) data;
|
||||||
|
fileinterface_sniff_ref_reply reply;
|
||||||
|
|
||||||
|
entry_ref ref(request->device, request->directory,
|
||||||
|
request->name);
|
||||||
|
|
||||||
|
rv = SniffRef(ref, reply.mimetype, &reply.capability);
|
||||||
|
request->SendReply(rv, &reply, sizeof(reply));
|
||||||
|
|
||||||
|
return B_OK;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
return B_ERROR;
|
||||||
|
}
|
||||||
|
return B_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*************************************************************
|
/*************************************************************
|
||||||
|
|||||||
@@ -26,6 +26,13 @@
|
|||||||
* THE SOFTWARE.
|
* THE SOFTWARE.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
/*
|
||||||
|
* Copyright 2008 Maurice Kalinowski, [email protected]
|
||||||
|
*
|
||||||
|
* All rights reserved. Distributed under the terms of the MIT License.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
/* to comply with the license above, do not remove the following line */
|
/* to comply with the license above, do not remove the following line */
|
||||||
char __dont_remove_copyright_from_binary[] = "Copyright (c) 2002-2006 Marcus "
|
char __dont_remove_copyright_from_binary[] = "Copyright (c) 2002-2006 Marcus "
|
||||||
@@ -36,16 +43,17 @@ char __dont_remove_copyright_from_binary[] = "Copyright (c) 2002-2006 Marcus "
|
|||||||
|
|
||||||
#include <new>
|
#include <new>
|
||||||
|
|
||||||
|
#include <BufferConsumer.h>
|
||||||
|
#include <BufferProducer.h>
|
||||||
#include <Locker.h>
|
#include <Locker.h>
|
||||||
#include <Message.h>
|
#include <Message.h>
|
||||||
#include <Messenger.h>
|
#include <Messenger.h>
|
||||||
#include <StopWatch.h>
|
#include <MimeType.h>
|
||||||
#include <OS.h>
|
#include <OS.h>
|
||||||
|
#include <ParameterWeb.h>
|
||||||
|
#include <StopWatch.h>
|
||||||
#include <String.h>
|
#include <String.h>
|
||||||
#include <TimeSource.h>
|
#include <TimeSource.h>
|
||||||
#include <ParameterWeb.h>
|
|
||||||
#include <BufferProducer.h>
|
|
||||||
#include <BufferConsumer.h>
|
|
||||||
|
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "MediaRosterEx.h"
|
#include "MediaRosterEx.h"
|
||||||
@@ -2589,8 +2597,27 @@ BMediaRoster::SetRefFor(const media_node & file_interface,
|
|||||||
bool create_and_truncate,
|
bool create_and_truncate,
|
||||||
bigtime_t * out_length) /* if create is false */
|
bigtime_t * out_length) /* if create is false */
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED();
|
CALLED();
|
||||||
return B_ERROR;
|
|
||||||
|
fileinterface_set_ref_request request;
|
||||||
|
fileinterface_set_ref_reply reply;
|
||||||
|
status_t rv;
|
||||||
|
|
||||||
|
request.device = file.device;
|
||||||
|
request.directory = file.directory;
|
||||||
|
strcpy(request.name, file.name);
|
||||||
|
request.create = create_and_truncate;
|
||||||
|
if (out_length)
|
||||||
|
request.duration = *out_length;
|
||||||
|
|
||||||
|
rv = QueryPort(file_interface.port, FILEINTERFACE_SET_REF, &request, sizeof(request), &reply, sizeof(reply));
|
||||||
|
if (rv != B_OK)
|
||||||
|
return rv;
|
||||||
|
|
||||||
|
if (!create_and_truncate && out_length)
|
||||||
|
*out_length = reply.duration;
|
||||||
|
|
||||||
|
return B_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -2599,8 +2626,25 @@ BMediaRoster::GetRefFor(const media_node & node,
|
|||||||
entry_ref * out_file,
|
entry_ref * out_file,
|
||||||
BMimeType * mime_type)
|
BMimeType * mime_type)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED();
|
CALLED();
|
||||||
return B_ERROR;
|
|
||||||
|
if (!out_file)
|
||||||
|
return B_BAD_VALUE;
|
||||||
|
|
||||||
|
fileinterface_get_ref_request request;
|
||||||
|
fileinterface_get_ref_reply reply;
|
||||||
|
status_t rv;
|
||||||
|
|
||||||
|
rv = QueryPort(node.port, FILEINTERFACE_GET_REF, &request, sizeof(request), &reply, sizeof(reply));
|
||||||
|
if (rv != B_OK)
|
||||||
|
return rv;
|
||||||
|
|
||||||
|
*out_file = entry_ref(reply.device, reply.directory, reply.name);
|
||||||
|
|
||||||
|
if (mime_type)
|
||||||
|
mime_type->SetTo(reply.mimetype);
|
||||||
|
|
||||||
|
return B_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -2610,8 +2654,27 @@ BMediaRoster::SniffRefFor(const media_node & file_interface,
|
|||||||
BMimeType * mime_type,
|
BMimeType * mime_type,
|
||||||
float * out_capability)
|
float * out_capability)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED();
|
CALLED();
|
||||||
return B_ERROR;
|
|
||||||
|
if (!mime_type || !out_capability)
|
||||||
|
return B_BAD_VALUE;
|
||||||
|
|
||||||
|
fileinterface_sniff_ref_request request;
|
||||||
|
fileinterface_sniff_ref_reply reply;
|
||||||
|
status_t rv;
|
||||||
|
|
||||||
|
request.device = file.device;
|
||||||
|
request.directory = file.directory;
|
||||||
|
strcpy(request.name, file.name);
|
||||||
|
|
||||||
|
rv = QueryPort(file_interface.port, FILEINTERFACE_SNIFF_REF, &request, sizeof(request), &reply, sizeof(reply));
|
||||||
|
if (rv != B_OK)
|
||||||
|
return rv;
|
||||||
|
|
||||||
|
mime_type->SetTo(reply.mimetype);
|
||||||
|
*out_capability = reply.capability;
|
||||||
|
|
||||||
|
return B_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user