annotate nut.c @ 5910:536e5527c1e0 libavformat

Define AVMediaType enum, and use it instead of enum CodecType, which is deprecated and will be dropped at the next major bump.
author stefano
date Tue, 30 Mar 2010 23:30:55 +0000
parents dbbcecb1a0dd
children c7b98381ec2d
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
5902
dbbcecb1a0dd Fix NUT (de)muxer warnings:
vitor
parents: 5878
diff changeset
50 int ff_nut_sp_pos_cmp(const Syncpoint *a, const Syncpoint *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
5902
dbbcecb1a0dd Fix NUT (de)muxer warnings:
vitor
parents: 5878
diff changeset
54 int ff_nut_sp_pts_cmp(const Syncpoint *a, const Syncpoint *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){
4076
a5c615b9d8ec remove _t for POSIX compatibility.
michael
parents: 3286
diff changeset
59 Syncpoint *sp= av_mallocz(sizeof(Syncpoint));
2890
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;
5902
dbbcecb1a0dd Fix NUT (de)muxer warnings:
vitor
parents: 5878
diff changeset
65 av_tree_insert(&nut->syncpoints, sp, (void *) ff_nut_sp_pos_cmp, &node);
2890
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
5878
01b33a7f96ee Fix warning:
vitor
parents: 5738
diff changeset
72 static int enu_free(void *opaque, void *elem)
5738
7152149eb03f Plug memory leak in NUT muxer and demuxer
vitor
parents: 5704
diff changeset
73 {
7152149eb03f Plug memory leak in NUT muxer and demuxer
vitor
parents: 5704
diff changeset
74 av_free(elem);
5878
01b33a7f96ee Fix warning:
vitor
parents: 5738
diff changeset
75 return 0;
5738
7152149eb03f Plug memory leak in NUT muxer and demuxer
vitor
parents: 5704
diff changeset
76 }
7152149eb03f Plug memory leak in NUT muxer and demuxer
vitor
parents: 5704
diff changeset
77
7152149eb03f Plug memory leak in NUT muxer and demuxer
vitor
parents: 5704
diff changeset
78 void ff_nut_free_sp(NUTContext *nut)
7152149eb03f Plug memory leak in NUT muxer and demuxer
vitor
parents: 5704
diff changeset
79 {
7152149eb03f Plug memory leak in NUT muxer and demuxer
vitor
parents: 5704
diff changeset
80 av_tree_enumerate(nut->syncpoints, NULL, NULL, enu_free);
7152149eb03f Plug memory leak in NUT muxer and demuxer
vitor
parents: 5704
diff changeset
81 av_tree_destroy(nut->syncpoints);
7152149eb03f Plug memory leak in NUT muxer and demuxer
vitor
parents: 5704
diff changeset
82 }
7152149eb03f Plug memory leak in NUT muxer and demuxer
vitor
parents: 5704
diff changeset
83
3120
ea5623a8efde Add 'disposition' bitfield to AVStream and use it for both muxing and demuxing
eugeni
parents: 3112
diff changeset
84 const Dispositions ff_nut_dispositions[] = {
ea5623a8efde Add 'disposition' bitfield to AVStream and use it for both muxing and demuxing
eugeni
parents: 3112
diff changeset
85 {"default" , AV_DISPOSITION_DEFAULT},
ea5623a8efde Add 'disposition' bitfield to AVStream and use it for both muxing and demuxing
eugeni
parents: 3112
diff changeset
86 {"dub" , AV_DISPOSITION_DUB},
ea5623a8efde Add 'disposition' bitfield to AVStream and use it for both muxing and demuxing
eugeni
parents: 3112
diff changeset
87 {"original" , AV_DISPOSITION_ORIGINAL},
ea5623a8efde Add 'disposition' bitfield to AVStream and use it for both muxing and demuxing
eugeni
parents: 3112
diff changeset
88 {"comment" , AV_DISPOSITION_COMMENT},
ea5623a8efde Add 'disposition' bitfield to AVStream and use it for both muxing and demuxing
eugeni
parents: 3112
diff changeset
89 {"lyrics" , AV_DISPOSITION_LYRICS},
ea5623a8efde Add 'disposition' bitfield to AVStream and use it for both muxing and demuxing
eugeni
parents: 3112
diff changeset
90 {"karaoke" , AV_DISPOSITION_KARAOKE},
ea5623a8efde Add 'disposition' bitfield to AVStream and use it for both muxing and demuxing
eugeni
parents: 3112
diff changeset
91 {"" , 0}
ea5623a8efde Add 'disposition' bitfield to AVStream and use it for both muxing and demuxing
eugeni
parents: 3112
diff changeset
92 };
ea5623a8efde Add 'disposition' bitfield to AVStream and use it for both muxing and demuxing
eugeni
parents: 3112
diff changeset
93
5704
6b9c2a6d8fa4 Introduce metadata conversion table for NUT muxer and demuxer.
kostya
parents: 4076
diff changeset
94 const AVMetadataConv ff_nut_metadata_conv[] = {
6b9c2a6d8fa4 Introduce metadata conversion table for NUT muxer and demuxer.
kostya
parents: 4076
diff changeset
95 { "Author", "artist" },
6b9c2a6d8fa4 Introduce metadata conversion table for NUT muxer and demuxer.
kostya
parents: 4076
diff changeset
96 { "X-CreationTime", "date" },
6b9c2a6d8fa4 Introduce metadata conversion table for NUT muxer and demuxer.
kostya
parents: 4076
diff changeset
97 { "CreationTime", "date" },
6b9c2a6d8fa4 Introduce metadata conversion table for NUT muxer and demuxer.
kostya
parents: 4076
diff changeset
98 { "SourceFilename", "filename" },
6b9c2a6d8fa4 Introduce metadata conversion table for NUT muxer and demuxer.
kostya
parents: 4076
diff changeset
99 { "X-Language", "language" },
6b9c2a6d8fa4 Introduce metadata conversion table for NUT muxer and demuxer.
kostya
parents: 4076
diff changeset
100 { "X-Disposition", "disposition" },
6b9c2a6d8fa4 Introduce metadata conversion table for NUT muxer and demuxer.
kostya
parents: 4076
diff changeset
101 { "X-Replaces", "replaces" },
6b9c2a6d8fa4 Introduce metadata conversion table for NUT muxer and demuxer.
kostya
parents: 4076
diff changeset
102 { "X-Depends", "depends" },
6b9c2a6d8fa4 Introduce metadata conversion table for NUT muxer and demuxer.
kostya
parents: 4076
diff changeset
103 { "X-Uses", "uses" },
6b9c2a6d8fa4 Introduce metadata conversion table for NUT muxer and demuxer.
kostya
parents: 4076
diff changeset
104 { "X-UsesFont", "usesfont" },
6b9c2a6d8fa4 Introduce metadata conversion table for NUT muxer and demuxer.
kostya
parents: 4076
diff changeset
105 { 0 },
6b9c2a6d8fa4 Introduce metadata conversion table for NUT muxer and demuxer.
kostya
parents: 4076
diff changeset
106 };