Compare commits

..

42 Commits

Author SHA1 Message Date
matthewjheaney
056b0d96a8 libwebm: changed version to 1.0.0.14
Change-Id: Id8147672e7fb761b2a69ff0d1ec05705e34eefc1
2011-01-26 19:08:43 -05:00
matthewjheaney
dbc58d0510 libwebm: make unserialize operations endian-neutral
Change-Id: I0c754ea8192020886dac14e3a0bd6a74c3165a92
2011-01-26 18:50:07 -05:00
matthewjheaney
a131a01446 libwebm: incrementally load block entries
Change-Id: I566df5979e7638b6a5411a3338bbb0cf7d9ad111
2011-01-25 23:01:51 -05:00
Hwasoo Lee
b8cb358204 fixed build error in sample
Change-Id: Id6ac66f5e625952918857c3e13e655452c32abc8
2011-01-25 11:31:20 -05:00
matthewjheaney
5b06b22b31 libwebm: removed warning in x64 mode
Change-Id: I391ad625babdede58c8025b332ee2c949e930454
2011-01-24 22:45:10 -05:00
matthewjheaney
598de03ef3 libwebm: version 1.0.0.13
Change-Id: I6417dfd731604461939a780d0fb411b888ae1d32
2011-01-24 22:40:19 -05:00
matthewjheaney
94f2d589fc libwebm: tolerate errors in SeekHead element
Change-Id: I380f43dd495dc5107f5df37f9d05ff67da4f8424
2011-01-24 20:50:12 -05:00
matthewjheaney
786357a59d version 1.0.0.12
Supports incremental (partial) loading
Supports incremental parsing of Cues element

Change-Id: I38ef8dc56b970a7401aa4561197bf93e2df979da
2011-01-22 13:48:09 -05:00
matthewjheaney
6e723319e8 added support for incremental (partial) loading
Change-Id: Ic411e6214fdfc3e23a7e3f621f9fb8be0d650d50
2011-01-21 20:04:58 -05:00
matthewjheaney
9911f61616 incrementally parse cue points
Change-Id: I83699208eabb2433b25f634927b7c0be8623c3a2
2011-01-19 21:22:37 -05:00
matthewjheaney
b0f96983d2 changed version to 1.0.0.11
Change-Id: I22e85c56a3be07dba0959520a40b341b807f377c
2011-01-14 18:21:35 -05:00
matthewjheaney
6d7732575a added comment to fix VideoTrack::Seek
Change-Id: I2a8b3e4ca92bdfd2d77c84ab970379d22a06e451
2011-01-14 18:17:16 -05:00
matthewjheaney
8081c58b9b LoadCluster: ensure avail before geting uint len
Change-Id: I421501fcd9fdc017eee5307834911fbd18b510b0
2011-01-13 23:30:47 -05:00
matthewjheaney
00aa1804e9 Segment::ParseHeaders return wrong result when underflow
Change-Id: Iabdec9c2f062ec2fc6c9edeec208c4efc07c8307
2011-01-13 22:53:54 -05:00
matthewjheaney
bb8dfbe026 Segment::ParseNext is implemented
Change-Id: I31100afd4c16c48b366b7a29bec597909f9e2bbc
2011-01-13 15:11:33 -05:00
Hwasoo Lee
b81751642e initialized members using initialize list of EBMLHeader
Change-Id: I5bb46132141d7381dd23e0a3b87a3b6c0e8b7f4b
2011-01-13 15:00:16 -05:00
Hwasoo Lee
3b0f1b6d2b fixed memory leaks from utf8towcs()
Change-Id: I4d35b67da464c073d86f465801f64b15e69a8de2
2011-01-06 15:23:28 -05:00
Frank Galligan
d1aff34626 Added EBML element start and size to Segment Info, Tracks, Track,
Cluster, Cues, and CuePoint. The information was needed for some
tools bieng worked on. Element start is byte offset of the EMBL ID's
first byte.

Change-Id: I64e0a48932630e0a5269418f4979487d6d7bce60
2011-01-05 13:57:29 -05:00
matthewjheaney
6623441ee8 changed version to 1.0.0.10
Change-Id: Ib5acbe084dce95b1bb520731015ff345390acad8
2010-12-16 15:13:41 -05:00
matthewjheaney
3ba8df9a64 return invisible flag setting
Change-Id: I1953b0a590813302054245b8ceb5430aa1d9d09b
2010-12-14 15:05:35 -05:00
matthewjheaney
bebe4accb8 changed version to 1.0.0.9
Change-Id: Iee4ba7605e191290e99a9424b76e57d6f0e965c2
2010-12-07 13:58:49 -05:00
matthewjheaney
93263f0b4a return error when no segment id found
Change-Id: I291335dc726171f7eb3820b9ade2d261a33500ff
2010-12-03 11:57:53 -05:00
matthewjheaney
e1e757f919 LoadCluster passes back posn and size
Change-Id: I91b3c2234f7621139a5cae2d71af7301a30c027e
2010-11-30 12:49:20 -05:00
matthewjheaney
6c45ab2d4c parse seek head only when source available
Change-Id: Iba3b9e46d0cb28fd91a2a7062c6aa4bac3f72c0c
2010-11-29 17:11:38 -05:00
matthewjheaney
cb7b24880f LoadCluster now checks for underflow
Change-Id: I5a1ad57753657f71075d0ad8ca39841e7aae9e57
2010-11-29 16:03:44 -05:00
matthewjheaney
157775ac74 fixed bug: was searching outside array bounds
Change-Id: If02466f240dc2a00b2a9a8f75b0ffa27a8984ec0
2010-11-22 16:29:40 -05:00
matthewjheaney
fd1d8006f0 moved seek function from segment to track
Change-Id: Ie34549cea4c5d961b6cc04ef229a3eadc1f0ee3b
2010-11-22 15:57:25 -05:00
matthewjheaney
9203d2dcd1 set version to 1.0.0.8
Change-Id: If4bd0d73f72cb819dee9d985fe8f64490c3ab206
2010-11-19 14:55:56 -05:00
matthewjheaney
be2f81abca filter out empty clusters
Change-Id: Iad4da9d55c1cfc332042d0017bd5d77e9ad511b6
2010-11-18 19:28:50 -05:00
matthewjheaney
cb5414a42a changed semantics of m_entries_count
Change-Id: I114b1482239cced838932f35ca4b5ae380f0d022
2010-11-18 17:30:12 -05:00
matthewjheaney
2ce6965b2d GetEntry now accepts a time
Change-Id: I850cfa1deaae465b91c9f65b774ad49cce9e8b8d
2010-11-17 14:27:55 -05:00
Hwasoo Lee
8db600e1c9 handled unknown size of segment for live stream
Change-Id: I7dcc08e38c6cd31a55693b39ace414c14399d1b5
2010-11-16 16:17:10 -05:00
Hwasoo Lee
85353469f8 updated the project files
Change-Id: Ia949818a03663b4b4e3595e60183213de8e98100
2010-11-16 14:56:55 -05:00
Hwasoo Lee
d97f236f81 fixed the issue 234
Change-Id: Ie527263ae2862426e8c58fce13b34da4c792cc01
2010-11-16 14:54:14 -05:00
matthewjheaney
790f639f2f ignore empty clusters when getting first block
Change-Id: I9278efcacc3ea5dcfa584cb0937e39a4004e6947
2010-11-15 21:22:57 -05:00
matthewjheaney
91dbee4b6e set version to 1.0.0.7
Change-Id: I09444586c0b1ed6fd5002631a9eece890644d278
2010-11-12 15:01:57 -05:00
matthewjheaney
1e6c5cbaf7 ignore empty clusters when finding next one
Change-Id: I7478e6428c8383a1d05a91e9a44b6d1ee1335da7
2010-11-12 13:30:47 -05:00
matthewjheaney
c62b9f8a21 relax block value check
Change-Id: Ifaf4cbc4176dde8e2653cb9da9888551a872da7b
2010-11-11 22:30:42 -05:00
Hwasoo Lee
5dd6000dc7 updated to handle a laced webm 2010-11-09 09:54:31 -05:00
Hwasoo Lee
3ea595b132 Merge "Updated RELEASE.TXT" 2010-11-08 14:22:15 -08:00
Ryan Thompson
14e42cf98b Made getcluster call const
As Inherited from the super class this call should also be const.
2010-11-08 16:14:04 -05:00
Hwasoo Lee
30bf3472bf Updated RELEASE.TXT 2010-11-03 13:46:44 -04:00
6 changed files with 2120 additions and 312 deletions

View File

@@ -1,3 +1,29 @@
1.0.0.5
* Handled case when no duration
* Handled empty clusters
* Handled empty clusters when seeking
* Implemented check lacing bits
1.0.0.4
* Made Cues member variables mutables
* Defined against badly-formatted cue points
* Segment::GetCluster returns CuePoint too
* Separated cue-based searches
1.0.0.3
* Added Block::GetOffset() to get a frame's offset in a block
* Changed cluster count type from size_t to long
* Parsed SeekHead to find cues
* Allowed seeking beyond end of cluster cache
* Added not to attempt to reparse cues element
* Restructured Segment::LoadCluster
* Marked position of cues without parsing cues element
* Allowed cue points to be loaded incrementally
* Implemented to load lazily cue points as they're searched
* Merged Cues::LoadCuePoint into Cues::Find
* Lazy init cues
* Loaded cue point during find
1.0.0.2
* added support for Cues element
* seeking was improved
@@ -5,4 +31,4 @@
1.0.0.1
* fixed item 141
* added item 142
* added this file, RELEASE.TXT, to repository
* added this file, RELEASE.TXT, to repository

File diff suppressed because it is too large Load Diff

View File

@@ -37,7 +37,7 @@ short Unserialize2SInt(IMkvReader*, long long);
signed char Unserialize1SInt(IMkvReader*, long long);
bool Match(IMkvReader*, long long&, unsigned long, long long&);
bool Match(IMkvReader*, long long&, unsigned long, char*&);
bool Match(IMkvReader*, long long&, unsigned long,unsigned char*&, size_t&);
bool Match(IMkvReader*, long long&, unsigned long, unsigned char*&, size_t&);
bool Match(IMkvReader*, long long&, unsigned long, double&);
bool Match(IMkvReader*, long long&, unsigned long, short&);
@@ -56,6 +56,7 @@ struct EBMLHeader
long long m_docTypeReadVersion;
long long Parse(IMkvReader*, long long&);
void Init();
};
@@ -80,6 +81,7 @@ public:
long long GetTime(const Cluster*) const; //absolute, and scaled (ns)
bool IsKey() const;
void SetKey(bool);
bool IsInvisible() const;
int GetFrameCount() const; //to index frames: [0, count)
@@ -91,26 +93,15 @@ public:
long Read(IMkvReader*, unsigned char*) const;
};
#if 0
long long GetOffset() const;
long GetSize() const;
long Read(IMkvReader*, unsigned char*) const;
#else
const Frame& GetFrame(int frame_index) const;
#endif
private:
long long m_track; //Track::Number()
short m_timecode; //relative to cluster
unsigned char m_flags;
#if 0
long long m_frameOff;
long m_frameSize;
#else
Frame* m_frames;
int m_frame_count;
#endif
};
@@ -205,10 +196,13 @@ class Track
public:
Segment* const m_pSegment;
const long long m_element_start;
const long long m_element_size;
virtual ~Track();
long long GetType() const;
long long GetNumber() const;
unsigned long long GetUid() const;
const char* GetNameAsUTF8() const;
const char* GetCodecNameAsUTF8() const;
const char* GetCodecId() const;
@@ -227,7 +221,7 @@ public:
{
long long type;
long long number;
long long uid;
unsigned long long uid;
char* nameAsUTF8;
char* codecId;
unsigned char* codecPrivate;
@@ -243,9 +237,14 @@ public:
long GetFirst(const BlockEntry*&) const;
long GetNext(const BlockEntry* pCurr, const BlockEntry*& pNext) const;
virtual bool VetEntry(const BlockEntry*) const = 0;
virtual long Seek(long long time_ns, const BlockEntry*&) const = 0;
protected:
Track(Segment*, const Info&);
Track(
Segment*,
const Info&,
long long element_start,
long long element_size);
const Info m_info;
class EOSBlock : public BlockEntry
@@ -254,7 +253,7 @@ protected:
EOSBlock();
bool EOS() const;
Cluster* GetCluster() const;
const Cluster* GetCluster() const;
size_t GetIndex() const;
const Block* GetBlock() const;
bool IsBFrame() const;
@@ -271,12 +270,17 @@ class VideoTrack : public Track
VideoTrack& operator=(const VideoTrack&);
public:
VideoTrack(Segment*, const Info&);
VideoTrack(
Segment*,
const Info&,
long long element_start,
long long element_size);
long long GetWidth() const;
long long GetHeight() const;
double GetFrameRate() const;
bool VetEntry(const BlockEntry*) const;
long Seek(long long time_ns, const BlockEntry*&) const;
private:
long long m_width;
@@ -292,11 +296,16 @@ class AudioTrack : public Track
AudioTrack& operator=(const AudioTrack&);
public:
AudioTrack(Segment*, const Info&);
AudioTrack(
Segment*,
const Info&,
long long element_start,
long long element_size);
double GetSamplingRate() const;
long long GetChannels() const;
long long GetBitDepth() const;
bool VetEntry(const BlockEntry*) const;
long Seek(long long time_ns, const BlockEntry*&) const;
private:
double m_rate;
@@ -314,8 +323,15 @@ public:
Segment* const m_pSegment;
const long long m_start;
const long long m_size;
const long long m_element_start;
const long long m_element_size;
Tracks(Segment*, long long start, long long size);
Tracks(
Segment*,
long long start,
long long size,
long long element_start,
long long element_size);
virtual ~Tracks();
const Track* GetTrackByNumber(unsigned long tn) const;
@@ -325,7 +341,12 @@ private:
Track** m_trackEntries;
Track** m_trackEntriesEnd;
void ParseTrackEntry(long long, long long, Track*&);
void ParseTrackEntry(
long long,
long long,
Track*&,
long long element_start,
long long element_size);
public:
unsigned long GetTracksCount() const;
@@ -341,9 +362,18 @@ public:
Segment* const m_pSegment;
const long long m_start;
const long long m_size;
const long long m_element_start;
const long long m_element_size;
SegmentInfo(
Segment*,
long long start,
long long size,
long long element_start,
long long element_size);
SegmentInfo(Segment*, long long start, long long size);
~SegmentInfo();
long long GetTimeCodeScale() const;
long long GetDuration() const; //scaled
const char* GetMuxingAppAsUTF8() const;
@@ -358,6 +388,49 @@ private:
char* m_pTitleAsUTF8;
};
class SeekHead
{
SeekHead(const SeekHead&);
SeekHead& operator=(const SeekHead&);
public:
Segment* const m_pSegment;
const long long m_start;
const long long m_size;
const long long m_element_start;
const long long m_element_size;
SeekHead(
Segment*,
long long start,
long long size,
long long element_start,
long long element_size);
~SeekHead();
struct Entry
{
long long id;
long long pos;
};
int GetCount() const;
const Entry* GetEntry(int idx) const;
private:
Entry* m_entries;
int m_count;
static void ParseEntry(
IMkvReader*,
long long pos,
long long size,
Entry*&);
};
class Cues;
class CuePoint
{
@@ -370,6 +443,9 @@ class CuePoint
CuePoint& operator=(const CuePoint&);
public:
long long m_element_start;
long long m_element_size;
void Load(IMkvReader*);
long long GetTimeCode() const; //absolute but unscaled
@@ -402,7 +478,12 @@ class Cues
{
friend class Segment;
Cues(Segment*, long long start, long long size);
Cues(
Segment*,
long long start,
long long size,
long long element_start,
long long element_size);
~Cues();
Cues(const Cues&);
@@ -412,6 +493,8 @@ public:
Segment* const m_pSegment;
const long long m_start;
const long long m_size;
const long long m_element_start;
const long long m_element_size;
bool Find( //lower bound of time_ns
long long time_ns,
@@ -435,9 +518,10 @@ public:
const CuePoint*,
const CuePoint::TrackPosition*) const;
bool LoadCuePoint() const;
private:
void Init() const;
bool LoadCuePoint() const;
void PreloadCuePoint(size_t&, long long) const;
mutable CuePoint** m_cue_points;
@@ -457,7 +541,12 @@ public:
Segment* const m_pSegment;
public:
static Cluster* Parse(Segment*, long, long long off);
static Cluster* Parse(
Segment*,
long,
long long off,
long long element_start,
long long element_size);
Cluster(); //EndOfStream
~Cluster();
@@ -472,28 +561,40 @@ public:
const BlockEntry* GetFirst() const;
const BlockEntry* GetLast() const;
const BlockEntry* GetNext(const BlockEntry*) const;
const BlockEntry* GetEntry(const Track*) const;
const BlockEntry* GetEntry(const Track*, long long ns = -1) const;
const BlockEntry* GetEntry(
const CuePoint&,
const CuePoint::TrackPosition&) const;
const BlockEntry* GetMaxKey(const VideoTrack*) const;
static bool HasBlockEntries(const Segment*, long long);
long GetEntryCount() const;
void Load() const;
void LoadBlockEntries() const;
long LoadBlockEntries(long long& pos, long& size) const;
protected:
Cluster(Segment*, long, long long off);
Cluster(
Segment*,
long,
long long off,
long long element_start,
long long element_size);
public:
//TODO: these should all be private, with public selector functions
long m_index;
mutable long long m_pos;
mutable long long m_size;
const long long m_element_start;
const long long m_element_size;
private:
mutable long long m_timecode;
mutable BlockEntry** m_entries;
mutable size_t m_entriesCount;
mutable long m_entries_count;
void Load() const;
void LoadBlockEntries() const;
void ParseBlockGroup(long long, long long, size_t) const;
void ParseSimpleBlock(long long, long long, size_t) const;
@@ -503,6 +604,8 @@ private:
class Segment
{
friend class Cues;
friend class VideoTrack;
friend class AudioTrack;
Segment(const Segment&);
Segment& operator=(const Segment&);
@@ -521,17 +624,26 @@ public:
long Load(); //loads headers and all clusters
//for incremental loading (splitter)
//for incremental loading
long long Unparsed() const;
long long ParseHeaders(); //stops when first cluster is found
long LoadCluster(); //loads one cluster
//long FindNextCluster(long long& pos, long& size) const;
long LoadCluster(long long& pos, long& size); //load one cluster
long LoadCluster();
long ParseNext(
const Cluster* pCurr,
const Cluster*& pNext,
long long& pos,
long& size);
//This pair parses one cluster, but only changes the state of the
//segment object when the cluster is actually added to the index.
long ParseCluster(long long& cluster_pos, long long& new_pos) const;
bool AddCluster(long long cluster_pos, long long new_pos);
Tracks* GetTracks() const;
const SeekHead* GetSeekHead() const;
const Tracks* GetTracks() const;
const SegmentInfo* GetInfo() const;
const Cues* GetCues() const;
@@ -543,11 +655,20 @@ public:
const Cluster* GetNext(const Cluster*);
const Cluster* FindCluster(long long time_nanoseconds) const;
const BlockEntry* Seek(long long time_nanoseconds, const Track*) const;
//const BlockEntry* Seek(long long time_nanoseconds, const Track*) const;
const Cluster* FindOrPreloadCluster(long long pos);
long ParseCues(
long long cues_off, //offset relative to start of segment
long long& parse_pos,
long& parse_len);
private:
long long m_pos; //absolute file posn; what has been consumed so far
SeekHead* m_pSeekHead;
SegmentInfo* m_pInfo;
Tracks* m_pTracks;
Cues* m_pCues;
@@ -559,9 +680,9 @@ private:
void AppendCluster(Cluster*);
void PreloadCluster(Cluster*, ptrdiff_t);
void ParseSeekHead(long long pos, long long size);
void ParseSeekEntry(long long pos, long long size);
void ParseCues(long long);
//void ParseSeekHead(long long pos, long long size);
//void ParseSeekEntry(long long pos, long long size);
//void ParseCues(long long);
const BlockEntry* GetBlock(
const CuePoint&,
@@ -569,7 +690,14 @@ private:
};
} //end namespace mkvparser
inline long mkvparser::Segment::LoadCluster()
{
long long pos;
long size;
return LoadCluster(pos, size);
}
#endif //MKVPARSER_HPP

View File

@@ -43,13 +43,13 @@
Name="VCCLCompilerTool"
Optimization="0"
PreprocessorDefinitions="WIN32;_DEBUG;_LIB"
MinimalRebuild="true"
MinimalRebuild="false"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
RuntimeLibrary="1"
UsePrecompiledHeader="0"
WarningLevel="3"
WarningLevel="4"
Detect64BitPortabilityProblems="false"
DebugInformationFormat="4"
DebugInformationFormat="1"
/>
<Tool
Name="VCManagedResourceCompilerTool"

View File

@@ -109,22 +109,32 @@ int main(int argc, char* argv[])
printf("\t\tDuration\t\t: %lld\n", duration_ns);
const double duration_sec = double(duration_ns) / 1000000000;
printf("\t\tDuration(secs)\t\t: %7.3f\n", duration_sec);
printf("\t\tDuration(secs)\t\t: %7.3lf\n", duration_sec);
if (pTitle == NULL)
printf("\t\tTrack Name\t\t: NULL\n");
else
{
printf("\t\tTrack Name\t\t: %ls\n", pTitle);
delete [] pTitle;
}
if (pMuxingApp == NULL)
printf("\t\tMuxing App\t\t: NULL\n");
else
{
printf("\t\tMuxing App\t\t: %ls\n", pMuxingApp);
delete [] pMuxingApp;
}
if (pWritingApp == NULL)
printf("\t\tWriting App\t\t: NULL\n");
else
{
printf("\t\tWriting App\t\t: %ls\n", pWritingApp);
delete [] pWritingApp;
}
// pos of segment payload
printf("\t\tPosition(Segment)\t: %lld\n", pSegment->m_start);
@@ -132,7 +142,7 @@ int main(int argc, char* argv[])
// size of segment payload
printf("\t\tSize(Segment)\t\t: %lld\n", pSegment->m_size);
mkvparser::Tracks* const pTracks = pSegment->GetTracks();
const mkvparser::Tracks* pTracks = pSegment->GetTracks();
unsigned long i = 0;
const unsigned long j = pTracks->GetTracksCount();
@@ -148,19 +158,22 @@ int main(int argc, char* argv[])
if (pTrack == NULL)
continue;
const long long trackType_ = pTrack->GetType();
unsigned long trackType = static_cast<unsigned long>(trackType_);
unsigned long trackNumber = pTrack->GetNumber();
const long long trackType = pTrack->GetType();
const long long trackNumber = pTrack->GetNumber();
const unsigned long long trackUid = pTrack->GetUid();
const wchar_t* const pTrackName = utf8towcs(pTrack->GetNameAsUTF8());
printf("\t\tTrack Type\t\t: %ld\n", trackType);
printf("\t\tTrack Number\t\t: %ld\n", trackNumber);
printf("\t\tTrack Type\t\t: %lld\n", trackType);
printf("\t\tTrack Number\t\t: %lld\n", trackNumber);
printf("\t\tTrack Uid\t\t: %lld\n", trackUid);
if (pTrackName == NULL)
printf("\t\tTrack Name\t\t: NULL\n");
else
{
printf("\t\tTrack Name\t\t: %ls \n", pTrackName);
delete [] pTrackName;
}
const char* const pCodecId = pTrack->GetCodecId();
@@ -175,7 +188,10 @@ int main(int argc, char* argv[])
if (pCodecName == NULL)
printf("\t\tCodec Name\t\t: NULL\n");
else
{
printf("\t\tCodec Name\t\t: %ls\n", pCodecName);
delete [] pCodecName;
}
if (trackType == VIDEO_TRACK)
{
@@ -220,7 +236,7 @@ int main(int argc, char* argv[])
return -1;
}
mkvparser::Cluster* pCluster = pSegment->GetFirst();
const mkvparser::Cluster* pCluster = pSegment->GetFirst();
while ((pCluster != NULL) && !pCluster->EOS())
{
@@ -235,18 +251,26 @@ int main(int argc, char* argv[])
while ((pBlockEntry != NULL) && !pBlockEntry->EOS())
{
const Block* const pBlock = pBlockEntry->GetBlock();
const unsigned long trackNum = pBlock->GetTrackNumber();
const Track* const pTrack = pTracks->GetTrackByNumber(trackNum);
const long long trackNum = pBlock->GetTrackNumber();
const unsigned long tn = static_cast<unsigned long>(trackNum);
const Track* const pTrack = pTracks->GetTrackByNumber(tn);
const long long trackType = pTrack->GetType();
const long size = pBlock->GetSize();
const int frameCount = pBlock->GetFrameCount();
const long long time_ns = pBlock->GetTime(pCluster);
printf("\t\t\tBlock\t\t:%s,%15ld,%s,%15lld\n",
printf("\t\t\tBlock\t\t:%s,%s,%15lld\n",
(trackType == VIDEO_TRACK) ? "V" : "A",
size,
pBlock->IsKey() ? "I" : "P",
time_ns);
for (int i = 0; i < frameCount; ++i)
{
const Block::Frame& theFrame = pBlock->GetFrame(i);
const long size = theFrame.len;
const long long offset = theFrame.pos;
printf("\t\t\t %15ld,%15llx\n", size, offset);
}
pBlockEntry = pCluster->GetNext(pBlockEntry);
}

View File

@@ -43,13 +43,13 @@
Optimization="0"
AdditionalIncludeDirectories="..\"
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
MinimalRebuild="true"
MinimalRebuild="false"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
RuntimeLibrary="1"
UsePrecompiledHeader="0"
WarningLevel="3"
WarningLevel="4"
Detect64BitPortabilityProblems="false"
DebugInformationFormat="4"
DebugInformationFormat="1"
/>
<Tool
Name="VCManagedResourceCompilerTool"