From fcb9bdc0c90a4dd4d1011fce41856e532dbd0226 Mon Sep 17 00:00:00 2001 From: Marcus Overhagen Date: Mon, 23 Apr 2007 19:03:05 +0000 Subject: [PATCH] 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 --- src/add-ons/media/media-add-ons/Jamfile | 1 + src/add-ons/media/media-add-ons/dvb/DVBCard.h | 2 +- .../media/media-add-ons/dvb/DVBMediaAddon.cpp | 27 +----- .../media/media-add-ons/dvb/DVBMediaNode.cpp | 92 ++----------------- .../media/media-add-ons/dvb/DVBMediaNode.h | 28 ++---- src/add-ons/media/media-add-ons/dvb/Jamfile | 16 ++++ .../media/media-add-ons/dvb/MediaFormat.cpp | 1 + .../media/media-add-ons/dvb/Packet.cpp | 2 +- .../dvb/TransportStreamDemux.cpp | 6 +- src/add-ons/media/media-add-ons/dvb/config.h | 3 +- 10 files changed, 41 insertions(+), 137 deletions(-) create mode 100644 src/add-ons/media/media-add-ons/dvb/Jamfile diff --git a/src/add-ons/media/media-add-ons/Jamfile b/src/add-ons/media/media-add-ons/Jamfile index 792fe5f184..25c00c83f0 100644 --- a/src/add-ons/media/media-add-ons/Jamfile +++ b/src/add-ons/media/media-add-ons/Jamfile @@ -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 ; diff --git a/src/add-ons/media/media-add-ons/dvb/DVBCard.h b/src/add-ons/media/media-add-ons/dvb/DVBCard.h index aaec8be295..0af3d0a253 100644 --- a/src/add-ons/media/media-add-ons/dvb/DVBCard.h +++ b/src/add-ons/media/media-add-ons/dvb/DVBCard.h @@ -25,7 +25,7 @@ #ifndef __DVB_CARD_H #define __DVB_CARD_H -#include "../drivers/cx23882/dvb.h" +#include "dvb.h" class DVBCard { diff --git a/src/add-ons/media/media-add-ons/dvb/DVBMediaAddon.cpp b/src/add-ons/media/media-add-ons/dvb/DVBMediaAddon.cpp index d72b6f6c34..7b64354dc2 100644 --- a/src/add-ons/media/media-add-ons/dvb/DVBMediaAddon.cpp +++ b/src/add-ons/media/media-add-ons/dvb/DVBMediaAddon.cpp @@ -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)); diff --git a/src/add-ons/media/media-add-ons/dvb/DVBMediaNode.cpp b/src/add-ons/media/media-add-ons/dvb/DVBMediaNode.cpp index aac0c9aa1d..0719a981a4 100644 --- a/src/add-ons/media/media-add-ons/dvb/DVBMediaNode.cpp +++ b/src/add-ons/media/media-add-ons/dvb/DVBMediaNode.cpp @@ -44,12 +44,10 @@ #include #include -#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) { diff --git a/src/add-ons/media/media-add-ons/dvb/DVBMediaNode.h b/src/add-ons/media/media-add-ons/dvb/DVBMediaNode.h index 1382820096..743cae8316 100644 --- a/src/add-ons/media/media-add-ons/dvb/DVBMediaNode.h +++ b/src/add-ons/media/media-add-ons/dvb/DVBMediaNode.h @@ -33,10 +33,10 @@ #include #include -#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; diff --git a/src/add-ons/media/media-add-ons/dvb/Jamfile b/src/add-ons/media/media-add-ons/dvb/Jamfile new file mode 100644 index 0000000000..25aa899242 --- /dev/null +++ b/src/add-ons/media/media-add-ons/dvb/Jamfile @@ -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 +; diff --git a/src/add-ons/media/media-add-ons/dvb/MediaFormat.cpp b/src/add-ons/media/media-add-ons/dvb/MediaFormat.cpp index 1561b995bb..28dcbc0901 100644 --- a/src/add-ons/media/media-add-ons/dvb/MediaFormat.cpp +++ b/src/add-ons/media/media-add-ons/dvb/MediaFormat.cpp @@ -23,6 +23,7 @@ */ #include +#include #include #include "MediaFormat.h" diff --git a/src/add-ons/media/media-add-ons/dvb/Packet.cpp b/src/add-ons/media/media-add-ons/dvb/Packet.cpp index 5af909beb7..eeda27c5cd 100644 --- a/src/add-ons/media/media-add-ons/dvb/Packet.cpp +++ b/src/add-ons/media/media-add-ons/dvb/Packet.cpp @@ -28,7 +28,7 @@ #include #include -#include "packet.h" +#include "Packet.h" #define PACKET #ifdef PACKET diff --git a/src/add-ons/media/media-add-ons/dvb/TransportStreamDemux.cpp b/src/add-ons/media/media-add-ons/dvb/TransportStreamDemux.cpp index 3fcf5851cf..d2c99a90d0 100644 --- a/src/add-ons/media/media-add-ons/dvb/TransportStreamDemux.cpp +++ b/src/add-ons/media/media-add-ons/dvb/TransportStreamDemux.cpp @@ -28,9 +28,9 @@ #include #include -#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 diff --git a/src/add-ons/media/media-add-ons/dvb/config.h b/src/add-ons/media/media-add-ons/dvb/config.h index 2f05dea7cd..942a8302de 100644 --- a/src/add-ons/media/media-add-ons/dvb/config.h +++ b/src/add-ons/media/media-add-ons/dvb/config.h @@ -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__