| @@ -238,16 +238,9 @@ static int mov_write_enda_tag(AVIOContext *pb) · 237 unmodified lines |
| 238 | return 10; | 238 | return 10; |
| 239 | } | 239 | } |
| 240 | | 240 | |
| 241 | static unsigned int descrLength(unsigned int len) | | |
| 242 | { | | |
| 243 | int i; | | |
| 244 | for(i=1; len>>(7*i); i++); | | |
| 245 | return len + 1 + i; | | |
| 246 | } | | |
| 247 | | | |
| 248 | static void putDescr(AVIOContext *pb, int tag, unsigned int size) | 241 | static void putDescr(AVIOContext *pb, int tag, unsigned int size) |
| 249 | { | 242 | { |
| 250 | int i= descrLength(size) - size - 2; | 243 | int i = 3; |
| 251 | avio_w8(pb, tag); | 244 | avio_w8(pb, tag); |
| 252 | for(; i>0; i--) | 245 | for(; i>0; i--) |
| 253 | avio_w8(pb, (size>>(7*i)) | 0x80); | 246 | avio_w8(pb, (size>>(7*i)) | 0x80); |
| @@ -257,15 +250,14 @@ static void putDescr(AVIOContext *pb, int tag, unsigned int size) · 3 unmodified lines |
| 257 | static int mov_write_esds_tag(AVIOContext *pb, MOVTrack *track) // Basic | 250 | static int mov_write_esds_tag(AVIOContext *pb, MOVTrack *track) // Basic |
| 258 | { | 251 | { |
| 259 | int64_t pos = avio_tell(pb); | 252 | int64_t pos = avio_tell(pb); |
| 260 | int decoderSpecificInfoLen = track->vosLen ? descrLength(track->vosLen):0; | 253 | int decoderSpecificInfoLen = track->vosLen ? 5+track->vosLen : 0; |
| 261 | | 254 | |
| 262 | avio_wb32(pb, 0); // size | 255 | avio_wb32(pb, 0); // size |
| 263 | ffio_wfourcc(pb, "esds"); | 256 | ffio_wfourcc(pb, "esds"); |
| 264 | avio_wb32(pb, 0); // Version | 257 | avio_wb32(pb, 0); // Version |
| 265 | | 258 | |
| 266 | // ES descriptor | 259 | // ES descriptor |
| 267 | putDescr(pb, 0x03, 3 + descrLength(13 + decoderSpecificInfoLen) + | 260 | putDescr(pb, 0x03, 3 + 5+13 + decoderSpecificInfoLen + 5+1); |
| 268 | descrLength(1)); | | |
| 269 | avio_wb16(pb, track->trackID); | 261 | avio_wb16(pb, track->trackID); |
| 270 | avio_w8(pb, 0x00); // flags (= no flags) | 262 | avio_w8(pb, 0x00); // flags (= no flags) |
| 271 | | 263 | |