annotate src/http/modules/ngx_http_mp4_module.c @ 4367:9c4acdf9b276 stable-1.0

Merge of r4315: Allowed add_header for proxied 206 replies. It was working for nginx's own 206 replies as they are seen as 200 in the headers filter module (range filter goes later in the headers filter chain), but not for proxied replies.
author Maxim Dounin <mdounin@mdounin.ru>
date Wed, 14 Dec 2011 18:06:21 +0000
parents d2516d4ab842
children e30845779761
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4169
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2 /*
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3 * Copyright (C) Igor Sysoev
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4 */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
5
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
6 #include <ngx_config.h>
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
7 #include <ngx_core.h>
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
8 #include <ngx_http.h>
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
9
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
10
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
11 #define NGX_HTTP_MP4_TRAK_ATOM 0
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
12 #define NGX_HTTP_MP4_TKHD_ATOM 1
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
13 #define NGX_HTTP_MP4_MDIA_ATOM 2
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
14 #define NGX_HTTP_MP4_MDHD_ATOM 3
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
15 #define NGX_HTTP_MP4_HDLR_ATOM 4
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
16 #define NGX_HTTP_MP4_MINF_ATOM 5
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
17 #define NGX_HTTP_MP4_VMHD_ATOM 6
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
18 #define NGX_HTTP_MP4_SMHD_ATOM 7
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
19 #define NGX_HTTP_MP4_DINF_ATOM 8
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
20 #define NGX_HTTP_MP4_STBL_ATOM 9
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
21 #define NGX_HTTP_MP4_STSD_ATOM 10
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
22 #define NGX_HTTP_MP4_STTS_ATOM 11
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
23 #define NGX_HTTP_MP4_STTS_DATA 12
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
24 #define NGX_HTTP_MP4_STSS_ATOM 13
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
25 #define NGX_HTTP_MP4_STSS_DATA 14
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
26 #define NGX_HTTP_MP4_CTTS_ATOM 15
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
27 #define NGX_HTTP_MP4_CTTS_DATA 16
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
28 #define NGX_HTTP_MP4_STSC_ATOM 17
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
29 #define NGX_HTTP_MP4_STSC_CHUNK 18
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
30 #define NGX_HTTP_MP4_STSC_DATA 19
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
31 #define NGX_HTTP_MP4_STSZ_ATOM 20
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
32 #define NGX_HTTP_MP4_STSZ_DATA 21
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
33 #define NGX_HTTP_MP4_STCO_ATOM 22
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
34 #define NGX_HTTP_MP4_STCO_DATA 23
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
35 #define NGX_HTTP_MP4_CO64_ATOM 24
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
36 #define NGX_HTTP_MP4_CO64_DATA 25
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
37
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
38 #define NGX_HTTP_MP4_LAST_ATOM NGX_HTTP_MP4_CO64_DATA
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
39
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
40
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
41 typedef struct {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
42 size_t buffer_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
43 size_t max_buffer_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
44 } ngx_http_mp4_conf_t;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
45
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
46
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
47 typedef struct {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
48 u_char chunk[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
49 u_char samples[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
50 u_char id[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
51 } ngx_mp4_stsc_entry_t;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
52
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
53
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
54 typedef struct {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
55 uint32_t timescale;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
56 uint32_t time_to_sample_entries;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
57 uint32_t sample_to_chunk_entries;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
58 uint32_t sync_samples_entries;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
59 uint32_t composition_offset_entries;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
60 uint32_t sample_sizes_entries;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
61 uint32_t chunks;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
62
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
63 ngx_uint_t start_sample;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
64 ngx_uint_t start_chunk;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
65 ngx_uint_t chunk_samples;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
66 uint64_t chunk_samples_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
67 off_t start_offset;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
68
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
69 size_t tkhd_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
70 size_t mdhd_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
71 size_t hdlr_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
72 size_t vmhd_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
73 size_t smhd_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
74 size_t dinf_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
75 size_t size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
76
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
77 ngx_chain_t out[NGX_HTTP_MP4_LAST_ATOM + 1];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
78
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
79 ngx_buf_t trak_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
80 ngx_buf_t tkhd_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
81 ngx_buf_t mdia_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
82 ngx_buf_t mdhd_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
83 ngx_buf_t hdlr_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
84 ngx_buf_t minf_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
85 ngx_buf_t vmhd_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
86 ngx_buf_t smhd_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
87 ngx_buf_t dinf_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
88 ngx_buf_t stbl_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
89 ngx_buf_t stsd_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
90 ngx_buf_t stts_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
91 ngx_buf_t stts_data_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
92 ngx_buf_t stss_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
93 ngx_buf_t stss_data_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
94 ngx_buf_t ctts_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
95 ngx_buf_t ctts_data_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
96 ngx_buf_t stsc_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
97 ngx_buf_t stsc_chunk_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
98 ngx_buf_t stsc_data_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
99 ngx_buf_t stsz_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
100 ngx_buf_t stsz_data_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
101 ngx_buf_t stco_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
102 ngx_buf_t stco_data_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
103 ngx_buf_t co64_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
104 ngx_buf_t co64_data_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
105
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
106 ngx_mp4_stsc_entry_t stsc_chunk_entry;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
107 } ngx_http_mp4_trak_t;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
108
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
109
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
110 typedef struct {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
111 ngx_file_t file;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
112
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
113 u_char *buffer;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
114 u_char *buffer_start;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
115 u_char *buffer_pos;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
116 u_char *buffer_end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
117 size_t buffer_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
118
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
119 off_t offset;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
120 off_t end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
121 off_t content_length;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
122 ngx_uint_t start;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
123 uint32_t timescale;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
124 ngx_http_request_t *request;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
125 ngx_array_t trak;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
126 ngx_http_mp4_trak_t traks[2];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
127
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
128 size_t ftyp_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
129 size_t moov_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
130
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
131 ngx_chain_t *out;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
132 ngx_chain_t ftyp_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
133 ngx_chain_t moov_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
134 ngx_chain_t mvhd_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
135 ngx_chain_t mdat_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
136 ngx_chain_t mdat_data;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
137
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
138 ngx_buf_t ftyp_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
139 ngx_buf_t moov_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
140 ngx_buf_t mvhd_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
141 ngx_buf_t mdat_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
142 ngx_buf_t mdat_data_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
143
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
144 u_char moov_atom_header[8];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
145 u_char mdat_atom_header[16];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
146 } ngx_http_mp4_file_t;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
147
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
148
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
149 typedef struct {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
150 char *name;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
151 ngx_int_t (*handler)(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
152 uint64_t atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
153 } ngx_http_mp4_atom_handler_t;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
154
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
155
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
156 #define ngx_mp4_atom_header(mp4) (mp4->buffer_pos - 8)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
157 #define ngx_mp4_atom_data(mp4) mp4->buffer_pos
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
158 #define ngx_mp4_atom_next(mp4, n) mp4->buffer_pos += n; mp4->offset += n
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
159
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
160
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
161 #define ngx_mp4_set_atom_name(p, n1, n2, n3, n4) \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
162 ((u_char *) (p))[4] = n1; \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
163 ((u_char *) (p))[5] = n2; \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
164 ((u_char *) (p))[6] = n3; \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
165 ((u_char *) (p))[7] = n4
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
166
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
167 #define ngx_mp4_get_32value(p) \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
168 ( (((u_char *) (p))[0] << 24) \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
169 + (((u_char *) (p))[1] << 16) \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
170 + (((u_char *) (p))[2] << 8) \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
171 + (((u_char *) (p))[3]) )
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
172
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
173 #define ngx_mp4_set_32value(p, n) \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
174 ((u_char *) (p))[0] = (u_char) ((n) >> 24); \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
175 ((u_char *) (p))[1] = (u_char) ((n) >> 16); \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
176 ((u_char *) (p))[2] = (u_char) ((n) >> 8); \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
177 ((u_char *) (p))[3] = (u_char) (n)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
178
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
179 #define ngx_mp4_get_64value(p) \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
180 ( ((uint64_t) ((u_char *) (p))[0] << 56) \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
181 + ((uint64_t) ((u_char *) (p))[1] << 48) \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
182 + ((uint64_t) ((u_char *) (p))[2] << 40) \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
183 + ((uint64_t) ((u_char *) (p))[3] << 32) \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
184 + ((uint64_t) ((u_char *) (p))[4] << 24) \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
185 + ( ((u_char *) (p))[5] << 16) \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
186 + ( ((u_char *) (p))[6] << 8) \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
187 + ( ((u_char *) (p))[7]) )
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
188
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
189 #define ngx_mp4_set_64value(p, n) \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
190 ((u_char *) (p))[0] = (u_char) ((uint64_t) (n) >> 56); \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
191 ((u_char *) (p))[1] = (u_char) ((uint64_t) (n) >> 48); \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
192 ((u_char *) (p))[2] = (u_char) ((uint64_t) (n) >> 40); \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
193 ((u_char *) (p))[3] = (u_char) ((uint64_t) (n) >> 32); \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
194 ((u_char *) (p))[4] = (u_char) ( (n) >> 24); \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
195 ((u_char *) (p))[5] = (u_char) ( (n) >> 16); \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
196 ((u_char *) (p))[6] = (u_char) ( (n) >> 8); \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
197 ((u_char *) (p))[7] = (u_char) (n)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
198
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
199 #define ngx_mp4_last_trak(mp4) \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
200 &((ngx_http_mp4_trak_t *) mp4->trak.elts)[mp4->trak.nelts - 1]
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
201
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
202
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
203 static ngx_int_t ngx_http_mp4_process(ngx_http_mp4_file_t *mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
204 static ngx_int_t ngx_http_mp4_read_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
205 ngx_http_mp4_atom_handler_t *atom, uint64_t atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
206 static ngx_int_t ngx_http_mp4_read(ngx_http_mp4_file_t *mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
207 static ngx_int_t ngx_http_mp4_read_ftyp_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
208 uint64_t atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
209 static ngx_int_t ngx_http_mp4_read_moov_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
210 uint64_t atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
211 static ngx_int_t ngx_http_mp4_read_mdat_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
212 uint64_t atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
213 static size_t ngx_http_mp4_update_mdat_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
214 off_t start_offset);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
215 static ngx_int_t ngx_http_mp4_read_mvhd_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
216 uint64_t atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
217 static ngx_int_t ngx_http_mp4_read_trak_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
218 uint64_t atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
219 static void ngx_http_mp4_update_trak_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
220 ngx_http_mp4_trak_t *trak);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
221 static ngx_int_t ngx_http_mp4_read_cmov_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
222 uint64_t atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
223 static ngx_int_t ngx_http_mp4_read_tkhd_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
224 uint64_t atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
225 static ngx_int_t ngx_http_mp4_read_mdia_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
226 uint64_t atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
227 static void ngx_http_mp4_update_mdia_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
228 ngx_http_mp4_trak_t *trak);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
229 static ngx_int_t ngx_http_mp4_read_mdhd_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
230 uint64_t atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
231 static ngx_int_t ngx_http_mp4_read_hdlr_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
232 uint64_t atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
233 static ngx_int_t ngx_http_mp4_read_minf_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
234 uint64_t atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
235 static void ngx_http_mp4_update_minf_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
236 ngx_http_mp4_trak_t *trak);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
237 static ngx_int_t ngx_http_mp4_read_dinf_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
238 uint64_t atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
239 static ngx_int_t ngx_http_mp4_read_vmhd_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
240 uint64_t atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
241 static ngx_int_t ngx_http_mp4_read_smhd_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
242 uint64_t atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
243 static ngx_int_t ngx_http_mp4_read_stbl_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
244 uint64_t atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
245 static void ngx_http_mp4_update_stbl_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
246 ngx_http_mp4_trak_t *trak);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
247 static ngx_int_t ngx_http_mp4_read_stsd_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
248 uint64_t atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
249 static ngx_int_t ngx_http_mp4_read_stts_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
250 uint64_t atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
251 static ngx_int_t ngx_http_mp4_update_stts_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
252 ngx_http_mp4_trak_t *trak);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
253 static ngx_int_t ngx_http_mp4_read_stss_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
254 uint64_t atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
255 static ngx_int_t ngx_http_mp4_update_stss_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
256 ngx_http_mp4_trak_t *trak);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
257 static ngx_int_t ngx_http_mp4_read_ctts_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
258 uint64_t atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
259 static void ngx_http_mp4_update_ctts_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
260 ngx_http_mp4_trak_t *trak);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
261 static ngx_int_t ngx_http_mp4_read_stsc_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
262 uint64_t atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
263 static ngx_int_t ngx_http_mp4_update_stsc_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
264 ngx_http_mp4_trak_t *trak);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
265 static ngx_int_t ngx_http_mp4_read_stsz_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
266 uint64_t atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
267 static void ngx_http_mp4_update_stsz_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
268 ngx_http_mp4_trak_t *trak);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
269 static ngx_int_t ngx_http_mp4_read_stco_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
270 uint64_t atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
271 static ngx_int_t ngx_http_mp4_update_stco_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
272 ngx_http_mp4_trak_t *trak);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
273 static void ngx_http_mp4_adjust_stco_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
274 ngx_http_mp4_trak_t *trak, int32_t adjustment);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
275 static ngx_int_t ngx_http_mp4_read_co64_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
276 uint64_t atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
277 static ngx_int_t ngx_http_mp4_update_co64_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
278 ngx_http_mp4_trak_t *trak);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
279 static void ngx_http_mp4_adjust_co64_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
280 ngx_http_mp4_trak_t *trak, off_t adjustment);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
281 static char *ngx_http_mp4(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
282 static void *ngx_http_mp4_create_conf(ngx_conf_t *cf);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
283 static char *ngx_http_mp4_merge_conf(ngx_conf_t *cf, void *parent, void *child);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
284
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
285 static ngx_command_t ngx_http_mp4_commands[] = {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
286
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
287 { ngx_string("mp4"),
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
288 NGX_HTTP_LOC_CONF|NGX_CONF_NOARGS,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
289 ngx_http_mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
290 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
291 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
292 NULL },
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
293
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
294 { ngx_string("mp4_buffer_size"),
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
295 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
296 ngx_conf_set_size_slot,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
297 NGX_HTTP_LOC_CONF_OFFSET,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
298 offsetof(ngx_http_mp4_conf_t, buffer_size),
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
299 NULL },
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
300
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
301 { ngx_string("mp4_max_buffer_size"),
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
302 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
303 ngx_conf_set_size_slot,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
304 NGX_HTTP_LOC_CONF_OFFSET,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
305 offsetof(ngx_http_mp4_conf_t, max_buffer_size),
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
306 NULL },
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
307
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
308 ngx_null_command
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
309 };
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
310
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
311
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
312 static ngx_http_module_t ngx_http_mp4_module_ctx = {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
313 NULL, /* preconfiguration */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
314 NULL, /* postconfiguration */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
315
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
316 NULL, /* create main configuration */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
317 NULL, /* init main configuration */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
318
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
319 NULL, /* create server configuration */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
320 NULL, /* merge server configuration */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
321
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
322 ngx_http_mp4_create_conf, /* create location configuration */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
323 ngx_http_mp4_merge_conf /* merge location configuration */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
324 };
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
325
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
326
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
327 ngx_module_t ngx_http_mp4_module = {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
328 NGX_MODULE_V1,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
329 &ngx_http_mp4_module_ctx, /* module context */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
330 ngx_http_mp4_commands, /* module directives */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
331 NGX_HTTP_MODULE, /* module type */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
332 NULL, /* init master */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
333 NULL, /* init module */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
334 NULL, /* init process */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
335 NULL, /* init thread */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
336 NULL, /* exit thread */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
337 NULL, /* exit process */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
338 NULL, /* exit master */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
339 NGX_MODULE_V1_PADDING
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
340 };
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
341
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
342
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
343 static ngx_http_mp4_atom_handler_t ngx_http_mp4_atoms[] = {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
344 { "ftyp", ngx_http_mp4_read_ftyp_atom },
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
345 { "moov", ngx_http_mp4_read_moov_atom },
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
346 { "mdat", ngx_http_mp4_read_mdat_atom },
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
347 { NULL, NULL }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
348 };
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
349
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
350 static ngx_http_mp4_atom_handler_t ngx_http_mp4_moov_atoms[] = {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
351 { "mvhd", ngx_http_mp4_read_mvhd_atom },
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
352 { "trak", ngx_http_mp4_read_trak_atom },
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
353 { "cmov", ngx_http_mp4_read_cmov_atom },
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
354 { NULL, NULL }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
355 };
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
356
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
357 static ngx_http_mp4_atom_handler_t ngx_http_mp4_trak_atoms[] = {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
358 { "tkhd", ngx_http_mp4_read_tkhd_atom },
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
359 { "mdia", ngx_http_mp4_read_mdia_atom },
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
360 { NULL, NULL }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
361 };
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
362
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
363 static ngx_http_mp4_atom_handler_t ngx_http_mp4_mdia_atoms[] = {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
364 { "mdhd", ngx_http_mp4_read_mdhd_atom },
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
365 { "hdlr", ngx_http_mp4_read_hdlr_atom },
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
366 { "minf", ngx_http_mp4_read_minf_atom },
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
367 { NULL, NULL }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
368 };
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
369
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
370 static ngx_http_mp4_atom_handler_t ngx_http_mp4_minf_atoms[] = {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
371 { "vmhd", ngx_http_mp4_read_vmhd_atom },
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
372 { "smhd", ngx_http_mp4_read_smhd_atom },
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
373 { "dinf", ngx_http_mp4_read_dinf_atom },
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
374 { "stbl", ngx_http_mp4_read_stbl_atom },
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
375 { NULL, NULL }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
376 };
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
377
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
378 static ngx_http_mp4_atom_handler_t ngx_http_mp4_stbl_atoms[] = {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
379 { "stsd", ngx_http_mp4_read_stsd_atom },
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
380 { "stts", ngx_http_mp4_read_stts_atom },
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
381 { "stss", ngx_http_mp4_read_stss_atom },
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
382 { "ctts", ngx_http_mp4_read_ctts_atom },
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
383 { "stsc", ngx_http_mp4_read_stsc_atom },
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
384 { "stsz", ngx_http_mp4_read_stsz_atom },
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
385 { "stco", ngx_http_mp4_read_stco_atom },
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
386 { "co64", ngx_http_mp4_read_co64_atom },
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
387 { NULL, NULL }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
388 };
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
389
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
390
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
391 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
392 ngx_http_mp4_handler(ngx_http_request_t *r)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
393 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
394 u_char *last;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
395 size_t root;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
396 ngx_int_t rc, start;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
397 ngx_uint_t level;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
398 ngx_str_t path, value;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
399 ngx_log_t *log;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
400 ngx_buf_t *b;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
401 ngx_chain_t out;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
402 ngx_http_mp4_file_t *mp4;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
403 ngx_open_file_info_t of;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
404 ngx_http_core_loc_conf_t *clcf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
405
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
406 if (!(r->method & (NGX_HTTP_GET|NGX_HTTP_HEAD))) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
407 return NGX_HTTP_NOT_ALLOWED;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
408 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
409
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
410 if (r->uri.data[r->uri.len - 1] == '/') {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
411 return NGX_DECLINED;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
412 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
413
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
414 rc = ngx_http_discard_request_body(r);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
415
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
416 if (rc != NGX_OK) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
417 return rc;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
418 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
419
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
420 last = ngx_http_map_uri_to_path(r, &path, &root, 0);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
421 if (last == NULL) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
422 return NGX_HTTP_INTERNAL_SERVER_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
423 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
424
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
425 log = r->connection->log;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
426
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
427 path.len = last - path.data;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
428
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
429 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
430 "http mp4 filename: \"%V\"", &path);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
431
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
432 clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
433
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
434 ngx_memzero(&of, sizeof(ngx_open_file_info_t));
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
435
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
436 of.read_ahead = clcf->read_ahead;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
437 of.directio = NGX_MAX_OFF_T_VALUE;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
438 of.valid = clcf->open_file_cache_valid;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
439 of.min_uses = clcf->open_file_cache_min_uses;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
440 of.errors = clcf->open_file_cache_errors;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
441 of.events = clcf->open_file_cache_events;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
442
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
443 if (ngx_open_cached_file(clcf->open_file_cache, &path, &of, r->pool)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
444 != NGX_OK)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
445 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
446 switch (of.err) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
447
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
448 case 0:
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
449 return NGX_HTTP_INTERNAL_SERVER_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
450
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
451 case NGX_ENOENT:
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
452 case NGX_ENOTDIR:
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
453 case NGX_ENAMETOOLONG:
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
454
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
455 level = NGX_LOG_ERR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
456 rc = NGX_HTTP_NOT_FOUND;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
457 break;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
458
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
459 case NGX_EACCES:
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
460
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
461 level = NGX_LOG_ERR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
462 rc = NGX_HTTP_FORBIDDEN;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
463 break;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
464
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
465 default:
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
466
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
467 level = NGX_LOG_CRIT;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
468 rc = NGX_HTTP_INTERNAL_SERVER_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
469 break;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
470 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
471
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
472 if (rc != NGX_HTTP_NOT_FOUND || clcf->log_not_found) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
473 ngx_log_error(level, log, of.err,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
474 "%s \"%s\" failed", of.failed, path.data);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
475 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
476
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
477 return rc;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
478 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
479
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
480 if (!of.is_file) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
481
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
482 if (ngx_close_file(of.fd) == NGX_FILE_ERROR) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
483 ngx_log_error(NGX_LOG_ALERT, log, ngx_errno,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
484 ngx_close_file_n " \"%s\" failed", path.data);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
485 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
486
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
487 return NGX_DECLINED;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
488 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
489
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
490 r->root_tested = !r->error_page;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
491 r->allow_ranges = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
492
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
493 start = -1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
494 r->headers_out.content_length_n = of.size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
495 mp4 = NULL;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
496 b = NULL;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
497
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
498 if (r->args.len) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
499
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
500 if (ngx_http_arg(r, (u_char *) "start", 5, &value) == NGX_OK) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
501
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
502 /*
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
503 * A Flash player may send start value with a lot of digits
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
504 * after dot so strtod() is used instead of atofp(). NaNs and
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
505 * infinities become negative numbers after (int) conversion.
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
506 */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
507
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
508 ngx_set_errno(0);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
509 start = (int) (strtod((char *) value.data, NULL) * 1000);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
510
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
511 if (ngx_errno == 0 && start >= 0) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
512 r->allow_ranges = 0;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
513
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
514 mp4 = ngx_pcalloc(r->pool, sizeof(ngx_http_mp4_file_t));
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
515 if (mp4 == NULL) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
516 return NGX_HTTP_INTERNAL_SERVER_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
517 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
518
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
519 mp4->file.fd = of.fd;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
520 mp4->file.name = path;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
521 mp4->file.log = r->connection->log;;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
522 mp4->end = of.size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
523 mp4->start = (ngx_uint_t) start;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
524 mp4->request = r;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
525
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
526 switch (ngx_http_mp4_process(mp4)) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
527
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
528 case NGX_DECLINED:
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
529 if (mp4->buffer) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
530 ngx_pfree(r->pool, mp4->buffer);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
531 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
532
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
533 ngx_pfree(r->pool, mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
534 mp4 = NULL;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
535
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
536 break;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
537
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
538 case NGX_OK:
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
539 r->headers_out.content_length_n = mp4->content_length;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
540 break;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
541
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
542 default: /* NGX_ERROR */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
543 if (mp4->buffer) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
544 ngx_pfree(r->pool, mp4->buffer);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
545 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
546
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
547 ngx_pfree(r->pool, mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
548
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
549 return NGX_HTTP_INTERNAL_SERVER_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
550 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
551 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
552 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
553 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
554
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
555 log->action = "sending mp4 to client";
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
556
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
557 if (clcf->directio <= of.size) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
558
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
559 /*
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
560 * DIRECTIO is set on transfer only
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
561 * to allow kernel to cache "moov" atom
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
562 */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
563
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
564 if (ngx_directio_on(of.fd) == NGX_FILE_ERROR) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
565 ngx_log_error(NGX_LOG_ALERT, log, ngx_errno,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
566 ngx_directio_on_n " \"%s\" failed", path.data);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
567 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
568
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
569 of.is_directio = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
570
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
571 if (mp4) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
572 mp4->file.directio = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
573 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
574 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
575
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
576 r->headers_out.status = NGX_HTTP_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
577 r->headers_out.last_modified_time = of.mtime;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
578
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
579 if (ngx_http_set_content_type(r) != NGX_OK) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
580 return NGX_HTTP_INTERNAL_SERVER_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
581 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
582
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
583 if (mp4 == NULL) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
584 b = ngx_pcalloc(r->pool, sizeof(ngx_buf_t));
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
585 if (b == NULL) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
586 return NGX_HTTP_INTERNAL_SERVER_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
587 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
588
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
589 b->file = ngx_pcalloc(r->pool, sizeof(ngx_file_t));
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
590 if (b->file == NULL) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
591 return NGX_HTTP_INTERNAL_SERVER_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
592 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
593 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
594
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
595 rc = ngx_http_send_header(r);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
596
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
597 if (rc == NGX_ERROR || rc > NGX_OK || r->header_only) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
598 return rc;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
599 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
600
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
601 if (mp4) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
602 return ngx_http_output_filter(r, mp4->out);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
603 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
604
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
605 b->file_pos = 0;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
606 b->file_last = of.size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
607
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
608 b->in_file = b->file_last ? 1 : 0;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
609 b->last_buf = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
610 b->last_in_chain = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
611
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
612 b->file->fd = of.fd;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
613 b->file->name = path;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
614 b->file->log = log;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
615 b->file->directio = of.is_directio;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
616
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
617 out.buf = b;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
618 out.next = NULL;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
619
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
620 return ngx_http_output_filter(r, &out);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
621 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
622
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
623
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
624 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
625 ngx_http_mp4_process(ngx_http_mp4_file_t *mp4)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
626 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
627 off_t start_offset, adjustment;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
628 ngx_int_t rc;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
629 ngx_uint_t i, j;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
630 ngx_chain_t **prev;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
631 ngx_http_mp4_trak_t *trak;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
632 ngx_http_mp4_conf_t *conf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
633
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
634 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
635 "mp4 start:%ui", mp4->start);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
636
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
637 conf = ngx_http_get_module_loc_conf(mp4->request, ngx_http_mp4_module);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
638
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
639 mp4->buffer_size = conf->buffer_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
640
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
641 rc = ngx_http_mp4_read_atom(mp4, ngx_http_mp4_atoms, mp4->end);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
642 if (rc != NGX_OK) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
643 return rc;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
644 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
645
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
646 if (mp4->trak.nelts == 0) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
647 ngx_log_error(NGX_LOG_ERR, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
648 "no mp4 trak atoms were found in \"%s\"",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
649 mp4->file.name.data);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
650 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
651 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
652
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
653 if (mp4->mdat_atom.buf == NULL) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
654 ngx_log_error(NGX_LOG_ERR, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
655 "no mp4 mdat atom was found in \"%s\"",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
656 mp4->file.name.data);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
657 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
658 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
659
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
660 prev = &mp4->out;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
661
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
662 if (mp4->ftyp_atom.buf) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
663 *prev = &mp4->ftyp_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
664 prev = &mp4->ftyp_atom.next;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
665 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
666
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
667 *prev = &mp4->moov_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
668 prev = &mp4->moov_atom.next;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
669
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
670 if (mp4->mvhd_atom.buf) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
671 mp4->moov_size += mp4->mvhd_atom_buf.last - mp4->mvhd_atom_buf.pos;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
672 *prev = &mp4->mvhd_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
673 prev = &mp4->mvhd_atom.next;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
674 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
675
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
676 start_offset = mp4->end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
677 trak = mp4->trak.elts;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
678
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
679 for (i = 0; i < mp4->trak.nelts; i++) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
680
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
681 if (ngx_http_mp4_update_stts_atom(mp4, &trak[i]) != NGX_OK) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
682 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
683 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
684
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
685 if (ngx_http_mp4_update_stss_atom(mp4, &trak[i]) != NGX_OK) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
686 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
687 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
688
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
689 ngx_http_mp4_update_ctts_atom(mp4, &trak[i]);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
690
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
691 if (ngx_http_mp4_update_stsc_atom(mp4, &trak[i]) != NGX_OK) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
692 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
693 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
694
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
695 ngx_http_mp4_update_stsz_atom(mp4, &trak[i]);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
696
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
697 if (trak[i].out[NGX_HTTP_MP4_CO64_DATA].buf) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
698 if (ngx_http_mp4_update_co64_atom(mp4, &trak[i]) != NGX_OK) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
699 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
700 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
701
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
702 } else {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
703 if (ngx_http_mp4_update_stco_atom(mp4, &trak[i]) != NGX_OK) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
704 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
705 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
706 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
707
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
708 ngx_http_mp4_update_stbl_atom(mp4, &trak[i]);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
709 ngx_http_mp4_update_minf_atom(mp4, &trak[i]);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
710 trak[i].size += trak[i].mdhd_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
711 trak[i].size += trak[i].hdlr_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
712 ngx_http_mp4_update_mdia_atom(mp4, &trak[i]);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
713 trak[i].size += trak[i].tkhd_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
714 ngx_http_mp4_update_trak_atom(mp4, &trak[i]);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
715
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
716 mp4->moov_size += trak[i].size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
717
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
718 if (start_offset > trak[i].start_offset) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
719 start_offset = trak[i].start_offset;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
720 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
721
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
722 *prev = &trak[i].out[NGX_HTTP_MP4_TRAK_ATOM];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
723 prev = &trak[i].out[NGX_HTTP_MP4_TRAK_ATOM].next;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
724
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
725 for (j = 0; j < NGX_HTTP_MP4_LAST_ATOM + 1; j++) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
726 if (trak[i].out[j].buf) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
727 *prev = &trak[i].out[j];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
728 prev = &trak[i].out[j].next;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
729 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
730 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
731 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
732
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
733 mp4->moov_size += 8;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
734
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
735 ngx_mp4_set_32value(mp4->moov_atom_header, mp4->moov_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
736 ngx_mp4_set_atom_name(mp4->moov_atom_header, 'm', 'o', 'o', 'v');
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
737 mp4->content_length += mp4->moov_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
738
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
739 *prev = &mp4->mdat_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
740
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
741 adjustment = mp4->ftyp_size + mp4->moov_size
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
742 + ngx_http_mp4_update_mdat_atom(mp4, start_offset)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
743 - start_offset;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
744
4173
aaa936b2cab5 Merging r4089 missed in r4170 merge.
Igor Sysoev <igor@sysoev.ru>
parents: 4169
diff changeset
745 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
4169
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
746 "mp4 adjustment:%D", adjustment);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
747
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
748 for (i = 0; i < mp4->trak.nelts; i++) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
749 if (trak[i].out[NGX_HTTP_MP4_CO64_DATA].buf) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
750 ngx_http_mp4_adjust_co64_atom(mp4, &trak[i], adjustment);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
751 } else {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
752 ngx_http_mp4_adjust_stco_atom(mp4, &trak[i], (int32_t) adjustment);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
753 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
754 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
755
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
756 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
757 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
758
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
759
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
760 typedef struct {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
761 u_char size[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
762 u_char name[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
763 } ngx_mp4_atom_header_t;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
764
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
765 typedef struct {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
766 u_char size[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
767 u_char name[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
768 u_char size64[8];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
769 } ngx_mp4_atom_header64_t;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
770
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
771
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
772 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
773 ngx_http_mp4_read_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
774 ngx_http_mp4_atom_handler_t *atom, uint64_t atom_data_size)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
775 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
776 off_t end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
777 size_t atom_header_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
778 u_char *atom_header, *atom_name;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
779 uint64_t atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
780 ngx_int_t rc;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
781 ngx_uint_t n;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
782
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
783 end = mp4->offset + atom_data_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
784
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
785 while (mp4->offset < end) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
786
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
787 if (mp4->buffer_pos + sizeof(uint32_t) > mp4->buffer_end) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
788 if (ngx_http_mp4_read(mp4) != NGX_OK) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
789 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
790 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
791 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
792
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
793 atom_header = mp4->buffer_pos;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
794 atom_size = ngx_mp4_get_32value(atom_header);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
795 atom_header_size = sizeof(ngx_mp4_atom_header_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
796
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
797 if (atom_size == 0) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
798 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
799 "mp4 atom end");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
800 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
801 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
802
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
803 if (atom_size < sizeof(ngx_mp4_atom_header_t)) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
804
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
805 if (atom_size == 1) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
806
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
807 if (mp4->buffer_pos + sizeof(ngx_mp4_atom_header64_t)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
808 > mp4->buffer_end)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
809 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
810 if (ngx_http_mp4_read(mp4) != NGX_OK) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
811 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
812 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
813
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
814 atom_header = mp4->buffer_pos;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
815 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
816
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
817 /* 64-bit atom size */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
818 atom_size = ngx_mp4_get_64value(atom_header + 8);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
819 atom_header_size = sizeof(ngx_mp4_atom_header64_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
820
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
821 } else {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
822 ngx_log_error(NGX_LOG_ERR, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
823 "\"%s\" mp4 atom is too small:%uL",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
824 mp4->file.name.data, atom_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
825 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
826 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
827 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
828
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
829 if (mp4->buffer_pos + sizeof(ngx_mp4_atom_header_t) > mp4->buffer_end) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
830 if (ngx_http_mp4_read(mp4) != NGX_OK) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
831 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
832 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
833
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
834 atom_header = mp4->buffer_pos;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
835 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
836
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
837 atom_name = atom_header + sizeof(uint32_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
838
4173
aaa936b2cab5 Merging r4089 missed in r4170 merge.
Igor Sysoev <igor@sysoev.ru>
parents: 4169
diff changeset
839 ngx_log_debug4(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
4169
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
840 "mp4 atom: %*s @%O:%uL",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
841 4, atom_name, mp4->offset, atom_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
842
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
843 for (n = 0; atom[n].name; n++) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
844
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
845 if (ngx_strncmp(atom_name, atom[n].name, 4) == 0) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
846
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
847 ngx_mp4_atom_next(mp4, atom_header_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
848
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
849 rc = atom[n].handler(mp4, atom_size - atom_header_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
850 if (rc != NGX_OK) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
851 return rc;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
852 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
853
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
854 goto next;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
855 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
856 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
857
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
858 ngx_mp4_atom_next(mp4, atom_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
859
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
860 next:
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
861 continue;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
862 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
863
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
864 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
865 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
866
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
867
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
868 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
869 ngx_http_mp4_read(ngx_http_mp4_file_t *mp4)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
870 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
871 ngx_int_t n;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
872
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
873 if (mp4->offset + (off_t) mp4->buffer_size > mp4->end) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
874 mp4->buffer_size = (size_t) (mp4->end - mp4->offset);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
875 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
876
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
877 if (mp4->buffer == NULL) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
878 mp4->buffer = ngx_palloc(mp4->request->pool, mp4->buffer_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
879 if (mp4->buffer == NULL) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
880 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
881 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
882
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
883 mp4->buffer_start = mp4->buffer;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
884 mp4->buffer_end = mp4->buffer + mp4->buffer_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
885 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
886
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
887 n = ngx_read_file(&mp4->file, mp4->buffer_start, mp4->buffer_size,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
888 mp4->offset);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
889
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
890 if (n == NGX_ERROR) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
891 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
892 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
893
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
894 if (n == 0) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
895 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
896 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
897
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
898 mp4->buffer_pos = mp4->buffer_start;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
899
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
900 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
901 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
902
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
903
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
904 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
905 ngx_http_mp4_read_ftyp_atom(ngx_http_mp4_file_t *mp4, uint64_t atom_data_size)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
906 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
907 u_char *ftyp_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
908 size_t atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
909 ngx_buf_t *atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
910
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
911 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0, "mp4 ftyp atom");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
912
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
913 if (atom_data_size > 1024) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
914 ngx_log_error(NGX_LOG_ERR, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
915 "\"%s\" mp4 ftyp atom is too large:%uL",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
916 mp4->file.name.data, atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
917 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
918 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
919
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
920 atom_size = sizeof(ngx_mp4_atom_header_t) + (size_t) atom_data_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
921
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
922 ftyp_atom = ngx_palloc(mp4->request->pool, atom_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
923 if (ftyp_atom == NULL) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
924 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
925 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
926
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
927 ngx_mp4_set_32value(ftyp_atom, atom_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
928 ngx_mp4_set_atom_name(ftyp_atom, 'f', 't', 'y', 'p');
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
929
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
930 /*
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
931 * only moov atom content is guaranteed to be in mp4->buffer
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
932 * during sending response, so ftyp atom content should be copied
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
933 */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
934 ngx_memcpy(ftyp_atom + sizeof(ngx_mp4_atom_header_t),
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
935 ngx_mp4_atom_data(mp4), (size_t) atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
936
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
937 atom = &mp4->ftyp_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
938 atom->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
939 atom->pos = ftyp_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
940 atom->last = ftyp_atom + atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
941
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
942 mp4->ftyp_atom.buf = atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
943 mp4->ftyp_size = atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
944 mp4->content_length = atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
945
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
946 ngx_mp4_atom_next(mp4, atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
947
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
948 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
949 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
950
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
951
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
952 /*
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
953 * Small excess buffer to process atoms after moov atom, mp4->buffer_start
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
954 * will be set to this buffer part after moov atom processing.
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
955 */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
956 #define NGX_HTTP_MP4_MOOV_BUFFER_EXCESS (4 * 1024)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
957
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
958 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
959 ngx_http_mp4_read_moov_atom(ngx_http_mp4_file_t *mp4, uint64_t atom_data_size)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
960 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
961 ngx_int_t rc;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
962 ngx_uint_t no_mdat;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
963 ngx_buf_t *atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
964 ngx_http_mp4_conf_t *conf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
965
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
966 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0, "mp4 moov atom");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
967
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
968 no_mdat = (mp4->mdat_atom.buf == NULL);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
969
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
970 if (no_mdat && mp4->start == 0) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
971 /*
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
972 * send original file if moov atom resides before
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
973 * mdat atom and client requests integral file
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
974 */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
975 return NGX_DECLINED;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
976 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
977
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
978 conf = ngx_http_get_module_loc_conf(mp4->request, ngx_http_mp4_module);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
979
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
980 if (atom_data_size > mp4->buffer_size) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
981
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
982 if (atom_data_size > conf->max_buffer_size) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
983 ngx_log_error(NGX_LOG_ERR, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
984 "\"%s\" mp4 moov atom is too large:%uL, "
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
985 "you may want to increase mp4_max_buffer_size",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
986 mp4->file.name.data, atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
987 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
988 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
989
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
990 ngx_pfree(mp4->request->pool, mp4->buffer);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
991 mp4->buffer = NULL;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
992 mp4->buffer_pos = NULL;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
993 mp4->buffer_end = NULL;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
994
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
995 mp4->buffer_size = (size_t) atom_data_size
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
996 + NGX_HTTP_MP4_MOOV_BUFFER_EXCESS * no_mdat;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
997 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
998
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
999 mp4->trak.elts = &mp4->traks;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1000 mp4->trak.size = sizeof(ngx_http_mp4_trak_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1001 mp4->trak.nalloc = 2;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1002 mp4->trak.pool = mp4->request->pool;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1003
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1004 atom = &mp4->moov_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1005 atom->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1006 atom->pos = mp4->moov_atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1007 atom->last = mp4->moov_atom_header + 8;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1008
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1009 mp4->moov_atom.buf = &mp4->moov_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1010
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1011 rc = ngx_http_mp4_read_atom(mp4, ngx_http_mp4_moov_atoms, atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1012
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1013 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0, "mp4 moov atom done");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1014
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1015 if (no_mdat) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1016 mp4->buffer_start = mp4->buffer_pos;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1017 mp4->buffer_size = NGX_HTTP_MP4_MOOV_BUFFER_EXCESS;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1018
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1019 } else {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1020 /* skip atoms after moov atom */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1021 mp4->offset = mp4->end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1022 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1023
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1024 return rc;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1025 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1026
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1027
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1028 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1029 ngx_http_mp4_read_mdat_atom(ngx_http_mp4_file_t *mp4, uint64_t atom_data_size)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1030 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1031 ngx_buf_t *data;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1032
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1033 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0, "mp4 mdat atom");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1034
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1035 data = &mp4->mdat_data_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1036 data->file = &mp4->file;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1037 data->in_file = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1038 data->last_buf = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1039 data->last_in_chain = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1040 data->file_last = mp4->offset + atom_data_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1041
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1042 mp4->mdat_atom.buf = &mp4->mdat_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1043 mp4->mdat_atom.next = &mp4->mdat_data;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1044 mp4->mdat_data.buf = data;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1045
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1046 if (mp4->trak.nelts) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1047 /* skip atoms after mdat atom */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1048 mp4->offset = mp4->end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1049
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1050 } else {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1051 ngx_mp4_atom_next(mp4, atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1052 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1053
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1054 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1055 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1056
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1057
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1058 static size_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1059 ngx_http_mp4_update_mdat_atom(ngx_http_mp4_file_t *mp4, off_t start_offset)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1060 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1061 off_t atom_data_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1062 u_char *atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1063 uint32_t atom_header_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1064 uint64_t atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1065 ngx_buf_t *atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1066
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1067 atom_data_size = mp4->mdat_data.buf->file_last - start_offset;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1068 mp4->mdat_data.buf->file_pos = start_offset;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1069
4173
aaa936b2cab5 Merging r4089 missed in r4170 merge.
Igor Sysoev <igor@sysoev.ru>
parents: 4169
diff changeset
1070 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
4169
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1071 "mdat new offset @%O:%O", start_offset, atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1072
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1073 atom_header = mp4->mdat_atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1074
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1075 if ((uint64_t) atom_data_size > 0xffffffff) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1076 atom_size = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1077 atom_header_size = sizeof(ngx_mp4_atom_header64_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1078 ngx_mp4_set_64value(atom_header + sizeof(ngx_mp4_atom_header_t),
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1079 sizeof(ngx_mp4_atom_header64_t) + atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1080 } else {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1081 atom_size = sizeof(ngx_mp4_atom_header_t) + atom_data_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1082 atom_header_size = sizeof(ngx_mp4_atom_header_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1083 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1084
4289
d0dcaff8862b Merge of r4283:
Igor Sysoev <igor@sysoev.ru>
parents: 4251
diff changeset
1085 mp4->content_length += atom_header_size + atom_data_size;
d0dcaff8862b Merge of r4283:
Igor Sysoev <igor@sysoev.ru>
parents: 4251
diff changeset
1086
4169
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1087 ngx_mp4_set_32value(atom_header, atom_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1088 ngx_mp4_set_atom_name(atom_header, 'm', 'd', 'a', 't');
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1089
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1090 atom = &mp4->mdat_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1091 atom->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1092 atom->pos = atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1093 atom->last = atom_header + atom_header_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1094
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1095 return atom_header_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1096 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1097
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1098
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1099 typedef struct {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1100 u_char size[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1101 u_char name[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1102 u_char version[1];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1103 u_char flags[3];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1104 u_char creation_time[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1105 u_char modification_time[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1106 u_char timescale[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1107 u_char duration[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1108 u_char rate[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1109 u_char volume[2];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1110 u_char reserved[10];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1111 u_char matrix[36];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1112 u_char preview_time[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1113 u_char preview_duration[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1114 u_char poster_time[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1115 u_char selection_time[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1116 u_char selection_duration[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1117 u_char current_time[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1118 u_char next_track_id[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1119 } ngx_mp4_mvhd_atom_t;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1120
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1121 typedef struct {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1122 u_char size[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1123 u_char name[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1124 u_char version[1];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1125 u_char flags[3];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1126 u_char creation_time[8];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1127 u_char modification_time[8];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1128 u_char timescale[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1129 u_char duration[8];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1130 u_char rate[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1131 u_char volume[2];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1132 u_char reserved[10];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1133 u_char matrix[36];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1134 u_char preview_time[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1135 u_char preview_duration[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1136 u_char poster_time[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1137 u_char selection_time[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1138 u_char selection_duration[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1139 u_char current_time[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1140 u_char next_track_id[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1141 } ngx_mp4_mvhd64_atom_t;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1142
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1143
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1144 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1145 ngx_http_mp4_read_mvhd_atom(ngx_http_mp4_file_t *mp4, uint64_t atom_data_size)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1146 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1147 u_char *atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1148 size_t atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1149 uint32_t timescale;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1150 uint64_t duration;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1151 ngx_buf_t *atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1152 ngx_mp4_mvhd_atom_t *mvhd_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1153 ngx_mp4_mvhd64_atom_t *mvhd64_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1154
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1155 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0, "mp4 mvhd atom");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1156
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1157 atom_header = ngx_mp4_atom_header(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1158 mvhd_atom = (ngx_mp4_mvhd_atom_t *) atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1159 mvhd64_atom = (ngx_mp4_mvhd64_atom_t *) atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1160 ngx_mp4_set_atom_name(atom_header, 'm', 'v', 'h', 'd');
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1161
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1162 if (mvhd_atom->version[0] == 0) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1163 /* version 0: 32-bit duration */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1164 timescale = ngx_mp4_get_32value(mvhd_atom->timescale);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1165 duration = ngx_mp4_get_32value(mvhd_atom->duration);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1166
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1167 } else {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1168 /* version 1: 64-bit duration */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1169 timescale = ngx_mp4_get_32value(mvhd64_atom->timescale);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1170 duration = ngx_mp4_get_64value(mvhd64_atom->duration);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1171 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1172
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1173 mp4->timescale = timescale;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1174
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1175 ngx_log_debug3(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1176 "mvhd timescale:%uD, duration:%uL, time:%.3fs",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1177 timescale, duration, (double) duration / timescale);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1178
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1179 duration -= (uint64_t) mp4->start * timescale / 1000;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1180
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1181 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1182 "mvhd new duration:%uL, time:%.3fs",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1183 duration, (double) duration / timescale);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1184
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1185 atom_size = sizeof(ngx_mp4_atom_header_t) + (size_t) atom_data_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1186 ngx_mp4_set_32value(mvhd_atom->size, atom_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1187
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1188 if (mvhd_atom->version[0] == 0) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1189 ngx_mp4_set_32value(mvhd_atom->duration, duration);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1190
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1191 } else {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1192 ngx_mp4_set_64value(mvhd64_atom->duration, duration);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1193 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1194
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1195 atom = &mp4->mvhd_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1196 atom->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1197 atom->pos = atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1198 atom->last = atom_header + atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1199
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1200 mp4->mvhd_atom.buf = atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1201
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1202 ngx_mp4_atom_next(mp4, atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1203
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1204 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1205 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1206
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1207
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1208 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1209 ngx_http_mp4_read_trak_atom(ngx_http_mp4_file_t *mp4, uint64_t atom_data_size)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1210 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1211 u_char *atom_header, *atom_end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1212 off_t atom_file_end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1213 ngx_int_t rc;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1214 ngx_buf_t *atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1215 ngx_http_mp4_trak_t *trak;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1216
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1217 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0, "mp4 trak atom");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1218
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1219 trak = ngx_array_push(&mp4->trak);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1220 if (trak == NULL) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1221 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1222 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1223
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1224 ngx_memzero(trak, sizeof(ngx_http_mp4_trak_t));
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1225
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1226 atom_header = ngx_mp4_atom_header(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1227 ngx_mp4_set_atom_name(atom_header, 't', 'r', 'a', 'k');
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1228
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1229 atom = &trak->trak_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1230 atom->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1231 atom->pos = atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1232 atom->last = atom_header + sizeof(ngx_mp4_atom_header_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1233
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1234 trak->out[NGX_HTTP_MP4_TRAK_ATOM].buf = atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1235
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1236 atom_end = mp4->buffer_pos + atom_data_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1237 atom_file_end = mp4->offset + atom_data_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1238
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1239 rc = ngx_http_mp4_read_atom(mp4, ngx_http_mp4_trak_atoms, atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1240
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1241 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1242 "mp4 trak atom: %i", rc);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1243
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1244 if (rc == NGX_DECLINED) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1245 /* skip this trak */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1246 ngx_memzero(trak, sizeof(ngx_http_mp4_trak_t));
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1247 mp4->trak.nelts--;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1248 mp4->buffer_pos = atom_end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1249 mp4->offset = atom_file_end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1250 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1251 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1252
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1253 return rc;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1254 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1255
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1256
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1257 static void
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1258 ngx_http_mp4_update_trak_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1259 ngx_http_mp4_trak_t *trak)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1260 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1261 ngx_buf_t *atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1262
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1263 trak->size += sizeof(ngx_mp4_atom_header_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1264 atom = &trak->trak_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1265 ngx_mp4_set_32value(atom->pos, trak->size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1266 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1267
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1268
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1269 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1270 ngx_http_mp4_read_cmov_atom(ngx_http_mp4_file_t *mp4, uint64_t atom_data_size)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1271 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1272 ngx_log_error(NGX_LOG_ERR, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1273 "\"%s\" mp4 compressed moov atom (cmov) is not supported",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1274 mp4->file.name.data);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1275
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1276 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1277 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1278
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1279
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1280 typedef struct {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1281 u_char size[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1282 u_char name[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1283 u_char version[1];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1284 u_char flags[3];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1285 u_char creation_time[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1286 u_char modification_time[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1287 u_char track_id[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1288 u_char reserved1[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1289 u_char duration[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1290 u_char reserved2[8];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1291 u_char layer[2];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1292 u_char group[2];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1293 u_char volume[2];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1294 u_char reverved3[2];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1295 u_char matrix[36];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1296 u_char width[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1297 u_char heigth[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1298 } ngx_mp4_tkhd_atom_t;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1299
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1300 typedef struct {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1301 u_char size[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1302 u_char name[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1303 u_char version[1];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1304 u_char flags[3];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1305 u_char creation_time[8];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1306 u_char modification_time[8];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1307 u_char track_id[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1308 u_char reserved1[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1309 u_char duration[8];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1310 u_char reserved2[8];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1311 u_char layer[2];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1312 u_char group[2];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1313 u_char volume[2];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1314 u_char reverved3[2];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1315 u_char matrix[36];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1316 u_char width[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1317 u_char heigth[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1318 } ngx_mp4_tkhd64_atom_t;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1319
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1320
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1321 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1322 ngx_http_mp4_read_tkhd_atom(ngx_http_mp4_file_t *mp4, uint64_t atom_data_size)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1323 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1324 u_char *atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1325 size_t atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1326 uint64_t duration;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1327 ngx_buf_t *atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1328 ngx_http_mp4_trak_t *trak;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1329 ngx_mp4_tkhd_atom_t *tkhd_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1330 ngx_mp4_tkhd64_atom_t *tkhd64_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1331
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1332 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0, "mp4 tkhd atom");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1333
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1334 atom_header = ngx_mp4_atom_header(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1335 tkhd_atom = (ngx_mp4_tkhd_atom_t *) atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1336 tkhd64_atom = (ngx_mp4_tkhd64_atom_t *) atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1337 ngx_mp4_set_atom_name(tkhd_atom, 't', 'k', 'h', 'd');
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1338
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1339 if (tkhd_atom->version[0] == 0) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1340 /* version 0: 32-bit duration */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1341 duration = ngx_mp4_get_32value(tkhd_atom->duration);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1342
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1343 } else {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1344 /* version 1: 64-bit duration */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1345 duration = ngx_mp4_get_64value(tkhd64_atom->duration);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1346 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1347
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1348 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1349 "tkhd duration:%uL, time:%.3fs",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1350 duration, (double) duration / mp4->timescale);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1351
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1352 duration -= (uint64_t) mp4->start * mp4->timescale / 1000;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1353
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1354 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1355 "tkhd new duration:%uL, time:%.3fs",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1356 duration, (double) duration / mp4->timescale);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1357
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1358 atom_size = sizeof(ngx_mp4_atom_header_t) + (size_t) atom_data_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1359
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1360 trak = ngx_mp4_last_trak(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1361 trak->tkhd_size = atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1362
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1363 ngx_mp4_set_32value(tkhd_atom->size, atom_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1364
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1365 if (tkhd_atom->version[0] == 0) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1366 ngx_mp4_set_32value(tkhd_atom->duration, duration);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1367
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1368 } else {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1369 ngx_mp4_set_64value(tkhd64_atom->duration, duration);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1370 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1371
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1372 atom = &trak->tkhd_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1373 atom->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1374 atom->pos = atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1375 atom->last = atom_header + atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1376
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1377 trak->out[NGX_HTTP_MP4_TKHD_ATOM].buf = atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1378
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1379 ngx_mp4_atom_next(mp4, atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1380
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1381 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1382 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1383
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1384
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1385 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1386 ngx_http_mp4_read_mdia_atom(ngx_http_mp4_file_t *mp4, uint64_t atom_data_size)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1387 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1388 u_char *atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1389 ngx_buf_t *atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1390 ngx_http_mp4_trak_t *trak;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1391
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1392 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0, "process mdia atom");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1393
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1394 atom_header = ngx_mp4_atom_header(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1395 ngx_mp4_set_atom_name(atom_header, 'm', 'd', 'i', 'a');
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1396
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1397 trak = ngx_mp4_last_trak(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1398
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1399 atom = &trak->mdia_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1400 atom->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1401 atom->pos = atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1402 atom->last = atom_header + sizeof(ngx_mp4_atom_header_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1403
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1404 trak->out[NGX_HTTP_MP4_MDIA_ATOM].buf = atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1405
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1406 return ngx_http_mp4_read_atom(mp4, ngx_http_mp4_mdia_atoms, atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1407 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1408
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1409
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1410 static void
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1411 ngx_http_mp4_update_mdia_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1412 ngx_http_mp4_trak_t *trak)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1413 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1414 ngx_buf_t *atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1415
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1416 trak->size += sizeof(ngx_mp4_atom_header_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1417 atom = &trak->mdia_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1418 ngx_mp4_set_32value(atom->pos, trak->size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1419 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1420
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1421
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1422 typedef struct {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1423 u_char size[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1424 u_char name[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1425 u_char version[1];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1426 u_char flags[3];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1427 u_char creation_time[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1428 u_char modification_time[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1429 u_char timescale[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1430 u_char duration[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1431 u_char language[2];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1432 u_char quality[2];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1433 } ngx_mp4_mdhd_atom_t;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1434
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1435 typedef struct {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1436 u_char size[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1437 u_char name[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1438 u_char version[1];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1439 u_char flags[3];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1440 u_char creation_time[8];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1441 u_char modification_time[8];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1442 u_char timescale[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1443 u_char duration[8];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1444 u_char language[2];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1445 u_char quality[2];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1446 } ngx_mp4_mdhd64_atom_t;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1447
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1448
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1449 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1450 ngx_http_mp4_read_mdhd_atom(ngx_http_mp4_file_t *mp4, uint64_t atom_data_size)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1451 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1452 u_char *atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1453 size_t atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1454 uint32_t timescale;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1455 uint64_t duration;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1456 ngx_buf_t *atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1457 ngx_http_mp4_trak_t *trak;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1458 ngx_mp4_mdhd_atom_t *mdhd_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1459 ngx_mp4_mdhd64_atom_t *mdhd64_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1460
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1461 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0, "mp4 mdhd atom");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1462
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1463 atom_header = ngx_mp4_atom_header(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1464 mdhd_atom = (ngx_mp4_mdhd_atom_t *) atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1465 mdhd64_atom = (ngx_mp4_mdhd64_atom_t *) atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1466 ngx_mp4_set_atom_name(mdhd_atom, 'm', 'd', 'h', 'd');
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1467
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1468 if (mdhd_atom->version[0] == 0) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1469 /* version 0: everything is 32-bit */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1470 timescale = ngx_mp4_get_32value(mdhd_atom->timescale);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1471 duration = ngx_mp4_get_32value(mdhd_atom->duration);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1472
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1473 } else {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1474 /* version 1: 64-bit duration and 32-bit timescale */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1475 timescale = ngx_mp4_get_32value(mdhd64_atom->timescale);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1476 duration = ngx_mp4_get_64value(mdhd64_atom->duration);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1477 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1478
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1479 ngx_log_debug3(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1480 "mdhd timescale:%uD, duration:%uL, time:%.3fs",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1481 timescale, duration, (double) duration / timescale);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1482
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1483 duration -= (uint64_t) mp4->start * timescale / 1000;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1484
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1485 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1486 "mdhd new duration:%uL, time:%.3fs",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1487 duration, (double) duration / timescale);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1488
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1489 atom_size = sizeof(ngx_mp4_atom_header_t) + (size_t) atom_data_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1490
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1491 trak = ngx_mp4_last_trak(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1492 trak->mdhd_size = atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1493 trak->timescale = timescale;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1494
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1495 ngx_mp4_set_32value(mdhd_atom->size, atom_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1496
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1497 if (mdhd_atom->version[0] == 0) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1498 ngx_mp4_set_32value(mdhd_atom->duration, duration);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1499
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1500 } else {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1501 ngx_mp4_set_64value(mdhd64_atom->duration, duration);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1502 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1503
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1504 atom = &trak->mdhd_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1505 atom->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1506 atom->pos = atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1507 atom->last = atom_header + atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1508
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1509 trak->out[NGX_HTTP_MP4_MDHD_ATOM].buf = atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1510
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1511 ngx_mp4_atom_next(mp4, atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1512
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1513 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1514 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1515
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1516
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1517 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1518 ngx_http_mp4_read_hdlr_atom(ngx_http_mp4_file_t *mp4, uint64_t atom_data_size)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1519 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1520 u_char *atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1521 size_t atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1522 ngx_buf_t *atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1523 ngx_http_mp4_trak_t *trak;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1524
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1525 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0, "mp4 hdlr atom");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1526
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1527 atom_header = ngx_mp4_atom_header(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1528 atom_size = sizeof(ngx_mp4_atom_header_t) + (size_t) atom_data_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1529 ngx_mp4_set_32value(atom_header, atom_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1530 ngx_mp4_set_atom_name(atom_header, 'h', 'd', 'l', 'r');
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1531
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1532 trak = ngx_mp4_last_trak(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1533
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1534 atom = &trak->hdlr_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1535 atom->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1536 atom->pos = atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1537 atom->last = atom_header + atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1538
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1539 trak->hdlr_size = atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1540 trak->out[NGX_HTTP_MP4_HDLR_ATOM].buf = atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1541
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1542 ngx_mp4_atom_next(mp4, atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1543
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1544 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1545 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1546
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1547
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1548 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1549 ngx_http_mp4_read_minf_atom(ngx_http_mp4_file_t *mp4, uint64_t atom_data_size)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1550 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1551 u_char *atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1552 ngx_buf_t *atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1553 ngx_http_mp4_trak_t *trak;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1554
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1555 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0, "process minf atom");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1556
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1557 atom_header = ngx_mp4_atom_header(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1558 ngx_mp4_set_atom_name(atom_header, 'm', 'i', 'n', 'f');
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1559
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1560 trak = ngx_mp4_last_trak(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1561
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1562 atom = &trak->minf_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1563 atom->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1564 atom->pos = atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1565 atom->last = atom_header + sizeof(ngx_mp4_atom_header_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1566
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1567 trak->out[NGX_HTTP_MP4_MINF_ATOM].buf = atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1568
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1569 return ngx_http_mp4_read_atom(mp4, ngx_http_mp4_minf_atoms, atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1570 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1571
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1572
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1573 static void
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1574 ngx_http_mp4_update_minf_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1575 ngx_http_mp4_trak_t *trak)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1576 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1577 ngx_buf_t *atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1578
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1579 trak->size += sizeof(ngx_mp4_atom_header_t)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1580 + trak->vmhd_size
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1581 + trak->smhd_size
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1582 + trak->dinf_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1583 atom = &trak->minf_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1584 ngx_mp4_set_32value(atom->pos, trak->size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1585 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1586
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1587
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1588 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1589 ngx_http_mp4_read_vmhd_atom(ngx_http_mp4_file_t *mp4, uint64_t atom_data_size)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1590 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1591 u_char *atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1592 size_t atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1593 ngx_buf_t *atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1594 ngx_http_mp4_trak_t *trak;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1595
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1596 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0, "mp4 vmhd atom");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1597
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1598 atom_header = ngx_mp4_atom_header(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1599 atom_size = sizeof(ngx_mp4_atom_header_t) + (size_t) atom_data_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1600 ngx_mp4_set_32value(atom_header, atom_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1601 ngx_mp4_set_atom_name(atom_header, 'v', 'm', 'h', 'd');
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1602
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1603 trak = ngx_mp4_last_trak(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1604
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1605 atom = &trak->vmhd_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1606 atom->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1607 atom->pos = atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1608 atom->last = atom_header + atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1609
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1610 trak->vmhd_size += atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1611 trak->out[NGX_HTTP_MP4_VMHD_ATOM].buf = atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1612
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1613 ngx_mp4_atom_next(mp4, atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1614
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1615 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1616 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1617
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1618
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1619 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1620 ngx_http_mp4_read_smhd_atom(ngx_http_mp4_file_t *mp4, uint64_t atom_data_size)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1621 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1622 u_char *atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1623 size_t atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1624 ngx_buf_t *atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1625 ngx_http_mp4_trak_t *trak;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1626
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1627 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0, "mp4 smhd atom");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1628
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1629 atom_header = ngx_mp4_atom_header(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1630 atom_size = sizeof(ngx_mp4_atom_header_t) + (size_t) atom_data_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1631 ngx_mp4_set_32value(atom_header, atom_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1632 ngx_mp4_set_atom_name(atom_header, 's', 'm', 'h', 'd');
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1633
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1634 trak = ngx_mp4_last_trak(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1635
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1636 atom = &trak->smhd_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1637 atom->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1638 atom->pos = atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1639 atom->last = atom_header + atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1640
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1641 trak->vmhd_size += atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1642 trak->out[NGX_HTTP_MP4_SMHD_ATOM].buf = atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1643
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1644 ngx_mp4_atom_next(mp4, atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1645
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1646 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1647 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1648
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1649
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1650 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1651 ngx_http_mp4_read_dinf_atom(ngx_http_mp4_file_t *mp4, uint64_t atom_data_size)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1652 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1653 u_char *atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1654 size_t atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1655 ngx_buf_t *atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1656 ngx_http_mp4_trak_t *trak;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1657
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1658 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0, "mp4 dinf atom");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1659
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1660 atom_header = ngx_mp4_atom_header(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1661 atom_size = sizeof(ngx_mp4_atom_header_t) + (size_t) atom_data_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1662 ngx_mp4_set_32value(atom_header, atom_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1663 ngx_mp4_set_atom_name(atom_header, 'd', 'i', 'n', 'f');
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1664
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1665 trak = ngx_mp4_last_trak(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1666
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1667 atom = &trak->dinf_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1668 atom->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1669 atom->pos = atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1670 atom->last = atom_header + atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1671
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1672 trak->dinf_size += atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1673 trak->out[NGX_HTTP_MP4_DINF_ATOM].buf = atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1674
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1675 ngx_mp4_atom_next(mp4, atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1676
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1677 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1678 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1679
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1680
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1681 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1682 ngx_http_mp4_read_stbl_atom(ngx_http_mp4_file_t *mp4, uint64_t atom_data_size)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1683 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1684 u_char *atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1685 ngx_buf_t *atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1686 ngx_http_mp4_trak_t *trak;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1687
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1688 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0, "process stbl atom");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1689
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1690 atom_header = ngx_mp4_atom_header(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1691 ngx_mp4_set_atom_name(atom_header, 's', 't', 'b', 'l');
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1692
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1693 trak = ngx_mp4_last_trak(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1694
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1695 atom = &trak->stbl_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1696 atom->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1697 atom->pos = atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1698 atom->last = atom_header + sizeof(ngx_mp4_atom_header_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1699
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1700 trak->out[NGX_HTTP_MP4_STBL_ATOM].buf = atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1701
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1702 return ngx_http_mp4_read_atom(mp4, ngx_http_mp4_stbl_atoms, atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1703 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1704
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1705
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1706 static void
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1707 ngx_http_mp4_update_stbl_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1708 ngx_http_mp4_trak_t *trak)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1709 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1710 ngx_buf_t *atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1711
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1712 trak->size += sizeof(ngx_mp4_atom_header_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1713 atom = &trak->stbl_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1714 ngx_mp4_set_32value(atom->pos, trak->size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1715 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1716
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1717
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1718 typedef struct {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1719 u_char size[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1720 u_char name[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1721 u_char version[1];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1722 u_char flags[3];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1723 u_char entries[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1724
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1725 u_char media_size[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1726 u_char media_name[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1727 } ngx_mp4_stsd_atom_t;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1728
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1729
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1730 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1731 ngx_http_mp4_read_stsd_atom(ngx_http_mp4_file_t *mp4, uint64_t atom_data_size)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1732 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1733 u_char *atom_header, *atom_table;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1734 size_t atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1735 ngx_buf_t *atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1736 ngx_mp4_stsd_atom_t *stsd_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1737 ngx_http_mp4_trak_t *trak;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1738
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1739 /* sample description atom */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1740
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1741 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0, "mp4 stsd atom");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1742
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1743 atom_header = ngx_mp4_atom_header(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1744 stsd_atom = (ngx_mp4_stsd_atom_t *) atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1745 atom_size = sizeof(ngx_mp4_atom_header_t) + (size_t) atom_data_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1746 atom_table = atom_header + atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1747 ngx_mp4_set_32value(stsd_atom->size, atom_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1748 ngx_mp4_set_atom_name(stsd_atom, 's', 't', 's', 'd');
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1749
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1750 if ((uint64_t) (sizeof(ngx_mp4_stsd_atom_t) - sizeof(ngx_mp4_atom_header_t))
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1751 > atom_data_size)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1752 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1753 ngx_log_error(NGX_LOG_ERR, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1754 "\"%s\" mp4 stsd atom too large",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1755 mp4->file.name.data);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1756 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1757 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1758
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1759 ngx_log_debug3(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1760 "stsd entries:%uD, media:%*s",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1761 ngx_mp4_get_32value(stsd_atom->entries),
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1762 4, stsd_atom->media_name);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1763
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1764 /* supported media format: "avc1" (H.264) and "mp4a" (MPEG-4/AAC) */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1765
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1766 if (ngx_strncmp(stsd_atom->media_name, "avc1", 4) != 0
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1767 && ngx_strncmp(stsd_atom->media_name, "mp4a", 4) != 0)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1768 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1769 return NGX_DECLINED;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1770 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1771
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1772 trak = ngx_mp4_last_trak(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1773
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1774 atom = &trak->stsd_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1775 atom->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1776 atom->pos = atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1777 atom->last = atom_table;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1778
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1779 trak->out[NGX_HTTP_MP4_STSD_ATOM].buf = atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1780 trak->size += atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1781
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1782 ngx_mp4_atom_next(mp4, atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1783
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1784 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1785 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1786
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1787
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1788 typedef struct {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1789 u_char size[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1790 u_char name[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1791 u_char version[1];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1792 u_char flags[3];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1793 u_char entries[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1794 } ngx_mp4_stts_atom_t;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1795
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1796 typedef struct {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1797 u_char count[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1798 u_char duration[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1799 } ngx_mp4_stts_entry_t;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1800
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1801
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1802 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1803 ngx_http_mp4_read_stts_atom(ngx_http_mp4_file_t *mp4, uint64_t atom_data_size)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1804 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1805 u_char *atom_header, *atom_table, *atom_end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1806 uint32_t entries;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1807 ngx_buf_t *atom, *data;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1808 ngx_mp4_stts_atom_t *stts_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1809 ngx_http_mp4_trak_t *trak;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1810
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1811 /* time-to-sample atom */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1812
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1813 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0, "mp4 stts atom");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1814
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1815 atom_header = ngx_mp4_atom_header(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1816 stts_atom = (ngx_mp4_stts_atom_t *) atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1817 ngx_mp4_set_atom_name(stts_atom, 's', 't', 't', 's');
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1818
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1819 entries = ngx_mp4_get_32value(stts_atom->entries);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1820
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1821 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1822 "mp4 time-to-sample entries:%uD", entries);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1823
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1824 atom_table = atom_header + sizeof(ngx_mp4_stts_atom_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1825 atom_end = atom_table + entries * sizeof(ngx_mp4_stts_entry_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1826
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1827 if ((uint64_t) (atom_end - stts_atom->version) > atom_data_size) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1828 ngx_log_error(NGX_LOG_ERR, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1829 "\"%s\" mp4 stts atom too large",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1830 mp4->file.name.data);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1831 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1832 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1833
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1834 trak = ngx_mp4_last_trak(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1835 trak->time_to_sample_entries = entries;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1836
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1837 atom = &trak->stts_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1838 atom->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1839 atom->pos = atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1840 atom->last = atom_table;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1841
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1842 data = &trak->stts_data_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1843 data->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1844 data->pos = atom_table;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1845 data->last = atom_end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1846
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1847 trak->out[NGX_HTTP_MP4_STTS_ATOM].buf = atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1848 trak->out[NGX_HTTP_MP4_STTS_DATA].buf = data;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1849
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1850 ngx_mp4_atom_next(mp4, atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1851
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1852 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1853 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1854
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1855
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1856 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1857 ngx_http_mp4_update_stts_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1858 ngx_http_mp4_trak_t *trak)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1859 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1860 size_t atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1861 uint32_t entries, count, duration;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1862 uint64_t start_time;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1863 ngx_buf_t *atom, *data;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1864 ngx_uint_t start_sample;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1865 ngx_mp4_stts_atom_t *stts_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1866 ngx_mp4_stts_entry_t *entry, *end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1867
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1868 /*
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1869 * mdia.minf.stbl.stts updating requires trak->timescale
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1870 * from mdia.mdhd atom which may reside after mdia.minf
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1871 */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1872
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1873 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1874 "mp4 stts atom update");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1875
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1876 data = trak->out[NGX_HTTP_MP4_STTS_DATA].buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1877
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1878 if (data == NULL) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1879 ngx_log_error(NGX_LOG_ERR, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1880 "no mp4 stts atoms were found in \"%s\"",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1881 mp4->file.name.data);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1882 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1883 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1884
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1885 entries = trak->time_to_sample_entries;
4251
cc7ea429170d Merging r4190, r4232:
Igor Sysoev <igor@sysoev.ru>
parents: 4173
diff changeset
1886 start_time = (uint64_t) mp4->start * trak->timescale / 1000;
4169
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1887
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1888 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1889 "time-to-sample start_time:%uL", start_time);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1890
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1891 start_sample = 0;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1892 entry = (ngx_mp4_stts_entry_t *) data->pos;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1893 end = (ngx_mp4_stts_entry_t *) data->last;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1894
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1895 while (entry < end) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1896 count = ngx_mp4_get_32value(entry->count);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1897 duration = ngx_mp4_get_32value(entry->duration);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1898
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1899 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1900 "count:%uD, duration:%uD", count, duration);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1901
4365
d2516d4ab842 Merge of r4307:
Maxim Dounin <mdounin@mdounin.ru>
parents: 4289
diff changeset
1902 if (start_time < (uint64_t) count * duration) {
4169
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1903 start_sample += (ngx_uint_t) (start_time / duration);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1904 count -= start_sample;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1905 ngx_mp4_set_32value(entry->count, count);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1906 goto found;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1907 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1908
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1909 start_sample += count;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1910 start_time -= count * duration;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1911 entries--;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1912 entry++;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1913 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1914
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1915 ngx_log_error(NGX_LOG_ERR, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1916 "start time is out mp4 stts samples in \"%s\"",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1917 mp4->file.name.data);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1918
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1919 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1920
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1921 found:
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1922
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1923 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1924 "start_sample:%ui, new count:%uD", start_sample, count);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1925
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1926 trak->start_sample = start_sample;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1927
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1928 data->pos = (u_char *) entry;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1929 atom_size = sizeof(ngx_mp4_stts_atom_t) + (data->last - data->pos);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1930 trak->size += atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1931
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1932 atom = trak->out[NGX_HTTP_MP4_STTS_ATOM].buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1933 stts_atom = (ngx_mp4_stts_atom_t *) atom->pos;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1934 ngx_mp4_set_32value(stts_atom->size, atom_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1935 ngx_mp4_set_32value(stts_atom->entries, entries);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1936
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1937 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1938 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1939
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1940
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1941 typedef struct {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1942 u_char size[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1943 u_char name[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1944 u_char version[1];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1945 u_char flags[3];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1946 u_char entries[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1947 } ngx_http_mp4_stss_atom_t;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1948
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1949
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1950 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1951 ngx_http_mp4_read_stss_atom(ngx_http_mp4_file_t *mp4, uint64_t atom_data_size)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1952 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1953 u_char *atom_header, *atom_table, *atom_end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1954 uint32_t entries;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1955 ngx_buf_t *atom, *data;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1956 ngx_http_mp4_trak_t *trak;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1957 ngx_http_mp4_stss_atom_t *stss_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1958
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1959 /* sync samples atom */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1960
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1961 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0, "mp4 stss atom");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1962
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1963 atom_header = ngx_mp4_atom_header(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1964 stss_atom = (ngx_http_mp4_stss_atom_t *) atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1965 ngx_mp4_set_atom_name(stss_atom, 's', 't', 's', 's');
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1966
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1967 entries = ngx_mp4_get_32value(stss_atom->entries);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1968
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1969 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1970 "sync sample entries:%uD", entries);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1971
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1972 trak = ngx_mp4_last_trak(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1973 trak->sync_samples_entries = entries;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1974
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1975 atom_table = atom_header + sizeof(ngx_http_mp4_stss_atom_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1976
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1977 atom = &trak->stss_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1978 atom->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1979 atom->pos = atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1980 atom->last = atom_table;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1981
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1982 atom_end = atom_table + entries * sizeof(uint32_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1983
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1984 if ((uint64_t) (atom_end - stss_atom->version) > atom_data_size) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1985 ngx_log_error(NGX_LOG_ERR, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1986 "\"%s\" mp4 stss atom too large", mp4->file.name.data);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1987 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1988 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1989
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1990 data = &trak->stss_data_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1991 data->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1992 data->pos = atom_table;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1993 data->last = atom_end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1994
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1995 trak->out[NGX_HTTP_MP4_STSS_ATOM].buf = atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1996 trak->out[NGX_HTTP_MP4_STSS_DATA].buf = data;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1997
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1998 ngx_mp4_atom_next(mp4, atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1999
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2000 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2001 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2002
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2003
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2004 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2005 ngx_http_mp4_update_stss_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2006 ngx_http_mp4_trak_t *trak)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2007 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2008 size_t atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2009 uint32_t entries, sample, start_sample, *entry, *end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2010 ngx_buf_t *atom, *data;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2011 ngx_http_mp4_stss_atom_t *stss_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2012
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2013 /*
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2014 * mdia.minf.stbl.stss updating requires trak->start_sample
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2015 * from mdia.minf.stbl.stts which depends on value from mdia.mdhd
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2016 * atom which may reside after mdia.minf
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2017 */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2018
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2019 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2020 "mp4 stss atom update");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2021
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2022 data = trak->out[NGX_HTTP_MP4_STSS_DATA].buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2023
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2024 if (data == NULL) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2025 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2026 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2027
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2028 /* sync samples starts from 1 */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2029 start_sample = trak->start_sample + 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2030 entries = trak->sync_samples_entries;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2031
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2032 entry = (uint32_t *) data->pos;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2033 end = (uint32_t *) data->last;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2034
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2035 while (entry < end) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2036 sample = ngx_mp4_get_32value(entry);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2037
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2038 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2039 "start:%uD, sync:%uD", start_sample, sample);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2040
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2041 if (sample >= start_sample) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2042 goto found;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2043 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2044
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2045 entries--;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2046 entry++;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2047 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2048
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2049 ngx_log_error(NGX_LOG_ERR, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2050 "start sample is out of mp4 stss atom in \"%s\"",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2051 mp4->file.name.data);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2052
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2053 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2054
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2055 found:
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2056
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2057 data->pos = (u_char *) entry;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2058
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2059 start_sample = trak->start_sample;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2060
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2061 while (entry < end) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2062 sample = ngx_mp4_get_32value(entry);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2063 sample -= start_sample;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2064 ngx_mp4_set_32value(entry, sample);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2065 entry++;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2066 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2067
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2068 atom_size = sizeof(ngx_http_mp4_stss_atom_t) + (data->last - data->pos);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2069 trak->size += atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2070
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2071 atom = trak->out[NGX_HTTP_MP4_STSS_ATOM].buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2072 stss_atom = (ngx_http_mp4_stss_atom_t *) atom->pos;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2073
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2074 ngx_mp4_set_32value(stss_atom->size, atom_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2075 ngx_mp4_set_32value(stss_atom->entries, entries);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2076
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2077 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2078 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2079
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2080
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2081 typedef struct {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2082 u_char size[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2083 u_char name[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2084 u_char version[1];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2085 u_char flags[3];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2086 u_char entries[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2087 } ngx_mp4_ctts_atom_t;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2088
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2089 typedef struct {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2090 u_char count[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2091 u_char offset[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2092 } ngx_mp4_ctts_entry_t;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2093
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2094
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2095 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2096 ngx_http_mp4_read_ctts_atom(ngx_http_mp4_file_t *mp4, uint64_t atom_data_size)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2097 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2098 u_char *atom_header, *atom_table, *atom_end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2099 uint32_t entries;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2100 ngx_buf_t *atom, *data;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2101 ngx_mp4_ctts_atom_t *ctts_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2102 ngx_http_mp4_trak_t *trak;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2103
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2104 /* composition offsets atom */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2105
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2106 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0, "mp4 ctts atom");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2107
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2108 atom_header = ngx_mp4_atom_header(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2109 ctts_atom = (ngx_mp4_ctts_atom_t *) atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2110 ngx_mp4_set_atom_name(ctts_atom, 'c', 't', 't', 's');
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2111
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2112 entries = ngx_mp4_get_32value(ctts_atom->entries);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2113
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2114 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2115 "composition offset entries:%uD", entries);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2116
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2117 trak = ngx_mp4_last_trak(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2118 trak->composition_offset_entries = entries;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2119
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2120 atom_table = atom_header + sizeof(ngx_mp4_ctts_atom_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2121
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2122 atom = &trak->ctts_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2123 atom->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2124 atom->pos = atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2125 atom->last = atom_table;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2126
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2127 atom_end = atom_table + entries * sizeof(ngx_mp4_ctts_entry_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2128
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2129 if ((uint64_t) (atom_end - ctts_atom->version) > atom_data_size) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2130 ngx_log_error(NGX_LOG_ERR, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2131 "\"%s\" mp4 ctts atom too large", mp4->file.name.data);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2132 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2133 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2134
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2135 data = &trak->ctts_data_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2136 data->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2137 data->pos = atom_table;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2138 data->last = atom_end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2139
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2140 trak->out[NGX_HTTP_MP4_CTTS_ATOM].buf = atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2141 trak->out[NGX_HTTP_MP4_CTTS_DATA].buf = data;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2142
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2143 ngx_mp4_atom_next(mp4, atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2144
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2145 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2146 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2147
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2148
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2149 static void
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2150 ngx_http_mp4_update_ctts_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2151 ngx_http_mp4_trak_t *trak)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2152 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2153 size_t atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2154 uint32_t entries, count, start_sample;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2155 ngx_buf_t *atom, *data;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2156 ngx_mp4_ctts_atom_t *ctts_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2157 ngx_mp4_ctts_entry_t *entry, *end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2158
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2159 /*
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2160 * mdia.minf.stbl.ctts updating requires trak->start_sample
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2161 * from mdia.minf.stbl.stts which depends on value from mdia.mdhd
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2162 * atom which may reside after mdia.minf
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2163 */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2164
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2165 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2166 "mp4 ctts atom update");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2167
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2168 data = trak->out[NGX_HTTP_MP4_CTTS_DATA].buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2169
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2170 if (data == NULL) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2171 return;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2172 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2173
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2174 /* sync samples starts from 1 */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2175 start_sample = trak->start_sample + 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2176 entries = trak->composition_offset_entries;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2177 entry = (ngx_mp4_ctts_entry_t *) data->pos;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2178 end = (ngx_mp4_ctts_entry_t *) data->last;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2179
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2180 while (entry < end) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2181 count = ngx_mp4_get_32value(entry->count);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2182
4173
aaa936b2cab5 Merging r4089 missed in r4170 merge.
Igor Sysoev <igor@sysoev.ru>
parents: 4169
diff changeset
2183 ngx_log_debug3(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
4169
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2184 "start:%uD, count:%uD, offset:%uD",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2185 start_sample, count, ngx_mp4_get_32value(entry->offset));
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2186
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2187 if (start_sample <= count) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2188 count -= (start_sample - 1);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2189 ngx_mp4_set_32value(entry->count, count);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2190 goto found;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2191 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2192
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2193 start_sample -= count;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2194 entries--;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2195 entry++;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2196 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2197
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2198 trak->out[NGX_HTTP_MP4_CTTS_ATOM].buf = NULL;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2199 trak->out[NGX_HTTP_MP4_CTTS_DATA].buf = NULL;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2200
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2201 return;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2202
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2203 found:
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2204
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2205 data->pos = (u_char *) entry;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2206 atom_size = sizeof(ngx_mp4_ctts_atom_t) + (data->last - data->pos);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2207 trak->size += atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2208
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2209 atom = trak->out[NGX_HTTP_MP4_CTTS_ATOM].buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2210 ctts_atom = (ngx_mp4_ctts_atom_t *) atom->pos;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2211
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2212 ngx_mp4_set_32value(ctts_atom->size, atom_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2213 ngx_mp4_set_32value(ctts_atom->entries, entries);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2214
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2215 return;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2216 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2217
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2218
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2219 typedef struct {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2220 u_char size[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2221 u_char name[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2222 u_char version[1];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2223 u_char flags[3];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2224 u_char entries[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2225 } ngx_mp4_stsc_atom_t;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2226
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2227
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2228 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2229 ngx_http_mp4_read_stsc_atom(ngx_http_mp4_file_t *mp4, uint64_t atom_data_size)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2230 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2231 u_char *atom_header, *atom_table, *atom_end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2232 uint32_t entries;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2233 ngx_buf_t *atom, *data;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2234 ngx_mp4_stsc_atom_t *stsc_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2235 ngx_http_mp4_trak_t *trak;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2236
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2237 /* sample-to-chunk atom */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2238
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2239 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0, "mp4 stsc atom");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2240
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2241 atom_header = ngx_mp4_atom_header(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2242 stsc_atom = (ngx_mp4_stsc_atom_t *) atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2243 ngx_mp4_set_atom_name(stsc_atom, 's', 't', 's', 'c');
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2244
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2245 entries = ngx_mp4_get_32value(stsc_atom->entries);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2246
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2247 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2248 "sample-to-chunk entries:%uD", entries);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2249
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2250 atom_table = atom_header + sizeof(ngx_mp4_stsc_atom_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2251 atom_end = atom_table + entries * sizeof(ngx_mp4_stsc_entry_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2252
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2253 if ((uint64_t) (atom_end - stsc_atom->version) > atom_data_size) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2254 ngx_log_error(NGX_LOG_ERR, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2255 "\"%s\" mp4 stsc atom too large",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2256 mp4->file.name.data);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2257 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2258 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2259
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2260 trak = ngx_mp4_last_trak(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2261 trak->sample_to_chunk_entries = entries;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2262
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2263 atom = &trak->stsc_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2264 atom->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2265 atom->pos = atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2266 atom->last = atom_table;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2267
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2268 data = &trak->stsc_data_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2269 data->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2270 data->pos = atom_table;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2271 data->last = atom_end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2272
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2273 trak->out[NGX_HTTP_MP4_STSC_ATOM].buf = atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2274 trak->out[NGX_HTTP_MP4_STSC_DATA].buf = data;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2275
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2276 ngx_mp4_atom_next(mp4, atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2277
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2278 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2279 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2280
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2281
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2282 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2283 ngx_http_mp4_update_stsc_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2284 ngx_http_mp4_trak_t *trak)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2285 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2286 size_t atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2287 uint32_t start_sample, entries, chunk, samples, id,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2288 next_chunk, n;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2289 ngx_buf_t *atom, *data, *buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2290 ngx_mp4_stsc_atom_t *stsc_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2291 ngx_mp4_stsc_entry_t *entry, *first, *end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2292
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2293 /*
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2294 * mdia.minf.stbl.stsc updating requires trak->start_sample
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2295 * from mdia.minf.stbl.stts which depends on value from mdia.mdhd
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2296 * atom which may reside after mdia.minf
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2297 */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2298
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2299 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2300 "mp4 stsc atom update");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2301
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2302 data = trak->out[NGX_HTTP_MP4_STSC_DATA].buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2303
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2304 if (data == NULL) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2305 ngx_log_error(NGX_LOG_ERR, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2306 "no mp4 stsc atoms were found in \"%s\"",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2307 mp4->file.name.data);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2308 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2309 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2310
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2311 start_sample = (uint32_t) trak->start_sample;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2312 entries = trak->sample_to_chunk_entries - 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2313
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2314 entry = (ngx_mp4_stsc_entry_t *) data->pos;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2315 end = (ngx_mp4_stsc_entry_t *) data->last;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2316
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2317 chunk = ngx_mp4_get_32value(entry->chunk);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2318 samples = ngx_mp4_get_32value(entry->samples);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2319 id = ngx_mp4_get_32value(entry->id);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2320 entry++;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2321
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2322 while (entry < end) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2323
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2324 next_chunk = ngx_mp4_get_32value(entry->chunk);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2325
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2326 ngx_log_debug5(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2327 "start_sample:%uD, chunk:%uD, chunks:%uD, "
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2328 "samples:%uD, id:%uD",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2329 start_sample, chunk, next_chunk - chunk, samples, id);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2330
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2331 n = (next_chunk - chunk) * samples;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2332
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2333 if (start_sample <= n) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2334 goto found;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2335 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2336
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2337 start_sample -= n;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2338
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2339 chunk = next_chunk;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2340 samples = ngx_mp4_get_32value(entry->samples);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2341 id = ngx_mp4_get_32value(entry->id);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2342 entries--;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2343 entry++;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2344 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2345
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2346 next_chunk = trak->chunks;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2347
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2348 ngx_log_debug4(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2349 "start_sample:%uD, chunk:%uD, chunks:%uD, samples:%uD",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2350 start_sample, chunk, next_chunk - chunk, samples);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2351
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2352 n = (next_chunk - chunk) * samples;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2353
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2354 if (start_sample > n) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2355 ngx_log_error(NGX_LOG_ERR, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2356 "start time is out mp4 stsc chunks in \"%s\"",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2357 mp4->file.name.data);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2358 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2359 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2360
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2361 found:
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2362
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2363 entries++;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2364 entry--;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2365
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2366 if (samples == 0) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2367 ngx_log_error(NGX_LOG_ERR, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2368 "zero number of samples in \"%s\"",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2369 mp4->file.name.data);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2370 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2371 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2372
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2373 trak->start_chunk = chunk - 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2374
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2375 trak->start_chunk += start_sample / samples;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2376 trak->chunk_samples = start_sample % samples;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2377
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2378 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2379 "start chunk:%ui, samples:%uD",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2380 trak->start_chunk, trak->chunk_samples);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2381
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2382 data->pos = (u_char *) entry;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2383 atom_size = sizeof(ngx_mp4_stsc_atom_t) + (data->last - data->pos);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2384
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2385 if (trak->chunk_samples) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2386
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2387 first = &trak->stsc_chunk_entry;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2388 ngx_mp4_set_32value(first->chunk, 1);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2389 ngx_mp4_set_32value(first->samples, samples - trak->chunk_samples);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2390 ngx_mp4_set_32value(first->id, id);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2391
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2392 buf = &trak->stsc_chunk_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2393 buf->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2394 buf->pos = (u_char *) first;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2395 buf->last = (u_char *) first + sizeof(ngx_mp4_stsc_entry_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2396
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2397 trak->out[NGX_HTTP_MP4_STSC_CHUNK].buf = buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2398
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2399 ngx_mp4_set_32value(entry->chunk, 2);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2400
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2401 atom_size += sizeof(ngx_mp4_stsc_entry_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2402 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2403
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2404 while (++entry < end) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2405 chunk = ngx_mp4_get_32value(entry->chunk);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2406 chunk -= trak->start_chunk;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2407 ngx_mp4_set_32value(entry->chunk, chunk);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2408 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2409
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2410 trak->size += atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2411
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2412 atom = trak->out[NGX_HTTP_MP4_STSC_ATOM].buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2413 stsc_atom = (ngx_mp4_stsc_atom_t *) atom->pos;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2414
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2415 ngx_mp4_set_32value(stsc_atom->size, atom_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2416 ngx_mp4_set_32value(stsc_atom->entries, entries);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2417
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2418 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2419 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2420
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2421
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2422 typedef struct {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2423 u_char size[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2424 u_char name[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2425 u_char version[1];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2426 u_char flags[3];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2427 u_char uniform_size[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2428 u_char entries[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2429 } ngx_mp4_stsz_atom_t;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2430
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2431
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2432 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2433 ngx_http_mp4_read_stsz_atom(ngx_http_mp4_file_t *mp4, uint64_t atom_data_size)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2434 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2435 u_char *atom_header, *atom_table, *atom_end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2436 size_t atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2437 uint32_t entries, size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2438 ngx_buf_t *atom, *data;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2439 ngx_mp4_stsz_atom_t *stsz_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2440 ngx_http_mp4_trak_t *trak;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2441
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2442 /* sample sizes atom */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2443
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2444 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0, "mp4 stsz atom");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2445
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2446 atom_header = ngx_mp4_atom_header(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2447 stsz_atom = (ngx_mp4_stsz_atom_t *) atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2448 ngx_mp4_set_atom_name(stsz_atom, 's', 't', 's', 'z');
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2449
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2450 size = ngx_mp4_get_32value(stsz_atom->uniform_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2451 entries = ngx_mp4_get_32value(stsz_atom->entries);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2452
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2453 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2454 "sample uniform size:%uD, entries:%uD", size, entries);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2455
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2456 trak = ngx_mp4_last_trak(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2457 trak->sample_sizes_entries = entries;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2458
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2459 atom_table = atom_header + sizeof(ngx_mp4_stsz_atom_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2460
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2461 atom = &trak->stsz_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2462 atom->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2463 atom->pos = atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2464 atom->last = atom_table;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2465
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2466 trak->out[NGX_HTTP_MP4_STSZ_ATOM].buf = atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2467
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2468 if (size == 0) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2469 atom_end = atom_table + entries * sizeof(uint32_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2470
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2471 if ((uint64_t) (atom_end - stsz_atom->version) > atom_data_size) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2472 ngx_log_error(NGX_LOG_ERR, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2473 "\"%s\" mp4 stsz atom too large",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2474 mp4->file.name.data);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2475 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2476 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2477
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2478 data = &trak->stsz_data_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2479 data->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2480 data->pos = atom_table;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2481 data->last = atom_end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2482
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2483 trak->out[NGX_HTTP_MP4_STSZ_DATA].buf = data;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2484
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2485 } else {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2486 /* if size != 0 then all samples are the same size */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2487 /* TODO : chunk samples */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2488 atom_size = sizeof(ngx_mp4_atom_header_t) + (size_t) atom_data_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2489 ngx_mp4_set_32value(atom_header, atom_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2490 trak->size += atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2491 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2492
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2493 ngx_mp4_atom_next(mp4, atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2494
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2495 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2496 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2497
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2498
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2499 static void
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2500 ngx_http_mp4_update_stsz_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2501 ngx_http_mp4_trak_t *trak)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2502 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2503 size_t atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2504 uint32_t *pos, *end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2505 ngx_buf_t *atom, *data;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2506 ngx_mp4_stsz_atom_t *stsz_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2507
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2508 /*
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2509 * mdia.minf.stbl.stsz updating requires trak->start_sample
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2510 * from mdia.minf.stbl.stts which depends on value from mdia.mdhd
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2511 * atom which may reside after mdia.minf
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2512 */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2513
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2514 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2515 "mp4 stsz atom update");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2516
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2517 data = trak->out[NGX_HTTP_MP4_STSZ_DATA].buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2518
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2519 if (data) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2520 data->pos += trak->start_sample * sizeof(uint32_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2521 end = (uint32_t *) data->pos;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2522
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2523 for (pos = end - trak->chunk_samples; pos < end; pos++) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2524 trak->chunk_samples_size += ngx_mp4_get_32value(pos);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2525 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2526
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2527 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2528 "chunk samples sizes:%uL", trak->chunk_samples_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2529
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2530 atom_size = sizeof(ngx_mp4_stsz_atom_t) + (data->last - data->pos);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2531 trak->size += atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2532
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2533 atom = trak->out[NGX_HTTP_MP4_STSZ_ATOM].buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2534 stsz_atom = (ngx_mp4_stsz_atom_t *) atom->pos;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2535
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2536 ngx_mp4_set_32value(stsz_atom->size, atom_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2537 ngx_mp4_set_32value(stsz_atom->entries,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2538 trak->sample_sizes_entries - trak->start_sample);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2539 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2540 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2541
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2542
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2543 typedef struct {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2544 u_char size[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2545 u_char name[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2546 u_char version[1];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2547 u_char flags[3];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2548 u_char entries[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2549 } ngx_mp4_stco_atom_t;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2550
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2551
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2552 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2553 ngx_http_mp4_read_stco_atom(ngx_http_mp4_file_t *mp4, uint64_t atom_data_size)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2554 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2555 u_char *atom_header, *atom_table, *atom_end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2556 uint32_t entries;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2557 ngx_buf_t *atom, *data;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2558 ngx_mp4_stco_atom_t *stco_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2559 ngx_http_mp4_trak_t *trak;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2560
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2561 /* chunk offsets atom */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2562
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2563 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0, "mp4 stco atom");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2564
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2565 atom_header = ngx_mp4_atom_header(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2566 stco_atom = (ngx_mp4_stco_atom_t *) atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2567 ngx_mp4_set_atom_name(stco_atom, 's', 't', 'c', 'o');
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2568
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2569 entries = ngx_mp4_get_32value(stco_atom->entries);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2570
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2571 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0, "chunks:%uD", entries);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2572
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2573 atom_table = atom_header + sizeof(ngx_mp4_stco_atom_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2574 atom_end = atom_table + entries * sizeof(uint32_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2575
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2576 if ((uint64_t) (atom_end - stco_atom->version) > atom_data_size) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2577 ngx_log_error(NGX_LOG_ERR, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2578 "\"%s\" mp4 stco atom too large", mp4->file.name.data);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2579 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2580 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2581
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2582 trak = ngx_mp4_last_trak(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2583 trak->chunks = entries;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2584
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2585 atom = &trak->stco_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2586 atom->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2587 atom->pos = atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2588 atom->last = atom_table;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2589
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2590 data = &trak->stco_data_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2591 data->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2592 data->pos = atom_table;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2593 data->last = atom_end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2594
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2595 trak->out[NGX_HTTP_MP4_STCO_ATOM].buf = atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2596 trak->out[NGX_HTTP_MP4_STCO_DATA].buf = data;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2597
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2598 ngx_mp4_atom_next(mp4, atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2599
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2600 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2601 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2602
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2603
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2604 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2605 ngx_http_mp4_update_stco_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2606 ngx_http_mp4_trak_t *trak)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2607 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2608 size_t atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2609 ngx_buf_t *atom, *data;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2610 ngx_mp4_stco_atom_t *stco_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2611
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2612 /*
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2613 * mdia.minf.stbl.stco updating requires trak->start_chunk
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2614 * from mdia.minf.stbl.stsc which depends on value from mdia.mdhd
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2615 * atom which may reside after mdia.minf
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2616 */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2617
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2618 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2619 "mp4 stco atom update");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2620
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2621 data = trak->out[NGX_HTTP_MP4_STCO_DATA].buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2622
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2623 if (data == NULL) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2624 ngx_log_error(NGX_LOG_ERR, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2625 "no mp4 stco atoms were found in \"%s\"",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2626 mp4->file.name.data);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2627 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2628 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2629
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2630 data->pos += trak->start_chunk * sizeof(uint32_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2631 atom_size = sizeof(ngx_mp4_stco_atom_t) + (data->last - data->pos);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2632 trak->size += atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2633
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2634 trak->start_offset = ngx_mp4_get_32value(data->pos);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2635 trak->start_offset += trak->chunk_samples_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2636 ngx_mp4_set_32value(data->pos, trak->start_offset);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2637
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2638 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2639 "start chunk offset:%uD", trak->start_offset);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2640
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2641 atom = trak->out[NGX_HTTP_MP4_STCO_ATOM].buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2642 stco_atom = (ngx_mp4_stco_atom_t *) atom->pos;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2643
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2644 ngx_mp4_set_32value(stco_atom->size, atom_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2645 ngx_mp4_set_32value(stco_atom->entries, trak->chunks - trak->start_chunk);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2646
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2647 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2648 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2649
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2650
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2651 static void
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2652 ngx_http_mp4_adjust_stco_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2653 ngx_http_mp4_trak_t *trak, int32_t adjustment)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2654 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2655 uint32_t offset, *entry, *end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2656 ngx_buf_t *data;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2657
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2658 /*
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2659 * moov.trak.mdia.minf.stbl.stco adjustment requires
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2660 * minimal start offset of all traks and new moov atom size
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2661 */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2662
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2663 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2664 "mp4 stco atom adjustment");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2665
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2666 data = trak->out[NGX_HTTP_MP4_STCO_DATA].buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2667 entry = (uint32_t *) data->pos;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2668 end = (uint32_t *) data->last;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2669
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2670 while (entry < end) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2671 offset = ngx_mp4_get_32value(entry);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2672 offset += adjustment;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2673 ngx_mp4_set_32value(entry, offset);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2674 entry++;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2675 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2676 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2677
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2678
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2679 typedef struct {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2680 u_char size[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2681 u_char name[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2682 u_char version[1];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2683 u_char flags[3];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2684 u_char entries[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2685 } ngx_mp4_co64_atom_t;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2686
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2687
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2688 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2689 ngx_http_mp4_read_co64_atom(ngx_http_mp4_file_t *mp4, uint64_t atom_data_size)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2690 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2691 u_char *atom_header, *atom_table, *atom_end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2692 uint32_t entries;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2693 ngx_buf_t *atom, *data;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2694 ngx_mp4_co64_atom_t *co64_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2695 ngx_http_mp4_trak_t *trak;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2696
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2697 /* chunk offsets atom */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2698
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2699 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0, "mp4 co64 atom");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2700
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2701 atom_header = ngx_mp4_atom_header(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2702 co64_atom = (ngx_mp4_co64_atom_t *) atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2703 ngx_mp4_set_atom_name(co64_atom, 'c', 'o', '6', '4');
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2704
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2705 entries = ngx_mp4_get_32value(co64_atom->entries);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2706
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2707 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0, "chunks:%uD", entries);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2708
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2709 atom_table = atom_header + sizeof(ngx_mp4_co64_atom_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2710 atom_end = atom_table + entries * sizeof(uint64_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2711
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2712 if ((uint64_t) (atom_end - co64_atom->version) > atom_data_size) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2713 ngx_log_error(NGX_LOG_ERR, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2714 "\"%s\" mp4 co64 atom too large", mp4->file.name.data);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2715 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2716 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2717
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2718 trak = ngx_mp4_last_trak(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2719 trak->chunks = entries;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2720
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2721 atom = &trak->co64_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2722 atom->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2723 atom->pos = atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2724 atom->last = atom_table;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2725
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2726 data = &trak->co64_data_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2727 data->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2728 data->pos = atom_table;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2729 data->last = atom_end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2730
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2731 trak->out[NGX_HTTP_MP4_CO64_ATOM].buf = atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2732 trak->out[NGX_HTTP_MP4_CO64_DATA].buf = data;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2733
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2734 ngx_mp4_atom_next(mp4, atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2735
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2736 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2737 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2738
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2739
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2740 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2741 ngx_http_mp4_update_co64_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2742 ngx_http_mp4_trak_t *trak)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2743 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2744 size_t atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2745 ngx_buf_t *atom, *data;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2746 ngx_mp4_co64_atom_t *co64_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2747
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2748 /*
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2749 * mdia.minf.stbl.co64 updating requires trak->start_chunk
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2750 * from mdia.minf.stbl.stsc which depends on value from mdia.mdhd
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2751 * atom which may reside after mdia.minf
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2752 */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2753
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2754 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2755 "mp4 co64 atom update");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2756
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2757 data = trak->out[NGX_HTTP_MP4_CO64_DATA].buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2758
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2759 if (data == NULL) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2760 ngx_log_error(NGX_LOG_ERR, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2761 "no mp4 co64 atoms were found in \"%s\"",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2762 mp4->file.name.data);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2763 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2764 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2765
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2766 data->pos += trak->start_chunk * sizeof(uint64_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2767 atom_size = sizeof(ngx_mp4_co64_atom_t) + (data->last - data->pos);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2768 trak->size += atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2769
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2770 trak->start_offset = ngx_mp4_get_64value(data->pos);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2771 trak->start_offset += trak->chunk_samples_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2772 ngx_mp4_set_64value(data->pos, trak->start_offset);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2773
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2774 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2775 "start chunk offset:%uL", trak->start_offset);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2776
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2777 atom = trak->out[NGX_HTTP_MP4_CO64_ATOM].buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2778 co64_atom = (ngx_mp4_co64_atom_t *) atom->pos;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2779
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2780 ngx_mp4_set_32value(co64_atom->size, atom_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2781 ngx_mp4_set_32value(co64_atom->entries, trak->chunks - trak->start_chunk);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2782
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2783 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2784 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2785
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2786
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2787 static void
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2788 ngx_http_mp4_adjust_co64_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2789 ngx_http_mp4_trak_t *trak, off_t adjustment)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2790 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2791 uint64_t offset, *entry, *end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2792 ngx_buf_t *data;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2793
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2794 /*
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2795 * moov.trak.mdia.minf.stbl.co64 adjustment requires
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2796 * minimal start offset of all traks and new moov atom size
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2797 */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2798
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2799 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2800 "mp4 co64 atom adjustment");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2801
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2802 data = trak->out[NGX_HTTP_MP4_CO64_DATA].buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2803 entry = (uint64_t *) data->pos;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2804 end = (uint64_t *) data->last;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2805
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2806 while (entry < end) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2807 offset = ngx_mp4_get_64value(entry);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2808 offset += adjustment;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2809 ngx_mp4_set_64value(entry, offset);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2810 entry++;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2811 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2812 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2813
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2814
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2815 static char *
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2816 ngx_http_mp4(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2817 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2818 ngx_http_core_loc_conf_t *clcf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2819
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2820 clcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_core_module);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2821 clcf->handler = ngx_http_mp4_handler;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2822
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2823 return NGX_CONF_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2824 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2825
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2826
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2827 static void *
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2828 ngx_http_mp4_create_conf(ngx_conf_t *cf)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2829 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2830 ngx_http_mp4_conf_t *conf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2831
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2832 conf = ngx_palloc(cf->pool, sizeof(ngx_http_mp4_conf_t));
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2833 if (conf == NULL) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2834 return NULL;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2835 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2836
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2837 conf->buffer_size = NGX_CONF_UNSET_SIZE;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2838 conf->max_buffer_size = NGX_CONF_UNSET_SIZE;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2839
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2840 return conf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2841 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2842
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2843
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2844 static char *
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2845 ngx_http_mp4_merge_conf(ngx_conf_t *cf, void *parent, void *child)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2846 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2847 ngx_http_mp4_conf_t *prev = parent;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2848 ngx_http_mp4_conf_t *conf = child;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2849
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2850 ngx_conf_merge_size_value(conf->buffer_size, prev->buffer_size, 512 * 1024);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2851 ngx_conf_merge_size_value(conf->max_buffer_size, prev->max_buffer_size,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2852 10 * 1024 * 1024);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2853
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2854 return NGX_CONF_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2855 }