HI Ross, I have modified Indexer utility ( MPEG2TransportStreamIndexer.cpp ) to delete all the dynamic objects. Code: #include <liveMedia.hh> #include <BasicUsageEnvironment.hh>
void afterPlaying(void* clientData); // forward UsageEnvironment* env; char const* programName; void usage() { *env << "usage: " << programName << " <transport-stream-file-name>\n"; *env << "\twhere <transport-stream-file-name> ends with \".ts\"\n"; exit(1); } TaskScheduler* scheduler; FramedSource* input; FramedSource* indexer; MediaSink* output; int main(int argc, char const** argv) { // Begin by setting up our usage environment: scheduler = BasicTaskScheduler::createNew(); env = BasicUsageEnvironment::createNew(*scheduler); // Parse the command line: programName = argv[0]; if (argc != 2) usage(); char const* inputFileName = argv[1]; // Check whether the input file name ends with ".ts": int len = strlen(inputFileName); if (len < 4 || strcmp(&inputFileName[len-3], ".ts") != 0) { *env << "ERROR: input file name \"" << inputFileName << "\" does not end with \".ts\"\n"; usage(); } // Open the input file (as a 'byte stream file source'): input = ByteStreamFileSource::createNew(*env, inputFileName, TRANSPORT_PACKET_SIZE); if (input == NULL) { *env << "Failed to open input file \"" << inputFileName << "\" (does it exist?)\n"; exit(1); } // Create a filter that indexes the input Transport Stream data: indexer = MPEG2IFrameIndexFromTransportStream::createNew(*env, input); // The output file name is the same as the input file name, except with suffix ".tsx": char* outputFileName = new char[len+2]; // allow for trailing x\0 sprintf(outputFileName, "%sx", inputFileName); // Open the output file (for writing), as a 'file sink': output = FileSink::createNew(*env, outputFileName); if (output == NULL) { *env << "Failed to open output file \"" << outputFileName << "\"\n"; exit(1); } // Start playing, to generate the output index file: *env << "Writing index file \"" << outputFileName << "\"..."; output->startPlaying(*indexer, afterPlaying, NULL); env->taskScheduler().doEventLoop(); // does not return return 0; // only to prevent compiler warning } void afterPlaying(void* /*clientData*/) { *env << "...done\n"; Medium::close(output); Medium::close(input); Medium::close(indexer); delete scheduler; env->reclaim(); exit(0); } As you can see agterPlaying function, is it right way to delete all objects because valgrind tool showing memory leaks at closing of "indexer" object. Leaks: ==29177== 80(16 direct,64 indirect) bytes in 1 block are definitely lost in loss record 3 of 3 ==29177== at 0x402BA13: operator new(unsigned int)(vg_replace_malloc.c:313) ==29177== by 0x8055B67: _Tables::getOurTables( UsageEnvironment &,unsigned char) ==29177== by 0x6524B67: MediaLookupTables::ourMedia(UsageEnvironment) ==29177== by 0x5874C6A: Medium::close(UsageEnvironment &,char const *) ==29177== by 0x424CCB7: Medium::close(Medium*) ==29177== by 0x5345C67: FramedFilter::~FramedFilter() ==29177== by 0x5345C67: MPEG2IFrameIndexFromTransportStream::~MPEG2IFrameIndexFromTransportStream() ==29177== by 0x5345C67: Medium::close(Medium*) Thanks & Regards, John On Wed, May 21, 2014 at 10:29 PM, john dicostanzo <john95...@gmail.com>wrote: > Hi, > I am using Live555 library for my vod server, vod server create index file > and announce transport stream. > For Indexing, I am using code as reference from > MPEG2TransportStreamIndexer.cpp > but when i close and delete all the dynamic objects,valgrind shows memory > leaks on it. > > Leaks: > ==29177== 80(16 direct,64 indirect) bytes in 1 block are definitely lost > in loss record 3 of 3 > ==29177== at 0x402BA13: operator new(unsigned int)(vg_replace_malloc.c:313) > ==29177== by 0x8055B67: _Tables::getOurTables(UsageEnvironment &,unsigned > char) > ==29177== by 0x6524B67: MediaLookupTables::ourMedia(UsageEnvironment) > ==29177== by 0x5874C6A: Medium::close(UsageEnvironment &,char const *) > ==29177== by 0x424CCB7: Medium::close(Medium*) > ==29177== by 0x5345C67: FramedFilter::~FramedFilter() > ==29177== by 0x5345C67: > MPEG2IFrameIndexFromTransportStream::~MPEG2IFrameIndexFromTransportStream() > ==29177== by 0x5345C67: Medium::close(Medium*) > > I don't know, why its creating new dynamic object in > Medium::close(operator new(unsigned int)(vg_replace_malloc.c:313)) > > Thanks, > John >
_______________________________________________ live-devel mailing list live-devel@lists.live555.com http://lists.live555.com/mailman/listinfo/live-devel