Index: /experimental/components/Packetizer/trunk/Packetizer-metadata/tests/Depacketizer_testsuite.h
===================================================================
--- /experimental/components/Packetizer/trunk/Packetizer-metadata/tests/Depacketizer_testsuite.h	(revision 5283)
+++ /experimental/components/Packetizer/trunk/Packetizer-metadata/tests/Depacketizer_testsuite.h	(revision 5373)
@@ -109,5 +109,5 @@
 
         // try to extract the subheader
-        packet_subheader_extracted = ExtractPacketSubheader( packet+N, 500, n );
+        packet_subheader_extracted = ExtractPacketSubheader( packet+N, 500, output, n );
         N += n;
         TS_ASSERT_EQUALS(packet_subheader_extracted, true);
@@ -181,5 +181,5 @@
 
         // try to extract the subheader
-        packet_subheader_extracted = ExtractPacketSubheader( packet+N, 500, n );
+        packet_subheader_extracted = ExtractPacketSubheader( packet+N, 500, output, n );
         N += n;
         TS_ASSERT_EQUALS(packet_subheader_extracted, true);
Index: /experimental/components/Packetizer/trunk/Packetizer-metadata/src/Depacketizer.h
===================================================================
--- /experimental/components/Packetizer/trunk/Packetizer-metadata/src/Depacketizer.h	(revision 5182)
+++ /experimental/components/Packetizer/trunk/Packetizer-metadata/src/Depacketizer.h	(revision 5373)
@@ -31,5 +31,4 @@
 
 #include "ossie/PortTypes.h"
-#include "standardinterfaces/realChar.h"
 #include "standardinterfaces/realChar_u.h"
 #include "standardinterfaces/realChar_p.h"
Index: /experimental/components/Packetizer/trunk/Packetizer-metadata/src/PacketizerDSP.cpp
===================================================================
--- /experimental/components/Packetizer/trunk/Packetizer-metadata/src/PacketizerDSP.cpp	(revision 5283)
+++ /experimental/components/Packetizer/trunk/Packetizer-metadata/src/PacketizerDSP.cpp	(revision 5373)
@@ -27,5 +27,8 @@
 
 // Default constructor
-PacketizerDSP::PacketizerDSP()
+PacketizerDSP::PacketizerDSP() :
+    buf1(NULL),
+    buf2(NULL),
+    buf_len(0)
 {
     // Initialize P/N synchronization code block
@@ -73,4 +76,11 @@
     binary_sequence_destroy( pn_control_buffer );
     binary_sequence_destroy( pn_eom_buffer );
+}
+
+void PacketizerDSP::SetBuffer(char *_b1, char *_b2, unsigned int _len)
+{
+    buf1 = _b1;
+    buf2 = _b2;
+    buf_len = _len;
 }
 
@@ -268,15 +278,17 @@
     char * input,
     unsigned int input_length,
-    unsigned int &num_bits_read)
+    char * output,
+    unsigned int &output_length)
 {
     unsigned int i;
 
     for (i=0; i<input_length; i++) {
-        ///\todo do something with the subheader bits here
+        output[i] = invert_bits ? (~input[i]) & 0x01 : input[i];
         num_subheader_bits_read++;
 
         if ( num_subheader_bits_read == packet_subheader_length ) {
+            // subheader data have been extracted
             num_packet_bits_read = 0;
-            num_bits_read = i+1;
+            output_length = i+1;
             return true;
         }
@@ -340,2 +352,40 @@
 
 
+///
+void PacketizerDSP::EncodePacketData(
+    char * input,
+    unsigned int input_length,
+    char * output,
+    unsigned int &output_length)
+{
+    if (buf1 == NULL || buf2 == NULL) {
+        std::cerr << "ERROR! PacketizerDSP::EncodePacketData() " << std::endl
+                  << "  => buffers not yet initialized!" << std::endl;
+        throw 0;
+    }
+
+    // ensure buffer size is sufficient
+    unsigned int output_length_req = RequiredBufferSize(input_length);
+
+    // ensure output buffer is sufficiently long
+    if ( output_length_req > buf_len ) {
+        std::cerr << "ERROR! PacketizerDSP::EncodePacketData():" << std::endl
+                  << "  => required output length (" << output_length_req
+                  << ") exceeds available buffer size (" << buf_len << ")" << std::endl;
+        throw 0;
+    }
+    
+    switch (packet_type) {
+    case PACKET_RAW_400:
+        // nothing to do; just copy data
+        memcpy( output, input, packet_data_length );
+        output_length = input_length;
+        return;
+    default:;
+        std::cerr << "ERROR! PacketizerDSP::EncodePacketData() " << std::endl
+                  << "  => Unsupported packet type: " << packet_type << std::endl;
+        throw 0;
+    }
+}
+
+
Index: /experimental/components/Packetizer/trunk/Packetizer-metadata/src/PacketizerDSP.h
===================================================================
--- /experimental/components/Packetizer/trunk/Packetizer-metadata/src/PacketizerDSP.h	(revision 5280)
+++ /experimental/components/Packetizer/trunk/Packetizer-metadata/src/PacketizerDSP.h	(revision 5373)
@@ -84,4 +84,7 @@
     PacketizerDSP();
 
+    /// Destructor
+    ~PacketizerDSP();
+
     ///\todo implement this method; for now assume packet can be configured by
     /// setting properties directly because SCA component wrapper inherits
@@ -97,6 +100,11 @@
     /// packet configuration
     unsigned int RequiredBufferSize(unsigned int input_length);
-    
-    ///
+
+    ///
+    /// \param[in]      input           pre-encoded data bits
+    /// \param[in]      input_length    length of input
+    /// \param[in]      output          output buffer
+    /// \param[in,out]  output_length   number of (maximum) output bits
+    /// \param[in]      type            type of packet to use
     void AssemblePacket(
         char* input,
@@ -106,4 +114,11 @@
         PacketType type);
 
+    ///
+    void EncodePacketData(
+        char * input,
+        unsigned int input_length,
+        char * output,
+        unsigned int &output_length);
+
     /// Extracts the P/N sync code from the header
     bool ExtractPacketHeader(
@@ -122,7 +137,8 @@
         char * input,
         unsigned int input_length,
-        unsigned int &num_bits_read);
-
-    /// Extracts the remainder of the packet, decoding as necessary
+        char * output,
+        unsigned int &output_length);
+
+    /// Extracts the remainder of the packet's raw data
     bool ExtractPacketData(
         char * input,
@@ -131,8 +147,10 @@
         unsigned int &output_length);
 
-    void DecodePacket();
-
-    /// Destructor
-    ~PacketizerDSP();
+    ///
+    void DecodePacketData(
+        char * input,
+        unsigned int input_length,
+        char * output,
+        unsigned int &output_length);
 
   protected:
@@ -218,4 +236,10 @@
 
     bool invert_bits;
+
+    // buffer pointers for signal processing; memory allocated externally
+    char *buf1;
+    char *buf2;
+    unsigned int buf_len;
+    void SetBuffer(char *_b1, char *_b2, unsigned int _len);
     
   private:
