* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#include "libavutil/channel_layout.h"
#include "libavutil/common.h"
#include "avformat.h"
#include "internal.h"
#include "gxf.h"
+#include "libavcodec/mpeg12data.h"
struct gxf_stream_info {
int64_t first_field;
i = ff_find_stream_index(s, id);
if (i >= 0)
return i;
- st = av_new_stream(s, id);
+ st = avformat_new_stream(s, NULL);
if (!st)
return AVERROR(ENOMEM);
+ st->id = id;
switch (format) {
case 3:
case 4:
st->codec->codec_type = AVMEDIA_TYPE_VIDEO;
- st->codec->codec_id = CODEC_ID_MJPEG;
+ st->codec->codec_id = AV_CODEC_ID_MJPEG;
break;
case 13:
case 15:
st->codec->codec_type = AVMEDIA_TYPE_VIDEO;
- st->codec->codec_id = CODEC_ID_DVVIDEO;
+ st->codec->codec_id = AV_CODEC_ID_DVVIDEO;
break;
case 14:
case 16:
st->codec->codec_type = AVMEDIA_TYPE_VIDEO;
- st->codec->codec_id = CODEC_ID_DVVIDEO;
+ st->codec->codec_id = AV_CODEC_ID_DVVIDEO;
break;
case 11:
case 12:
case 20:
st->codec->codec_type = AVMEDIA_TYPE_VIDEO;
- st->codec->codec_id = CODEC_ID_MPEG2VIDEO;
+ st->codec->codec_id = AV_CODEC_ID_MPEG2VIDEO;
st->need_parsing = AVSTREAM_PARSE_HEADERS; //get keyframe flag etc.
break;
case 22:
case 23:
st->codec->codec_type = AVMEDIA_TYPE_VIDEO;
- st->codec->codec_id = CODEC_ID_MPEG1VIDEO;
+ st->codec->codec_id = AV_CODEC_ID_MPEG1VIDEO;
st->need_parsing = AVSTREAM_PARSE_HEADERS; //get keyframe flag etc.
break;
case 9:
st->codec->codec_type = AVMEDIA_TYPE_AUDIO;
- st->codec->codec_id = CODEC_ID_PCM_S24LE;
+ st->codec->codec_id = AV_CODEC_ID_PCM_S24LE;
st->codec->channels = 1;
+ st->codec->channel_layout = AV_CH_LAYOUT_MONO;
st->codec->sample_rate = 48000;
st->codec->bit_rate = 3 * 1 * 48000 * 8;
st->codec->block_align = 3 * 1;
break;
case 10:
st->codec->codec_type = AVMEDIA_TYPE_AUDIO;
- st->codec->codec_id = CODEC_ID_PCM_S16LE;
+ st->codec->codec_id = AV_CODEC_ID_PCM_S16LE;
st->codec->channels = 1;
+ st->codec->channel_layout = AV_CH_LAYOUT_MONO;
st->codec->sample_rate = 48000;
st->codec->bit_rate = 2 * 1 * 48000 * 8;
st->codec->block_align = 2 * 1;
break;
case 17:
st->codec->codec_type = AVMEDIA_TYPE_AUDIO;
- st->codec->codec_id = CODEC_ID_AC3;
+ st->codec->codec_id = AV_CODEC_ID_AC3;
st->codec->channels = 2;
+ st->codec->channel_layout = AV_CH_LAYOUT_STEREO;
st->codec->sample_rate = 48000;
break;
// timecode tracks:
case 8:
case 24:
st->codec->codec_type = AVMEDIA_TYPE_DATA;
- st->codec->codec_id = CODEC_ID_NONE;
+ st->codec->codec_id = AV_CODEC_ID_NONE;
break;
default:
st->codec->codec_type = AVMEDIA_TYPE_UNKNOWN;
- st->codec->codec_id = CODEC_ID_NONE;
+ st->codec->codec_id = AV_CODEC_ID_NONE;
break;
}
return s->nb_streams - 1;
}
}
+static const AVRational frame_rate_tab[] = {
+ { 60, 1},
+ {60000, 1001},
+ { 50, 1},
+ { 30, 1},
+ {30000, 1001},
+ { 25, 1},
+ { 24, 1},
+ {24000, 1001},
+ { 0, 0},
+};
+
/**
* @brief convert fps tag value to AVRational fps
* @param fps fps value from tag
* @return fps as AVRational, or 0 / 0 if unknown
*/
static AVRational fps_tag2avr(int32_t fps) {
- extern const AVRational ff_frame_rate_tab[];
if (fps < 1 || fps > 9) fps = 9;
- return ff_frame_rate_tab[9 - fps]; // values have opposite order
+ return frame_rate_tab[fps - 1];
}
/**
avio_skip(pb, pkt_len);
}
-static int gxf_header(AVFormatContext *s, AVFormatParameters *ap) {
+static int gxf_header(AVFormatContext *s) {
AVIOContext *pb = s->pb;
GXFPktType pkt_type;
int map_len;
main_timebase = (AVRational){1001, 60000};
for (i = 0; i < s->nb_streams; i++) {
AVStream *st = s->streams[i];
- av_set_pts_info(st, 32, main_timebase.num, main_timebase.den);
+ avpriv_set_pts_info(st, 32, main_timebase.num, main_timebase.den);
}
return 0;
}
avio_rb32(pb); // "timeline" field number
avio_r8(pb); // flags
avio_r8(pb); // reserved
- if (st->codec->codec_id == CODEC_ID_PCM_S24LE ||
- st->codec->codec_id == CODEC_ID_PCM_S16LE) {
+ if (st->codec->codec_id == AV_CODEC_ID_PCM_S24LE ||
+ st->codec->codec_id == AV_CODEC_ID_PCM_S16LE) {
int first = field_info >> 16;
int last = field_info & 0xffff; // last is exclusive
int bps = av_get_bits_per_sample(st->codec->codec_id)>>3;
pkt->dts = field_nr;
//set duration manually for DV or else lavf misdetects the frame rate
- if (st->codec->codec_id == CODEC_ID_DVVIDEO)
+ if (st->codec->codec_id == AV_CODEC_ID_DVVIDEO)
pkt->duration = si->fields_per_frame;
return ret;
AVInputFormat ff_gxf_demuxer = {
.name = "gxf",
- .long_name = NULL_IF_CONFIG_SMALL("GXF format"),
+ .long_name = NULL_IF_CONFIG_SMALL("GXF (General eXchange Format)"),
.priv_data_size = sizeof(struct gxf_stream_info),
.read_probe = gxf_probe,
.read_header = gxf_header,