added Jamfile for dvb.media_addon and fixed compilation problems after refactoring

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20780 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Marcus Overhagen 2007-04-23 19:03:05 +00:00
parent 175eb4f0de
commit fcb9bdc0c9
10 changed files with 41 additions and 137 deletions

View File

@ -3,6 +3,7 @@ SubDir HAIKU_TOP src add-ons media media-add-ons ;
# SubInclude HAIKU_TOP src add-ons media media-add-ons demultiplexer ;
# SubInclude HAIKU_TOP src add-ons media media-add-ons reader ;
# SubInclude HAIKU_TOP src add-ons media media-add-ons writer ;
SubInclude HAIKU_TOP src add-ons media media-add-ons dvb ;
SubInclude HAIKU_TOP src add-ons media media-add-ons esound_sink ;
SubInclude HAIKU_TOP src add-ons media media-add-ons legacy ;
SubInclude HAIKU_TOP src add-ons media media-add-ons mixer ;

View File

@ -25,7 +25,7 @@
#ifndef __DVB_CARD_H
#define __DVB_CARD_H
#include "../drivers/cx23882/dvb.h"
#include "dvb.h"
class DVBCard
{

View File

@ -42,7 +42,6 @@ struct device_info
char info[200];
media_format formats[5];
flavor_info flavor;
bool active; // workaround for zeta
};
@ -107,16 +106,7 @@ DVBMediaAddon::InstantiateNodeFor(const flavor_info * info, BMessage * config, s
}
*out_error = B_OK;
// workaround for Zeta
if (dev->active) {
printf("DVB: max instances violation!!!\n");
*out_error = B_ERROR;
return NULL;
} else {
dev->active = true;
}
return new DVBMediaNode(this, dev->name, dev->flavor.internal_id, dev->card, &dev->active);
return new DVBMediaNode(this, dev->name, dev->flavor.internal_id, dev->card);
}
@ -149,19 +139,8 @@ DVBMediaAddon::AutoStart(int index, BMediaNode **outNode, int32 *outInternalID,
}
*outHasMore = fDeviceList.ItemAt(index + 1) ? true : false;
// workaround for Zeta
if (dev->active) {
printf("DVB: max instances violation!!!\n");
*outInternalID = -1;
*outNode = NULL;
return B_MEDIA_ADDON_FAILED;
}
dev->active = true;
*outInternalID = dev->flavor.internal_id;
*outNode = new DVBMediaNode(this, dev->name, dev->flavor.internal_id, dev->card, &dev->active);
*outNode = new DVBMediaNode(this, dev->name, dev->flavor.internal_id, dev->card);
printf("DVB: DVBMediaAddon::AutoStart, success\n");
@ -234,8 +213,6 @@ DVBMediaAddon::AddDevice(DVBCard *card, const char *path)
dev->card = card;
dev->active = false; // workaround for Zeta
// setup name and info, it's important that name starts with "DVB"
// snprintf(dev->name, sizeof(dev->name), "DVB-%s %s (%s)", dvbtype, dvbnumber, name);
// strlcpy(dev->info, info, sizeof(dev->info));

View File

@ -44,12 +44,10 @@
#include <Entry.h>
#include <Path.h>
#include "DefaultDecoder.h"
#include "Support.h"
#include "HeaderFormat.h"
#include "packet.h"
#include "packet_queue.h"
#include "pes_extract.h"
#include "MediaFormat.h"
#include "Packet.h"
#include "PacketQueue.h"
#include "pes.h"
#include "media_header_ex.h"
#include "config.h"
@ -113,11 +111,11 @@
DVBMediaNode::DVBMediaNode(
BMediaAddOn *addon, const char *name,
int32 internal_id, DVBCard *card, bool *active) // bool *active is a workaround for Zeta
int32 internal_id, DVBCard *card)
: BMediaNode(name)
, BMediaEventLooper()
, BBufferProducer(B_MEDIA_RAW_VIDEO)
, BControllable()
, BMediaEventLooper()
, fStopDisabled(false)
, fOutputEnabledRawVideo(false)
, fOutputEnabledRawAudio(false)
@ -140,7 +138,7 @@ DVBMediaNode::DVBMediaNode(
, fThreadIdEncVideo(-1)
, fThreadIdMpegTS(-1)
, fTerminateThreads(false)
, fDemux(new TSDemux(fRawVideoQueue, fRawAudioQueue, fEncVideoQueue, fEncAudioQueue, fMpegTsQueue))
, fDemux(new TransportStreamDemux(fRawVideoQueue, fRawAudioQueue, fEncVideoQueue, fEncAudioQueue, fMpegTsQueue))
, fBufferGroupRawVideo(0)
, fBufferGroupRawAudio(0)
, fInterfaceType(DVB_TYPE_UNKNOWN)
@ -163,15 +161,6 @@ DVBMediaNode::DVBMediaNode(
, fAudioDecoder(0)
, fCurrentVideoPacket(0)
, fCurrentAudioPacket(0)
, fMpeg2VideoDecoderImage(-1)
, fMpeg2AudioDecoderImage(-1)
, fAC3DecoderImage(-1)
, fDeinterlaceFilterImage(-1)
, instantiate_mpeg2_video_decoder(NULL)
, instantiate_mpeg2_audio_decoder(NULL)
, instantiate_ac3_audio_decoder(NULL)
, instantiate_deinterlace_filter(NULL)
, fActive(active)
{
TRACE("DVBMediaNode::DVBMediaNode\n");
@ -182,8 +171,6 @@ DVBMediaNode::DVBMediaNode(
fInitStatus = B_OK;
LoadAddons();
InitDefaultFormats();
// in the beginning, the required formats are the same as the defaults
@ -244,8 +231,6 @@ printf("deleting audio buffer group done\n");
delete fChannelList;
delete fAudioList;
UnloadAddons();
#ifdef DUMP_VIDEO
close(fVideoFile);
#endif
@ -256,59 +241,6 @@ printf("deleting audio buffer group done\n");
close(fRawAudioFile);
#endif
*fActive = false; // workaround for zeta
}
image_id
DVBMediaNode::LoadAddon(const char *path, const char *name, void **ptr)
{
image_id id = load_add_on(path);
if (id <= 0) {
*ptr = NULL;
printf("loading addon '%s' failed\n", path);
return -1;
}
status_t s = get_image_symbol(id, name, B_SYMBOL_TYPE_TEXT, ptr);
if (s < B_OK) {
unload_add_on(id);
*ptr = NULL;
printf("locating function '%s' in addon '%s' failed\n", name, path);
return -1;
}
return id;
}
void
DVBMediaNode::LoadAddons()
{
fMpeg2VideoDecoderImage = LoadAddon(MPEG2_VIDEO_DECODER_PATH,
"instantiate_mpeg2_video_decoder",
(void **)&instantiate_mpeg2_video_decoder);
fMpeg2AudioDecoderImage = LoadAddon(MPEG2_AUDIO_DECODER_PATH,
"instantiate_mpeg2_audio_decoder",
(void **)&instantiate_mpeg2_audio_decoder);
fAC3DecoderImage = LoadAddon(AC3_AUDIO_DECODER_PATH,
"instantiate_ac3_audio_decoder",
(void **)&instantiate_ac3_audio_decoder);
fDeinterlaceFilterImage = LoadAddon(DEINTERLACE_FILTER_PATH,
"instantiate_deinterlace_filter",
(void **)&instantiate_deinterlace_filter);
}
void
DVBMediaNode::UnloadAddons()
{
if (fMpeg2VideoDecoderImage >= 0)
unload_add_on(fMpeg2VideoDecoderImage);
if (fMpeg2AudioDecoderImage >= 0)
unload_add_on(fMpeg2AudioDecoderImage);
if (fAC3DecoderImage >= 0)
unload_add_on(fAC3DecoderImage);
if (fDeinterlaceFilterImage >= 0)
unload_add_on(fDeinterlaceFilterImage);
}
@ -1593,10 +1525,7 @@ DVBMediaNode::raw_audio_thread()
// create decoder interface
if (instantiate_mpeg2_audio_decoder)
fAudioDecoder = (*instantiate_mpeg2_audio_decoder)(&_GetNextAudioChunk, this, "");
else
fAudioDecoder = new DefaultDecoder(&_GetNextAudioChunk, this);
fAudioDecoder = new MediaStreamDecoder(&_GetNextAudioChunk, this);
err = fAudioDecoder->SetInputFormat(format);
if (err) {
@ -1771,10 +1700,7 @@ DVBMediaNode::raw_video_thread()
// create decoder interface
if (instantiate_mpeg2_video_decoder)
fVideoDecoder = (*instantiate_mpeg2_video_decoder)(&_GetNextVideoChunk, this, "");
else
fVideoDecoder = new DefaultDecoder(&_GetNextVideoChunk, this);
fVideoDecoder = new MediaStreamDecoder(&_GetNextVideoChunk, this);
err = fVideoDecoder->SetInputFormat(format);
if (err) {

View File

@ -33,10 +33,10 @@
#include <media/MediaNode.h>
#include <support/Locker.h>
#include "ts_demux.h"
#include "TransportStreamDemux.h"
#include "MediaStreamDecoder.h"
#include "DVBCard.h"
#include "StringList.h"
#include "DecoderInterface.h"
class BDiscreteParameter;
class PacketQueue;
@ -49,7 +49,7 @@ class DVBMediaNode :
{
public:
DVBMediaNode(BMediaAddOn *addon,
const char *name, int32 internal_id, DVBCard *card, bool *active); // bool *active is a workaround for Zeta
const char *name, int32 internal_id, DVBCard *card);
virtual ~DVBMediaNode();
virtual status_t InitCheck() const { return fInitStatus; }
@ -149,10 +149,6 @@ private:
void LoadSettings();
void LoadAddons();
void UnloadAddons();
image_id LoadAddon(const char *path, const char *name, void **ptr);
void AddStateItems(BDiscreteParameter *param);
void AddRegionItems(BDiscreteParameter *param);
void AddChannelItems(BDiscreteParameter *param);
@ -247,7 +243,7 @@ private:
volatile bool fTerminateThreads;
TSDemux * fDemux;
TransportStreamDemux * fDemux;
BBufferGroup * fBufferGroupRawVideo;
BBufferGroup * fBufferGroupRawAudio;
@ -277,26 +273,14 @@ private:
StringList * fChannelList;
StringList * fAudioList;
DecoderInterface * fVideoDecoder;
DecoderInterface * fAudioDecoder;
MediaStreamDecoder *fVideoDecoder;
MediaStreamDecoder *fAudioDecoder;
Packet * fCurrentVideoPacket;
Packet * fCurrentAudioPacket;
image_id fMpeg2VideoDecoderImage;
image_id fMpeg2AudioDecoderImage;
image_id fAC3DecoderImage;
image_id fDeinterlaceFilterImage;
DecoderInterface * (*instantiate_mpeg2_video_decoder)(get_next_chunk_func, void *, const char *);
DecoderInterface * (*instantiate_mpeg2_audio_decoder)(get_next_chunk_func, void *, const char *);
DecoderInterface * (*instantiate_ac3_audio_decoder)(get_next_chunk_func, void *, const char *);
DecoderInterface * (*instantiate_deinterlace_filter)(get_next_chunk_func, void *, const char *);
BLocker lock;
bool * fActive; // workaround for Zeta
// used only for debugging:
int fVideoFile;
int fAudioFile;

View File

@ -0,0 +1,16 @@
SubDir HAIKU_TOP src add-ons media media-add-ons dvb ;
UsePrivateHeaders drivers ;
Addon dvb.media_addon :
DVBCard.cpp
DVBMediaAddon.cpp
DVBMediaNode.cpp
MediaFormat.cpp
MediaStreamDecoder.cpp
Packet.cpp
PacketQueue.cpp
pes.cpp
TransportStreamDemux.cpp
: be media
;

View File

@ -23,6 +23,7 @@
*/
#include <media/MediaFormats.h>
#include <media/MediaNode.h>
#include <stdio.h>
#include "MediaFormat.h"

View File

@ -28,7 +28,7 @@
#include <stdlib.h>
#include <string.h>
#include "packet.h"
#include "Packet.h"
#define PACKET
#ifdef PACKET

View File

@ -28,9 +28,9 @@
#include <stdlib.h>
#include <string.h>
#include "ts_demux.h"
#include "packet.h"
#include "packet_queue.h"
#include "TransportStreamDemux.h"
#include "Packet.h"
#include "PacketQueue.h"
#define TRACE_TS_DEMUX
#ifdef TRACE_TS_DEMUX

View File

@ -25,8 +25,7 @@
#ifndef _DVB_MEDIA_ADDON_CONFIG_H_
#define _DVB_MEDIA_ADDON_CONFIG_H_
#include "revision.h"
#define REVISION "unknown"
#define VERSION "1.0"
#define BUILD __DATE__ " "__TIME__