annotate nut.c @ 4072:b9bb53432c60 libavformat

add 'ACDV' FourCC (which is just complete JPEG files in individual AVI frames) and 'azpr' FourCC (which is Apple's 'rpza', encapsulated in AVI instead)
author melanson
date Thu, 11 Dec 2008 07:49:05 +0000
parents 6f61c3b36632
children a5c615b9d8ec
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2335
5b5e1edd462e move syncpoint timestamp resetting code to a common file
michael
parents:
diff changeset
1 /*
5b5e1edd462e move syncpoint timestamp resetting code to a common file
michael
parents:
diff changeset
2 * nut
5b5e1edd462e move syncpoint timestamp resetting code to a common file
michael
parents:
diff changeset
3 * Copyright (c) 2004-2007 Michael Niedermayer
5b5e1edd462e move syncpoint timestamp resetting code to a common file
michael
parents:
diff changeset
4 *
5b5e1edd462e move syncpoint timestamp resetting code to a common file
michael
parents:
diff changeset
5 * This file is part of FFmpeg.
5b5e1edd462e move syncpoint timestamp resetting code to a common file
michael
parents:
diff changeset
6 *
5b5e1edd462e move syncpoint timestamp resetting code to a common file
michael
parents:
diff changeset
7 * FFmpeg is free software; you can redistribute it and/or
5b5e1edd462e move syncpoint timestamp resetting code to a common file
michael
parents:
diff changeset
8 * modify it under the terms of the GNU Lesser General Public
5b5e1edd462e move syncpoint timestamp resetting code to a common file
michael
parents:
diff changeset
9 * License as published by the Free Software Foundation; either
5b5e1edd462e move syncpoint timestamp resetting code to a common file
michael
parents:
diff changeset
10 * version 2.1 of the License, or (at your option) any later version.
5b5e1edd462e move syncpoint timestamp resetting code to a common file
michael
parents:
diff changeset
11 *
5b5e1edd462e move syncpoint timestamp resetting code to a common file
michael
parents:
diff changeset
12 * FFmpeg is distributed in the hope that it will be useful,
5b5e1edd462e move syncpoint timestamp resetting code to a common file
michael
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
5b5e1edd462e move syncpoint timestamp resetting code to a common file
michael
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
5b5e1edd462e move syncpoint timestamp resetting code to a common file
michael
parents:
diff changeset
15 * Lesser General Public License for more details.
5b5e1edd462e move syncpoint timestamp resetting code to a common file
michael
parents:
diff changeset
16 *
5b5e1edd462e move syncpoint timestamp resetting code to a common file
michael
parents:
diff changeset
17 * You should have received a copy of the GNU Lesser General Public
5b5e1edd462e move syncpoint timestamp resetting code to a common file
michael
parents:
diff changeset
18 * License along with FFmpeg; if not, write to the Free Software
5b5e1edd462e move syncpoint timestamp resetting code to a common file
michael
parents:
diff changeset
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
5b5e1edd462e move syncpoint timestamp resetting code to a common file
michael
parents:
diff changeset
20 */
5b5e1edd462e move syncpoint timestamp resetting code to a common file
michael
parents:
diff changeset
21
3286
6f61c3b36632 Use full path for #includes from another directory.
diego
parents: 3120
diff changeset
22 #include "libavutil/tree.h"
2335
5b5e1edd462e move syncpoint timestamp resetting code to a common file
michael
parents:
diff changeset
23 #include "nut.h"
5b5e1edd462e move syncpoint timestamp resetting code to a common file
michael
parents:
diff changeset
24
3112
88e032ac11e7 Subtitle support. (untested)
michael
parents: 3011
diff changeset
25 const AVCodecTag ff_nut_subtitle_tags[] = {
88e032ac11e7 Subtitle support. (untested)
michael
parents: 3011
diff changeset
26 { CODEC_ID_TEXT , MKTAG('U', 'T', 'F', '8') },
88e032ac11e7 Subtitle support. (untested)
michael
parents: 3011
diff changeset
27 { CODEC_ID_SSA , MKTAG('S', 'S', 'A', 0 ) },
88e032ac11e7 Subtitle support. (untested)
michael
parents: 3011
diff changeset
28 { CODEC_ID_DVD_SUBTITLE, MKTAG('D', 'V', 'D', 'S') },
88e032ac11e7 Subtitle support. (untested)
michael
parents: 3011
diff changeset
29 { CODEC_ID_DVB_SUBTITLE, MKTAG('D', 'V', 'B', 'S') },
88e032ac11e7 Subtitle support. (untested)
michael
parents: 3011
diff changeset
30 { CODEC_ID_NONE , 0 }
88e032ac11e7 Subtitle support. (untested)
michael
parents: 3011
diff changeset
31 };
88e032ac11e7 Subtitle support. (untested)
michael
parents: 3011
diff changeset
32
2335
5b5e1edd462e move syncpoint timestamp resetting code to a common file
michael
parents:
diff changeset
33 void ff_nut_reset_ts(NUTContext *nut, AVRational time_base, int64_t val){
5b5e1edd462e move syncpoint timestamp resetting code to a common file
michael
parents:
diff changeset
34 int i;
5b5e1edd462e move syncpoint timestamp resetting code to a common file
michael
parents:
diff changeset
35 for(i=0; i<nut->avf->nb_streams; i++){
5b5e1edd462e move syncpoint timestamp resetting code to a common file
michael
parents:
diff changeset
36 nut->stream[i].last_pts= av_rescale_rnd(
3011
0439b354e005 ff_nut_reset_ts() expected to get 'ts*time_base_count', but muxer only
ods15
parents: 2890
diff changeset
37 val,
2335
5b5e1edd462e move syncpoint timestamp resetting code to a common file
michael
parents:
diff changeset
38 time_base.num * (int64_t)nut->stream[i].time_base->den,
5b5e1edd462e move syncpoint timestamp resetting code to a common file
michael
parents:
diff changeset
39 time_base.den * (int64_t)nut->stream[i].time_base->num,
5b5e1edd462e move syncpoint timestamp resetting code to a common file
michael
parents:
diff changeset
40 AV_ROUND_DOWN);
5b5e1edd462e move syncpoint timestamp resetting code to a common file
michael
parents:
diff changeset
41 }
5b5e1edd462e move syncpoint timestamp resetting code to a common file
michael
parents:
diff changeset
42 }
2338
4a06a51ceb70 move lsb2full to common file
michael
parents: 2336
diff changeset
43
4a06a51ceb70 move lsb2full to common file
michael
parents: 2336
diff changeset
44 int64_t ff_lsb2full(StreamContext *stream, int64_t lsb){
4a06a51ceb70 move lsb2full to common file
michael
parents: 2336
diff changeset
45 int64_t mask = (1<<stream->msb_pts_shift)-1;
4a06a51ceb70 move lsb2full to common file
michael
parents: 2336
diff changeset
46 int64_t delta= stream->last_pts - mask/2;
4a06a51ceb70 move lsb2full to common file
michael
parents: 2336
diff changeset
47 return ((lsb - delta)&mask) + delta;
4a06a51ceb70 move lsb2full to common file
michael
parents: 2336
diff changeset
48 }
4a06a51ceb70 move lsb2full to common file
michael
parents: 2336
diff changeset
49
2349
a9dc7596498a move syncpoint cache related stuff to common file
michael
parents: 2338
diff changeset
50 int ff_nut_sp_pos_cmp(syncpoint_t *a, syncpoint_t *b){
2704
5ab595d4eb2f Add some parentheses to clarify operator precedence, fixes the warnings:
diego
parents: 2683
diff changeset
51 return ((a->pos - b->pos) >> 32) - ((b->pos - a->pos) >> 32);
2349
a9dc7596498a move syncpoint cache related stuff to common file
michael
parents: 2338
diff changeset
52 }
a9dc7596498a move syncpoint cache related stuff to common file
michael
parents: 2338
diff changeset
53
a9dc7596498a move syncpoint cache related stuff to common file
michael
parents: 2338
diff changeset
54 int ff_nut_sp_pts_cmp(syncpoint_t *a, syncpoint_t *b){
2704
5ab595d4eb2f Add some parentheses to clarify operator precedence, fixes the warnings:
diego
parents: 2683
diff changeset
55 return ((a->ts - b->ts) >> 32) - ((b->ts - a->ts) >> 32);
2349
a9dc7596498a move syncpoint cache related stuff to common file
michael
parents: 2338
diff changeset
56 }
a9dc7596498a move syncpoint cache related stuff to common file
michael
parents: 2338
diff changeset
57
a9dc7596498a move syncpoint cache related stuff to common file
michael
parents: 2338
diff changeset
58 void ff_nut_add_sp(NUTContext *nut, int64_t pos, int64_t back_ptr, int64_t ts){
2890
31199df992f8 Move *malloc() out of tree.c, that way the code can be used with
michael
parents: 2704
diff changeset
59 syncpoint_t *sp= av_mallocz(sizeof(syncpoint_t));
31199df992f8 Move *malloc() out of tree.c, that way the code can be used with
michael
parents: 2704
diff changeset
60 struct AVTreeNode *node= av_mallocz(av_tree_node_size);
2349
a9dc7596498a move syncpoint cache related stuff to common file
michael
parents: 2338
diff changeset
61
a9dc7596498a move syncpoint cache related stuff to common file
michael
parents: 2338
diff changeset
62 sp->pos= pos;
a9dc7596498a move syncpoint cache related stuff to common file
michael
parents: 2338
diff changeset
63 sp->back_ptr= back_ptr;
a9dc7596498a move syncpoint cache related stuff to common file
michael
parents: 2338
diff changeset
64 sp->ts= ts;
2890
31199df992f8 Move *malloc() out of tree.c, that way the code can be used with
michael
parents: 2704
diff changeset
65 av_tree_insert(&nut->syncpoints, sp, ff_nut_sp_pos_cmp, &node);
31199df992f8 Move *malloc() out of tree.c, that way the code can be used with
michael
parents: 2704
diff changeset
66 if(node){
2349
a9dc7596498a move syncpoint cache related stuff to common file
michael
parents: 2338
diff changeset
67 av_free(sp);
2890
31199df992f8 Move *malloc() out of tree.c, that way the code can be used with
michael
parents: 2704
diff changeset
68 av_free(node);
31199df992f8 Move *malloc() out of tree.c, that way the code can be used with
michael
parents: 2704
diff changeset
69 }
2349
a9dc7596498a move syncpoint cache related stuff to common file
michael
parents: 2338
diff changeset
70 }
3120
ea5623a8efde Add 'disposition' bitfield to AVStream and use it for both muxing and demuxing
eugeni
parents: 3112
diff changeset
71
ea5623a8efde Add 'disposition' bitfield to AVStream and use it for both muxing and demuxing
eugeni
parents: 3112
diff changeset
72 const Dispositions ff_nut_dispositions[] = {
ea5623a8efde Add 'disposition' bitfield to AVStream and use it for both muxing and demuxing
eugeni
parents: 3112
diff changeset
73 {"default" , AV_DISPOSITION_DEFAULT},
ea5623a8efde Add 'disposition' bitfield to AVStream and use it for both muxing and demuxing
eugeni
parents: 3112
diff changeset
74 {"dub" , AV_DISPOSITION_DUB},
ea5623a8efde Add 'disposition' bitfield to AVStream and use it for both muxing and demuxing
eugeni
parents: 3112
diff changeset
75 {"original" , AV_DISPOSITION_ORIGINAL},
ea5623a8efde Add 'disposition' bitfield to AVStream and use it for both muxing and demuxing
eugeni
parents: 3112
diff changeset
76 {"comment" , AV_DISPOSITION_COMMENT},
ea5623a8efde Add 'disposition' bitfield to AVStream and use it for both muxing and demuxing
eugeni
parents: 3112
diff changeset
77 {"lyrics" , AV_DISPOSITION_LYRICS},
ea5623a8efde Add 'disposition' bitfield to AVStream and use it for both muxing and demuxing
eugeni
parents: 3112
diff changeset
78 {"karaoke" , AV_DISPOSITION_KARAOKE},
ea5623a8efde Add 'disposition' bitfield to AVStream and use it for both muxing and demuxing
eugeni
parents: 3112
diff changeset
79 {"" , 0}
ea5623a8efde Add 'disposition' bitfield to AVStream and use it for both muxing and demuxing
eugeni
parents: 3112
diff changeset
80 };
ea5623a8efde Add 'disposition' bitfield to AVStream and use it for both muxing and demuxing
eugeni
parents: 3112
diff changeset
81