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
30 int packet_total_size
;
32 /* codec related output */
35 int nb_frames
; /* current frame number */
36 int total_frames
; /* total number of frames */
42 StreamInfo streams
[2];
43 StreamInfo
*audio_stream
, *video_stream
;
44 int data_pos
; /* position of the data after the header */
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
67 * Read the MDPR chunk, which contains stream-specific codec initialization
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
);
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
86 * @param flags pointer to an integer containing the packet flags, may be
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
);
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 */