summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/APIchanges6
-rw-r--r--libavcodec/mlp_parser.c59
-rw-r--r--libavformat/avio.h12
-rw-r--r--libavformat/avio_internal.h6
-rw-r--r--libavformat/aviobuf.c14
-rw-r--r--libavformat/nutdec.c16
-rw-r--r--libavformat/nutenc.c15
-rw-r--r--libavformat/oggenc.c4
-rw-r--r--libavformat/rtspdec.c2
9 files changed, 105 insertions, 29 deletions
diff --git a/doc/APIchanges b/doc/APIchanges
index c246cef2e1..6715972c8c 100644
--- a/doc/APIchanges
+++ b/doc/APIchanges
@@ -462,16 +462,22 @@ API changes, most recent first:
2010-05-26 - r23334 - lavc 52.72.0 - CODEC_CAP_EXPERIMENTAL
Add CODEC_CAP_EXPERIMENTAL flag.
+ NOTE: this was backported to 0.6
2010-05-23 - r23255 - lavu 50.16.0 - av_get_random_seed()
Add av_get_random_seed().
2010-05-18 - r23161 - lavf 52.63.0 - AVFMT_FLAG_RTP_HINT
Add AVFMT_FLAG_RTP_HINT as possible value for AVFormatContext.flags.
+ NOTE: this was backported to 0.6
2010-05-09 - r23066 - lavfi 1.20.0 - AVFilterPicRef
Add interlaced and top_field_first fields to AVFilterPicRef.
+------------------------------8<-------------------------------------
+ 0.6 branch was cut here
+----------------------------->8--------------------------------------
+
2010-05-01 - r23002 - lavf 52.62.0 - probe function
Add av_probe_input_format2 to API, it allows ignoring probe
results below given score and returns the actual probe score.
diff --git a/libavcodec/mlp_parser.c b/libavcodec/mlp_parser.c
index a6196f9abd..90b0d00f8a 100644
--- a/libavcodec/mlp_parser.c
+++ b/libavcodec/mlp_parser.c
@@ -42,11 +42,52 @@ static const uint8_t mlp_channels[32] = {
5, 6, 5, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
};
+static const uint64_t mlp_layout[32] = {
+ AV_CH_LAYOUT_MONO,
+ AV_CH_LAYOUT_STEREO,
+ AV_CH_LAYOUT_2_1,
+ AV_CH_LAYOUT_2_2,
+ AV_CH_LAYOUT_STEREO|AV_CH_LOW_FREQUENCY,
+ AV_CH_LAYOUT_2_1|AV_CH_LOW_FREQUENCY,
+ AV_CH_LAYOUT_2_2|AV_CH_LOW_FREQUENCY,
+ AV_CH_LAYOUT_SURROUND,
+ AV_CH_LAYOUT_4POINT0,
+ AV_CH_LAYOUT_5POINT0,
+ AV_CH_LAYOUT_SURROUND|AV_CH_LOW_FREQUENCY,
+ AV_CH_LAYOUT_4POINT0|AV_CH_LOW_FREQUENCY,
+ AV_CH_LAYOUT_5POINT1,
+ AV_CH_LAYOUT_4POINT0,
+ AV_CH_LAYOUT_5POINT0,
+ AV_CH_LAYOUT_SURROUND|AV_CH_LOW_FREQUENCY,
+ AV_CH_LAYOUT_4POINT0|AV_CH_LOW_FREQUENCY,
+ AV_CH_LAYOUT_5POINT1,
+ AV_CH_LAYOUT_2_2|AV_CH_LOW_FREQUENCY,
+ AV_CH_LAYOUT_5POINT0,
+ AV_CH_LAYOUT_5POINT1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
static const uint8_t thd_chancount[13] = {
// LR C LFE LRs LRvh LRc LRrs Cs Ts LRsd LRw Cvh LFE2
2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 1, 1
};
+static const uint64_t thd_layout[13] = {
+ AV_CH_FRONT_LEFT|AV_CH_FRONT_RIGHT, // LR
+ AV_CH_FRONT_CENTER, // C
+ AV_CH_LOW_FREQUENCY, // LFE
+ AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT, // LRs
+ AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_FRONT_RIGHT, // LRvh
+ AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT, // LRc
+ AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT, // LRrs
+ AV_CH_BACK_CENTER, // Cs
+ AV_CH_TOP_BACK_CENTER, // Ts
+ AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT, // LRsd
+ AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER, // LRw
+ AV_CH_TOP_BACK_CENTER, // Cvh
+ AV_CH_LOW_FREQUENCY // LFE2
+};
+
static int mlp_samplerate(int in)
{
if (in == 0xF)
@@ -65,6 +106,16 @@ static int truehd_channels(int chanmap)
return channels;
}
+static int64_t truehd_layout(int chanmap)
+{
+ int layout = 0, i;
+
+ for (i = 0; i < 13; i++)
+ layout |= thd_layout[i] * ((chanmap >> i) & 1);
+
+ return layout;
+}
+
/** Read a major sync info header - contains high level information about
* the stream - sample rate, channel arrangement etc. Most of this
* information is not actually necessary for decoding, only for playback.
@@ -264,12 +315,16 @@ static int mlp_parse(AVCodecParserContext *s,
if (mh.stream_type == 0xbb) {
/* MLP stream */
avctx->channels = mlp_channels[mh.channels_mlp];
+ avctx->channel_layout = mlp_layout[mh.channels_mlp];
} else { /* mh.stream_type == 0xba */
/* TrueHD stream */
- if (mh.channels_thd_stream2)
+ if (mh.channels_thd_stream2) {
avctx->channels = truehd_channels(mh.channels_thd_stream2);
- else
+ avctx->channel_layout = truehd_layout(mh.channels_thd_stream2);
+ } else {
avctx->channels = truehd_channels(mh.channels_thd_stream1);
+ avctx->channel_layout = truehd_layout(mh.channels_thd_stream1);
+ }
}
if (!mh.is_vbr) /* Stream is CBR */
diff --git a/libavformat/avio.h b/libavformat/avio.h
index 173b6f7896..8cbd7aafec 100644
--- a/libavformat/avio.h
+++ b/libavformat/avio.h
@@ -447,6 +447,11 @@ attribute_deprecated int url_ferror(AVIOContext *s);
attribute_deprecated int udp_set_remote_url(URLContext *h, const char *uri);
attribute_deprecated int udp_get_local_port(URLContext *h);
+
+attribute_deprecated void init_checksum(AVIOContext *s,
+ unsigned long (*update_checksum)(unsigned long c, const uint8_t *p, unsigned int len),
+ unsigned long checksum);
+attribute_deprecated unsigned long get_checksum(AVIOContext *s);
#endif
AVIOContext *avio_alloc_context(
@@ -670,13 +675,6 @@ int url_open_dyn_packet_buf(AVIOContext **s, int max_packet_size);
*/
int url_close_dyn_buf(AVIOContext *s, uint8_t **pbuffer);
-unsigned long ff_crc04C11DB7_update(unsigned long checksum, const uint8_t *buf,
- unsigned int len);
-unsigned long get_checksum(AVIOContext *s);
-void init_checksum(AVIOContext *s,
- unsigned long (*update_checksum)(unsigned long c, const uint8_t *p, unsigned int len),
- unsigned long checksum);
-
#if FF_API_UDP_GET_FILE
int udp_get_file_handle(URLContext *h);
#endif
diff --git a/libavformat/avio_internal.h b/libavformat/avio_internal.h
index 53121ff44c..343a1185ea 100644
--- a/libavformat/avio_internal.h
+++ b/libavformat/avio_internal.h
@@ -74,5 +74,11 @@ int64_t ffio_read_seek (AVIOContext *h, int stream_index,
int ff_udp_set_remote_url(URLContext *h, const char *uri);
int ff_udp_get_local_port(URLContext *h);
+void ffio_init_checksum(AVIOContext *s,
+ unsigned long (*update_checksum)(unsigned long c, const uint8_t *p, unsigned int len),
+ unsigned long checksum);
+unsigned long ffio_get_checksum(AVIOContext *s);
+unsigned long ff_crc04C11DB7_update(unsigned long checksum, const uint8_t *buf,
+ unsigned int len);
#endif // AVFORMAT_AVIO_INTERNAL_H
diff --git a/libavformat/aviobuf.c b/libavformat/aviobuf.c
index 174df21b89..9ba82d3e94 100644
--- a/libavformat/aviobuf.c
+++ b/libavformat/aviobuf.c
@@ -415,6 +415,16 @@ int64_t av_url_read_fseek(AVIOContext *s, int stream_index,
{
return ffio_read_seek(s, stream_index, timestamp, flags);
}
+void init_checksum(AVIOContext *s,
+ unsigned long (*update_checksum)(unsigned long c, const uint8_t *p, unsigned int len),
+ unsigned long checksum)
+{
+ ffio_init_checksum(s, update_checksum, checksum);
+}
+unsigned long get_checksum(AVIOContext *s)
+{
+ return ffio_get_checksum(s);
+}
#endif
int avio_put_str(AVIOContext *s, const char *str)
@@ -557,14 +567,14 @@ unsigned long ff_crc04C11DB7_update(unsigned long checksum, const uint8_t *buf,
return av_crc(av_crc_get_table(AV_CRC_32_IEEE), checksum, buf, len);
}
-unsigned long get_checksum(AVIOContext *s)
+unsigned long ffio_get_checksum(AVIOContext *s)
{
s->checksum= s->update_checksum(s->checksum, s->checksum_ptr, s->buf_ptr - s->checksum_ptr);
s->update_checksum= NULL;
return s->checksum;
}
-void init_checksum(AVIOContext *s,
+void ffio_init_checksum(AVIOContext *s,
unsigned long (*update_checksum)(unsigned long c, const uint8_t *p, unsigned int len),
unsigned long checksum)
{
diff --git a/libavformat/nutdec.c b/libavformat/nutdec.c
index b957644f12..bd77f785dc 100644
--- a/libavformat/nutdec.c
+++ b/libavformat/nutdec.c
@@ -104,14 +104,14 @@ static int get_packetheader(NUTContext *nut, AVIOContext *bc, int calculate_chec
startcode= av_be2ne64(startcode);
startcode= ff_crc04C11DB7_update(0, (uint8_t*)&startcode, 8);
- init_checksum(bc, ff_crc04C11DB7_update, startcode);
+ ffio_init_checksum(bc, ff_crc04C11DB7_update, startcode);
size= ffio_read_varlen(bc);
if(size > 4096)
avio_rb32(bc);
- if(get_checksum(bc) && size > 4096)
+ if(ffio_get_checksum(bc) && size > 4096)
return -1;
- init_checksum(bc, calculate_checksum ? ff_crc04C11DB7_update : NULL, 0);
+ ffio_init_checksum(bc, calculate_checksum ? ff_crc04C11DB7_update : NULL, 0);
return size;
}
@@ -285,7 +285,7 @@ static int decode_main_header(NUTContext *nut){
assert(nut->header_len[0]==0);
}
- if(skip_reserved(bc, end) || get_checksum(bc)){
+ if(skip_reserved(bc, end) || ffio_get_checksum(bc)){
av_log(s, AV_LOG_ERROR, "main header checksum mismatch\n");
return AVERROR_INVALIDDATA;
}
@@ -374,7 +374,7 @@ static int decode_stream_header(NUTContext *nut){
ffio_read_varlen(bc); // samplerate_den
GET_V(st->codec->channels, tmp > 0)
}
- if(skip_reserved(bc, end) || get_checksum(bc)){
+ if(skip_reserved(bc, end) || ffio_get_checksum(bc)){
av_log(s, AV_LOG_ERROR, "stream header %d checksum mismatch\n", stream_id);
return -1;
}
@@ -469,7 +469,7 @@ static int decode_info_header(NUTContext *nut){
}
}
- if(skip_reserved(bc, end) || get_checksum(bc)){
+ if(skip_reserved(bc, end) || ffio_get_checksum(bc)){
av_log(s, AV_LOG_ERROR, "info header checksum mismatch\n");
return -1;
}
@@ -493,7 +493,7 @@ static int decode_syncpoint(NUTContext *nut, int64_t *ts, int64_t *back_ptr){
ff_nut_reset_ts(nut, nut->time_base[tmp % nut->time_base_count], tmp / nut->time_base_count);
- if(skip_reserved(bc, end) || get_checksum(bc)){
+ if(skip_reserved(bc, end) || ffio_get_checksum(bc)){
av_log(s, AV_LOG_ERROR, "sync point checksum mismatch\n");
return -1;
}
@@ -590,7 +590,7 @@ static int find_and_decode_index(NUTContext *nut){
}
}
- if(skip_reserved(bc, end) || get_checksum(bc)){
+ if(skip_reserved(bc, end) || ffio_get_checksum(bc)){
av_log(s, AV_LOG_ERROR, "index checksum mismatch\n");
goto fail;
}
diff --git a/libavformat/nutenc.c b/libavformat/nutenc.c
index fafbae86e5..9bb9a4e502 100644
--- a/libavformat/nutenc.c
+++ b/libavformat/nutenc.c
@@ -24,6 +24,7 @@
#include "libavcodec/mpegaudiodata.h"
#include "nut.h"
#include "internal.h"
+#include "avio_internal.h"
static int find_expected_header(AVCodecContext *c, int size, int key_frame, uint8_t out[64]){
int sample_rate= c->sample_rate;
@@ -284,17 +285,17 @@ static void put_packet(NUTContext *nut, AVIOContext *bc, AVIOContext *dyn_bc, in
int forw_ptr= dyn_size + 4*calculate_checksum;
if(forw_ptr > 4096)
- init_checksum(bc, ff_crc04C11DB7_update, 0);
+ ffio_init_checksum(bc, ff_crc04C11DB7_update, 0);
avio_wb64(bc, startcode);
ff_put_v(bc, forw_ptr);
if(forw_ptr > 4096)
- avio_wl32(bc, get_checksum(bc));
+ avio_wl32(bc, ffio_get_checksum(bc));
if(calculate_checksum)
- init_checksum(bc, ff_crc04C11DB7_update, 0);
+ ffio_init_checksum(bc, ff_crc04C11DB7_update, 0);
avio_write(bc, dyn_buf, dyn_size);
if(calculate_checksum)
- avio_wl32(bc, get_checksum(bc));
+ avio_wl32(bc, ffio_get_checksum(bc));
av_free(dyn_buf);
}
@@ -806,7 +807,7 @@ static int write_packet(AVFormatContext *s, AVPacket *pkt){
needed_flags= get_needed_flags(nut, nus, fc, pkt);
header_idx= fc->header_idx;
- init_checksum(bc, ff_crc04C11DB7_update, 0);
+ ffio_init_checksum(bc, ff_crc04C11DB7_update, 0);
avio_w8(bc, frame_code);
if(flags & FLAG_CODED){
ff_put_v(bc, (flags^needed_flags) & ~(FLAG_CODED));
@@ -817,8 +818,8 @@ static int write_packet(AVFormatContext *s, AVPacket *pkt){
if(flags & FLAG_SIZE_MSB) ff_put_v(bc, pkt->size / fc->size_mul);
if(flags & FLAG_HEADER_IDX) ff_put_v(bc, header_idx= best_header_idx);
- if(flags & FLAG_CHECKSUM) avio_wl32(bc, get_checksum(bc));
- else get_checksum(bc);
+ if(flags & FLAG_CHECKSUM) avio_wl32(bc, ffio_get_checksum(bc));
+ else ffio_get_checksum(bc);
avio_write(bc, pkt->data + nut->header_len[header_idx], pkt->size - nut->header_len[header_idx]);
nus->last_flags= flags;
diff --git a/libavformat/oggenc.c b/libavformat/oggenc.c
index fd88650629..a039d689e6 100644
--- a/libavformat/oggenc.c
+++ b/libavformat/oggenc.c
@@ -68,7 +68,7 @@ typedef struct {
static void ogg_update_checksum(AVFormatContext *s, AVIOContext *pb, int64_t crc_offset)
{
int64_t pos = avio_tell(pb);
- uint32_t checksum = get_checksum(pb);
+ uint32_t checksum = ffio_get_checksum(pb);
avio_seek(pb, crc_offset, SEEK_SET);
avio_wb32(pb, checksum);
avio_seek(pb, pos, SEEK_SET);
@@ -85,7 +85,7 @@ static int ogg_write_page(AVFormatContext *s, OGGPage *page, int extra_flags)
ret = url_open_dyn_buf(&pb);
if (ret < 0)
return ret;
- init_checksum(pb, ff_crc04C11DB7_update, 0);
+ ffio_init_checksum(pb, ff_crc04C11DB7_update, 0);
ffio_wfourcc(pb, "OggS");
avio_w8(pb, 0);
avio_w8(pb, page->flags | extra_flags);
diff --git a/libavformat/rtspdec.c b/libavformat/rtspdec.c
index 8fa419714e..4150008179 100644
--- a/libavformat/rtspdec.c
+++ b/libavformat/rtspdec.c
@@ -340,7 +340,7 @@ retry:
/* send dummy request to keep TCP connection alive */
if ((av_gettime() - rt->last_cmd_time) / 1000000 >= rt->timeout / 2) {
- if (rt->server_type == RTSP_SERVER_WMS) {
+ if (rt->server_type != RTSP_SERVER_REAL) {
ff_rtsp_send_cmd_async(s, "GET_PARAMETER", rt->control_uri, NULL);
} else {
ff_rtsp_send_cmd_async(s, "OPTIONS", "*", NULL);