Commit 84b39d3e authored by Clément Bœsch's avatar Clément Bœsch

Merge commit 'b8de14bc'

* commit 'b8de14bc':
  tools: Port to codec parameters API
Merged-by: 's avatarClément Bœsch <clement@stupeflix.com>
parents c3b0af74 b8de14bc
...@@ -453,41 +453,41 @@ fail: ...@@ -453,41 +453,41 @@ fail:
return err; return err;
} }
static int get_private_data(struct Track *track, AVCodecContext *codec) static int get_private_data(struct Track *track, AVCodecParameters *codecpar)
{ {
track->codec_private_size = 0; track->codec_private_size = 0;
track->codec_private = av_mallocz(codec->extradata_size); track->codec_private = av_mallocz(codecpar->extradata_size);
if (!track->codec_private) if (!track->codec_private)
return AVERROR(ENOMEM); return AVERROR(ENOMEM);
track->codec_private_size = codec->extradata_size; track->codec_private_size = codecpar->extradata_size;
memcpy(track->codec_private, codec->extradata, codec->extradata_size); memcpy(track->codec_private, codecpar->extradata, codecpar->extradata_size);
return 0; return 0;
} }
static int get_video_private_data(struct Track *track, AVCodecContext *codec) static int get_video_private_data(struct Track *track, AVCodecParameters *codecpar)
{ {
AVIOContext *io = NULL; AVIOContext *io = NULL;
uint16_t sps_size, pps_size; uint16_t sps_size, pps_size;
int err; int err;
if (codec->codec_id == AV_CODEC_ID_VC1) if (codecpar->codec_id == AV_CODEC_ID_VC1)
return get_private_data(track, codec); return get_private_data(track, codecpar);
if ((err = avio_open_dyn_buf(&io)) < 0) if ((err = avio_open_dyn_buf(&io)) < 0)
goto fail; goto fail;
err = AVERROR(EINVAL); err = AVERROR(EINVAL);
if (codec->extradata_size < 11 || codec->extradata[0] != 1) if (codecpar->extradata_size < 11 || codecpar->extradata[0] != 1)
goto fail; goto fail;
sps_size = AV_RB16(&codec->extradata[6]); sps_size = AV_RB16(&codecpar->extradata[6]);
if (11 + sps_size > codec->extradata_size) if (11 + sps_size > codecpar->extradata_size)
goto fail; goto fail;
avio_wb32(io, 0x00000001); avio_wb32(io, 0x00000001);
avio_write(io, &codec->extradata[8], sps_size); avio_write(io, &codecpar->extradata[8], sps_size);
pps_size = AV_RB16(&codec->extradata[9 + sps_size]); pps_size = AV_RB16(&codecpar->extradata[9 + sps_size]);
if (11 + sps_size + pps_size > codec->extradata_size) if (11 + sps_size + pps_size > codecpar->extradata_size)
goto fail; goto fail;
avio_wb32(io, 0x00000001); avio_wb32(io, 0x00000001);
avio_write(io, &codec->extradata[11 + sps_size], pps_size); avio_write(io, &codecpar->extradata[11 + sps_size], pps_size);
err = 0; err = 0;
fail: fail:
...@@ -527,7 +527,7 @@ static int handle_file(struct Tracks *tracks, const char *file, int split, ...@@ -527,7 +527,7 @@ static int handle_file(struct Tracks *tracks, const char *file, int split,
struct Track **temp; struct Track **temp;
AVStream *st = ctx->streams[i]; AVStream *st = ctx->streams[i];
if (st->codec->bit_rate == 0) { if (st->codecpar->bit_rate == 0) {
fprintf(stderr, "Skipping track %d in %s as it has zero bitrate\n", fprintf(stderr, "Skipping track %d in %s as it has zero bitrate\n",
st->id, file); st->id, file);
continue; continue;
...@@ -553,12 +553,12 @@ static int handle_file(struct Tracks *tracks, const char *file, int split, ...@@ -553,12 +553,12 @@ static int handle_file(struct Tracks *tracks, const char *file, int split,
if ((ptr = strrchr(file, '/'))) if ((ptr = strrchr(file, '/')))
track->name = ptr + 1; track->name = ptr + 1;
track->bitrate = st->codec->bit_rate; track->bitrate = st->codecpar->bit_rate;
track->track_id = st->id; track->track_id = st->id;
track->timescale = st->time_base.den; track->timescale = st->time_base.den;
track->duration = st->duration; track->duration = st->duration;
track->is_audio = st->codec->codec_type == AVMEDIA_TYPE_AUDIO; track->is_audio = st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO;
track->is_video = st->codec->codec_type == AVMEDIA_TYPE_VIDEO; track->is_video = st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO;
if (!track->is_audio && !track->is_video) { if (!track->is_audio && !track->is_video) {
fprintf(stderr, fprintf(stderr,
...@@ -576,30 +576,30 @@ static int handle_file(struct Tracks *tracks, const char *file, int split, ...@@ -576,30 +576,30 @@ static int handle_file(struct Tracks *tracks, const char *file, int split,
if (tracks->audio_track < 0) if (tracks->audio_track < 0)
tracks->audio_track = tracks->nb_tracks; tracks->audio_track = tracks->nb_tracks;
tracks->nb_audio_tracks++; tracks->nb_audio_tracks++;
track->channels = st->codec->channels; track->channels = st->codecpar->channels;
track->sample_rate = st->codec->sample_rate; track->sample_rate = st->codecpar->sample_rate;
if (st->codec->codec_id == AV_CODEC_ID_AAC) { if (st->codecpar->codec_id == AV_CODEC_ID_AAC) {
track->fourcc = "AACL"; track->fourcc = "AACL";
track->tag = 255; track->tag = 255;
track->blocksize = 4; track->blocksize = 4;
} else if (st->codec->codec_id == AV_CODEC_ID_WMAPRO) { } else if (st->codecpar->codec_id == AV_CODEC_ID_WMAPRO) {
track->fourcc = "WMAP"; track->fourcc = "WMAP";
track->tag = st->codec->codec_tag; track->tag = st->codecpar->codec_tag;
track->blocksize = st->codec->block_align; track->blocksize = st->codecpar->block_align;
} }
get_private_data(track, st->codec); get_private_data(track, st->codecpar);
} }
if (track->is_video) { if (track->is_video) {
if (tracks->video_track < 0) if (tracks->video_track < 0)
tracks->video_track = tracks->nb_tracks; tracks->video_track = tracks->nb_tracks;
tracks->nb_video_tracks++; tracks->nb_video_tracks++;
track->width = st->codec->width; track->width = st->codecpar->width;
track->height = st->codec->height; track->height = st->codecpar->height;
if (st->codec->codec_id == AV_CODEC_ID_H264) if (st->codecpar->codec_id == AV_CODEC_ID_H264)
track->fourcc = "H264"; track->fourcc = "H264";
else if (st->codec->codec_id == AV_CODEC_ID_VC1) else if (st->codecpar->codec_id == AV_CODEC_ID_VC1)
track->fourcc = "WVC1"; track->fourcc = "WVC1";
get_video_private_data(track, st->codec); get_video_private_data(track, st->codecpar);
} }
tracks->nb_tracks++; tracks->nb_tracks++;
......
...@@ -52,22 +52,23 @@ struct Tracks { ...@@ -52,22 +52,23 @@ struct Tracks {
int multiple_tracks_per_file; int multiple_tracks_per_file;
}; };
static void set_codec_str(AVCodecContext *codec, char *str, int size) static void set_codec_str(AVCodecParameters *codecpar, char *str, int size)
{ {
switch (codec->codec_id) { switch (codecpar->codec_id) {
case AV_CODEC_ID_H264: case AV_CODEC_ID_H264:
snprintf(str, size, "avc1"); snprintf(str, size, "avc1");
if (codec->extradata_size >= 4 && codec->extradata[0] == 1) { if (codecpar->extradata_size >= 4 && codecpar->extradata[0] == 1) {
av_strlcatf(str, size, ".%02x%02x%02x", av_strlcatf(str, size, ".%02x%02x%02x",
codec->extradata[1], codec->extradata[2], codec->extradata[3]); codecpar->extradata[1], codecpar->extradata[2],
codecpar->extradata[3]);
} }
break; break;
case AV_CODEC_ID_AAC: case AV_CODEC_ID_AAC:
snprintf(str, size, "mp4a.40"); // 0x40 is the mp4 object type for AAC snprintf(str, size, "mp4a.40"); // 0x40 is the mp4 object type for AAC
if (codec->extradata_size >= 2) { if (codecpar->extradata_size >= 2) {
int aot = codec->extradata[0] >> 3; int aot = codecpar->extradata[0] >> 3;
if (aot == 31) if (aot == 31)
aot = ((AV_RB16(codec->extradata) >> 5) & 0x3f) + 32; aot = ((AV_RB16(codecpar->extradata) >> 5) & 0x3f) + 32;
av_strlcatf(str, size, ".%d", aot); av_strlcatf(str, size, ".%d", aot);
} }
break; break;
...@@ -145,7 +146,7 @@ static int handle_file(struct Tracks *tracks, const char *file) ...@@ -145,7 +146,7 @@ static int handle_file(struct Tracks *tracks, const char *file)
struct Track **temp; struct Track **temp;
AVStream *st = ctx->streams[i]; AVStream *st = ctx->streams[i];
if (st->codec->bit_rate == 0) { if (st->codecpar->bit_rate == 0) {
fprintf(stderr, "Skipping track %d in %s as it has zero bitrate\n", fprintf(stderr, "Skipping track %d in %s as it has zero bitrate\n",
st->id, file); st->id, file);
continue; continue;
...@@ -170,12 +171,12 @@ static int handle_file(struct Tracks *tracks, const char *file) ...@@ -170,12 +171,12 @@ static int handle_file(struct Tracks *tracks, const char *file)
if ((ptr = strrchr(file, '/'))) if ((ptr = strrchr(file, '/')))
track->name = ptr + 1; track->name = ptr + 1;
track->bitrate = st->codec->bit_rate; track->bitrate = st->codecpar->bit_rate;
track->track_id = st->id; track->track_id = st->id;
track->timescale = st->time_base.den; track->timescale = st->time_base.den;
track->duration = st->duration; track->duration = st->duration;
track->is_audio = st->codec->codec_type == AVMEDIA_TYPE_AUDIO; track->is_audio = st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO;
track->is_video = st->codec->codec_type == AVMEDIA_TYPE_VIDEO; track->is_video = st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO;
if (!track->is_audio && !track->is_video) { if (!track->is_audio && !track->is_video) {
fprintf(stderr, fprintf(stderr,
...@@ -190,14 +191,14 @@ static int handle_file(struct Tracks *tracks, const char *file) ...@@ -190,14 +191,14 @@ static int handle_file(struct Tracks *tracks, const char *file)
track->timescale, AV_ROUND_UP)); track->timescale, AV_ROUND_UP));
if (track->is_audio) { if (track->is_audio) {
track->channels = st->codec->channels; track->channels = st->codecpar->channels;
track->sample_rate = st->codec->sample_rate; track->sample_rate = st->codecpar->sample_rate;
} }
if (track->is_video) { if (track->is_video) {
track->width = st->codec->width; track->width = st->codecpar->width;
track->height = st->codec->height; track->height = st->codecpar->height;
} }
set_codec_str(st->codec, track->codec_str, sizeof(track->codec_str)); set_codec_str(st->codecpar, track->codec_str, sizeof(track->codec_str));
tracks->nb_tracks++; tracks->nb_tracks++;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment