Rename var: val -> energy
[FFMpeg-mirror/DVCPRO-HD.git] / libavformat / rm.h
blob2f7f8df2eeb96dcf84caf39e9567b83acb7a42db
1 /*
2 * "Real" compatible muxer and demuxer.
3 * Copyright (c) 2000, 2001 Fabrice Bellard.
5 * This file is part of FFmpeg.
7 * FFmpeg is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
12 * FFmpeg is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with FFmpeg; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 #ifndef FFMPEG_RM_H
23 #define FFMPEG_RM_H
25 #include "avformat.h"
28 typedef struct {
29 int nb_packets;
30 int packet_total_size;
31 int packet_max_size;
32 /* codec related output */
33 int bit_rate;
34 float frame_rate;
35 int nb_frames; /* current frame number */
36 int total_frames; /* total number of frames */
37 int num;
38 AVCodecContext *enc;
39 } StreamInfo;
41 typedef struct {
42 StreamInfo streams[2];
43 StreamInfo *audio_stream, *video_stream;
44 int data_pos; /* position of the data after the header */
45 int nb_packets;
46 int old_format;
47 int current_stream;
48 int remaining_len;
49 uint8_t *videobuf; ///< place to store merged video frame
50 int videobufsize; ///< current assembled frame size
51 int videobufpos; ///< position for the next slice in the video buffer
52 int curpic_num; ///< picture number of current frame
53 int cur_slice, slices;
54 int64_t pktpos; ///< first slice position in file
55 /// Audio descrambling matrix parameters
56 uint8_t *audiobuf; ///< place to store reordered audio data
57 int64_t audiotimestamp; ///< Audio packet timestamp
58 int sub_packet_cnt; // Subpacket counter, used while reading
59 int sub_packet_size, sub_packet_h, coded_framesize; ///< Descrambling parameters from container
60 int audio_stream_num; ///< Stream number for audio packets
61 int audio_pkt_cnt; ///< Output packet counter
62 int audio_framesize; /// Audio frame size from container
63 int sub_packet_lengths[16]; /// Length of each aac subpacket
64 } RMContext;
66 /**
67 * Read the MDPR chunk, which contains stream-specific codec initialization
68 * parameters.
70 * @param s context containing RMContext and ByteIOContext for stream reading
71 * @param st the stream that the MDPR chunk belongs to and where to store the
72 * parameters read from the chunk into
73 * @return 0 on success, errno codes on error
75 int ff_rm_read_mdpr_codecdata (AVFormatContext *s, AVStream *st);
77 /**
78 * Parse one rm-stream packet from the input bytestream.
80 * @param s context containing RMContext and ByteIOContext for stream reading
81 * @param st stream to which the packet to be read belongs
82 * @param len packet length to read from the input
83 * @param pkt packet location to store the parsed packet data
84 * @param seq pointer to an integer containing the sequence number, may be
85 * updated
86 * @param flags pointer to an integer containing the packet flags, may be
87 updated
88 * @param ts pointer to timestamp, may be updated
89 * @return 0 on success, errno codes on error
91 int ff_rm_parse_packet (AVFormatContext *s, AVStream *st, int len,
92 AVPacket *pkt, int *seq, int *flags, int64_t *ts);
94 /**
95 * Retrieve one cached packet from the rm-context. The real container can
96 * store several packets (as interpreted by the codec) in a single container
97 * packet, which means the demuxer holds some back when the first container
98 * packet is parsed and returned. The result is that rm->audio_pkt_cnt is
99 * a positive number, the amount of cached packets. Using this function, each
100 * of those packets can be retrieved sequentially.
102 * @param s context containing RMContext and ByteIOContext for stream reading
103 * @param st stream that this packet belongs to
104 * @param pkt location to store the packet data
106 void ff_rm_retrieve_cache (AVFormatContext *s, AVStream *st, AVPacket *pkt);
108 #endif /* FFMPEG_RM_H */