* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#include <inttypes.h>
+
#include "libavutil/intreadwrite.h"
#include "libavcodec/bytestream.h"
#include "avformat.h"
{ AV_CODEC_ID_NONE, 0 },
};
-typedef struct {
+typedef struct LXFDemuxContext {
int channels; ///< number of audio channels. zero means no audio
int frame_number; ///< current video frame
uint32_t video_format, packet_type, extended_size;
version = bytestream_get_le32(&p);
header_size = bytestream_get_le32(&p);
if (version > 1)
- avpriv_request_sample(s, "Unknown format version %i\n", version);
+ avpriv_request_sample(s, "Format version %"PRIu32, version);
if (header_size < (version ? 72 : 60) ||
header_size > LXF_MAX_PACKET_HEADER_SIZE ||
(header_size & 3)) {
- av_log(s, AV_LOG_ERROR, "Invalid header size 0x%x\n", header_size);
+ av_log(s, AV_LOG_ERROR, "Invalid header size 0x%"PRIx32"\n", header_size);
return AVERROR_INVALIDDATA;
}
break;
case 1:
//audio
- if (!(st = s->streams[1])) {
+ if (s->nb_streams < 2) {
av_log(s, AV_LOG_INFO, "got audio packet, but no audio stream present\n");
break;
}
channels = bytestream_get_le32(&p);
track_size = bytestream_get_le32(&p);
+ st = s->streams[1];
+
//set codec based on specified audio bitdepth
//we only support tightly packed 16-, 20-, 24- and 32-bit PCM at the moment
- st->codec->bits_per_coded_sample = (audio_format >> 6) & 0x3F;
+ st->codecpar->bits_per_coded_sample = (audio_format >> 6) & 0x3F;
- if (st->codec->bits_per_coded_sample != (audio_format & 0x3F)) {
+ if (st->codecpar->bits_per_coded_sample != (audio_format & 0x3F)) {
av_log(s, AV_LOG_WARNING, "only tightly packed PCM currently supported\n");
return AVERROR_PATCHWELCOME;
}
- switch (st->codec->bits_per_coded_sample) {
- case 16: st->codec->codec_id = AV_CODEC_ID_PCM_S16LE_PLANAR; break;
- case 20: st->codec->codec_id = AV_CODEC_ID_PCM_LXF; break;
- case 24: st->codec->codec_id = AV_CODEC_ID_PCM_S24LE_PLANAR; break;
- case 32: st->codec->codec_id = AV_CODEC_ID_PCM_S32LE_PLANAR; break;
+ switch (st->codecpar->bits_per_coded_sample) {
+ case 16: st->codecpar->codec_id = AV_CODEC_ID_PCM_S16LE_PLANAR; break;
+ case 20: st->codecpar->codec_id = AV_CODEC_ID_PCM_LXF; break;
+ case 24: st->codecpar->codec_id = AV_CODEC_ID_PCM_S24LE_PLANAR; break;
+ case 32: st->codecpar->codec_id = AV_CODEC_ID_PCM_S32LE_PLANAR; break;
default:
av_log(s, AV_LOG_WARNING,
"only 16-, 20-, 24- and 32-bit PCM currently supported\n");
return AVERROR_PATCHWELCOME;
}
- samples = track_size * 8 / st->codec->bits_per_coded_sample;
+ samples = track_size * 8 / st->codecpar->bits_per_coded_sample;
//use audio packet size to determine video standard
//for NTSC we have one 8008-sample audio frame per five video frames
expiration_date = AV_RL16(&header_data[58]);
disk_params = AV_RL32(&header_data[116]);
- st->codec->codec_type = AVMEDIA_TYPE_VIDEO;
- st->codec->bit_rate = 1000000 * ((video_params >> 14) & 0xFF);
- st->codec->codec_tag = video_params & 0xF;
- st->codec->codec_id = ff_codec_get_id(lxf_tags, st->codec->codec_tag);
+ st->codecpar->codec_type = AVMEDIA_TYPE_VIDEO;
+ st->codecpar->bit_rate = 1000000 * ((video_params >> 14) & 0xFF);
+ st->codecpar->codec_tag = video_params & 0xF;
+ st->codecpar->codec_id = ff_codec_get_id(lxf_tags, st->codecpar->codec_tag);
av_log(s, AV_LOG_DEBUG, "record: %x = %i-%02i-%02i\n",
record_date, 1900 + (record_date & 0x7F), (record_date >> 7) & 0xF,
if (!(st = avformat_new_stream(s, NULL)))
return AVERROR(ENOMEM);
- st->codec->codec_type = AVMEDIA_TYPE_AUDIO;
- st->codec->sample_rate = LXF_SAMPLERATE;
- st->codec->channels = lxf->channels;
+ st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO;
+ st->codecpar->sample_rate = LXF_SAMPLERATE;
+ st->codecpar->channels = lxf->channels;
- avpriv_set_pts_info(st, 64, 1, st->codec->sample_rate);
+ avpriv_set_pts_info(st, 64, 1, st->codecpar->sample_rate);
}
avio_skip(s->pb, lxf->extended_size);
{
LXFDemuxContext *lxf = s->priv_data;
AVIOContext *pb = s->pb;
- AVStream *ast = NULL;
uint32_t stream;
int ret, ret2;
stream = lxf->packet_type;
if (stream > 1) {
- av_log(s, AV_LOG_WARNING, "got packet with illegal stream index %u\n", stream);
+ av_log(s, AV_LOG_WARNING,
+ "got packet with illegal stream index %"PRIu32"\n", stream);
return AVERROR(EAGAIN);
}
- if (stream == 1 && !(ast = s->streams[1])) {
+ if (stream == 1 && s->nb_streams < 2) {
av_log(s, AV_LOG_ERROR, "got audio packet without having an audio stream\n");
return AVERROR_INVALIDDATA;
}
return ret2;
if ((ret2 = avio_read(pb, pkt->data, ret)) != ret) {
- av_free_packet(pkt);
+ av_packet_unref(pkt);
return ret2 < 0 ? ret2 : AVERROR_EOF;
}
pkt->stream_index = stream;
- if (!ast) {
+ if (!stream) {
//picture type (0 = closed I, 1 = open I, 2 = P, 3 = B)
if (((lxf->video_format >> 22) & 0x3) < 2)
pkt->flags |= AV_PKT_FLAG_KEY;