Originally committed as revision 18831 to svn://svn.ffmpeg.org/ffmpeg/trunk
Unified · Split
| @@ -44,13 +44,14 @@ · 43 unmodified lines | ||
| 44 | 44 | #define MODE_IPOD 0x20 |
| 45 | 45 | |
| 46 | 46 | typedef struct MOVIentry { |
| 47 | − unsigned int flags, size; | |
| 47 | + unsigned int size; | |
| 48 | 48 | uint64_t pos; |
| 49 | 49 | unsigned int samplesInChunk; |
| 50 | − char key_frame; | |
| 51 | 50 | unsigned int entries; |
| 52 | 51 | int cts; |
| 53 | 52 | int64_t dts; |
| 53 | +#define MOV_SYNC_SAMPLE 0x0001 | |
| 54 | + uint32_t flags; | |
| 54 | 55 | } MOVIentry; |
| 55 | 56 | |
| 56 | 57 | typedef struct MOVIndex { |
| @@ -198,7 +199,7 @@ static int mov_write_stss_tag(ByteIOContext *pb, MOVTrack *track) · 141 unmodified lines | ||
| 198 | 199 | entryPos = url_ftell(pb); |
| 199 | 200 | put_be32(pb, track->entry); // entry count |
| 200 | 201 | for (i=0; i<track->entry; i++) { |
| 201 | − if(track->cluster[i].key_frame == 1) { | |
| 202 | + if (track->cluster[i].flags & MOV_SYNC_SAMPLE) { | |
| 202 | 203 | put_be32(pb, i+1); |
| 203 | 204 | index++; |
| 204 | 205 | } |
| @@ -1877,9 +1878,10 @@ static int mov_write_packet(AVFormatContext *s, AVPacket *pkt) · 1672 unmodified lines | ||
| 1877 | 1878 | if (pkt->dts != pkt->pts) |
| 1878 | 1879 | trk->hasBframes = 1; |
| 1879 | 1880 | trk->cluster[trk->entry].cts = pkt->pts - pkt->dts; |
| 1880 | − trk->cluster[trk->entry].key_frame = !!(pkt->flags & PKT_FLAG_KEY); | |
| 1881 | − if(trk->cluster[trk->entry].key_frame) | |
| 1881 | + if (pkt->flags & PKT_FLAG_KEY) { | |
| 1882 | + trk->cluster[trk->entry].flags = MOV_SYNC_SAMPLE; | |
| 1882 | 1883 | trk->hasKeyframes++; |
| 1884 | + } | |
| 1883 | 1885 | trk->entry++; |
| 1884 | 1886 | trk->sampleCount += samplesInChunk; |
| 1885 | 1887 | mov->mdat_size += size; |