Commit 6e44662b authored by Michael Niedermayer's avatar Michael Niedermayer

Merge commit 'ccc0ffb1'

* commit 'ccc0ffb1':
  idcin: set start_time and packet duration instead of manually tracking pts.
  idcin: set channel_layout
Merged-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parents 8d691f87 ccc0ffb1
...@@ -68,6 +68,7 @@ ...@@ -68,6 +68,7 @@
* transmitting them to the video decoder * transmitting them to the video decoder
*/ */
#include "libavutil/audioconvert.h"
#include "libavutil/imgutils.h" #include "libavutil/imgutils.h"
#include "libavutil/intreadwrite.h" #include "libavutil/intreadwrite.h"
#include "avformat.h" #include "avformat.h"
...@@ -81,13 +82,12 @@ typedef struct IdcinDemuxContext { ...@@ -81,13 +82,12 @@ typedef struct IdcinDemuxContext {
int audio_stream_index; int audio_stream_index;
int audio_chunk_size1; int audio_chunk_size1;
int audio_chunk_size2; int audio_chunk_size2;
int block_align;
/* demux state variables */ /* demux state variables */
int current_audio_chunk; int current_audio_chunk;
int next_chunk_is_video; int next_chunk_is_video;
int audio_present; int audio_present;
int64_t pts;
} IdcinDemuxContext; } IdcinDemuxContext;
static int idcin_probe(AVProbeData *p) static int idcin_probe(AVProbeData *p)
...@@ -180,6 +180,7 @@ static int idcin_read_header(AVFormatContext *s) ...@@ -180,6 +180,7 @@ static int idcin_read_header(AVFormatContext *s)
if (!st) if (!st)
return AVERROR(ENOMEM); return AVERROR(ENOMEM);
avpriv_set_pts_info(st, 33, 1, IDCIN_FPS); avpriv_set_pts_info(st, 33, 1, IDCIN_FPS);
st->start_time = 0;
idcin->video_stream_index = st->index; idcin->video_stream_index = st->index;
st->codec->codec_type = AVMEDIA_TYPE_VIDEO; st->codec->codec_type = AVMEDIA_TYPE_VIDEO;
st->codec->codec_id = AV_CODEC_ID_IDCIN; st->codec->codec_id = AV_CODEC_ID_IDCIN;
...@@ -199,15 +200,18 @@ static int idcin_read_header(AVFormatContext *s) ...@@ -199,15 +200,18 @@ static int idcin_read_header(AVFormatContext *s)
st = avformat_new_stream(s, NULL); st = avformat_new_stream(s, NULL);
if (!st) if (!st)
return AVERROR(ENOMEM); return AVERROR(ENOMEM);
avpriv_set_pts_info(st, 33, 1, IDCIN_FPS); avpriv_set_pts_info(st, 63, 1, sample_rate);
st->start_time = 0;
idcin->audio_stream_index = st->index; idcin->audio_stream_index = st->index;
st->codec->codec_type = AVMEDIA_TYPE_AUDIO; st->codec->codec_type = AVMEDIA_TYPE_AUDIO;
st->codec->codec_tag = 1; st->codec->codec_tag = 1;
st->codec->channels = channels; st->codec->channels = channels;
st->codec->channel_layout = channels > 1 ? AV_CH_LAYOUT_STEREO :
AV_CH_LAYOUT_MONO;
st->codec->sample_rate = sample_rate; st->codec->sample_rate = sample_rate;
st->codec->bits_per_coded_sample = bytes_per_sample * 8; st->codec->bits_per_coded_sample = bytes_per_sample * 8;
st->codec->bit_rate = sample_rate * bytes_per_sample * 8 * channels; st->codec->bit_rate = sample_rate * bytes_per_sample * 8 * channels;
st->codec->block_align = bytes_per_sample * channels; st->codec->block_align = idcin->block_align = bytes_per_sample * channels;
if (bytes_per_sample == 1) if (bytes_per_sample == 1)
st->codec->codec_id = AV_CODEC_ID_PCM_U8; st->codec->codec_id = AV_CODEC_ID_PCM_U8;
else else
...@@ -226,7 +230,6 @@ static int idcin_read_header(AVFormatContext *s) ...@@ -226,7 +230,6 @@ static int idcin_read_header(AVFormatContext *s)
} }
idcin->next_chunk_is_video = 1; idcin->next_chunk_is_video = 1;
idcin->pts = 0;
return 0; return 0;
} }
...@@ -293,7 +296,7 @@ static int idcin_read_packet(AVFormatContext *s, ...@@ -293,7 +296,7 @@ static int idcin_read_packet(AVFormatContext *s,
memcpy(pal, palette, AVPALETTE_SIZE); memcpy(pal, palette, AVPALETTE_SIZE);
} }
pkt->stream_index = idcin->video_stream_index; pkt->stream_index = idcin->video_stream_index;
pkt->pts = idcin->pts; pkt->duration = 1;
} else { } else {
/* send out the audio chunk */ /* send out the audio chunk */
if (idcin->current_audio_chunk) if (idcin->current_audio_chunk)
...@@ -304,10 +307,9 @@ static int idcin_read_packet(AVFormatContext *s, ...@@ -304,10 +307,9 @@ static int idcin_read_packet(AVFormatContext *s,
if (ret < 0) if (ret < 0)
return ret; return ret;
pkt->stream_index = idcin->audio_stream_index; pkt->stream_index = idcin->audio_stream_index;
pkt->pts = idcin->pts; pkt->duration = chunk_size / idcin->block_align;
idcin->current_audio_chunk ^= 1; idcin->current_audio_chunk ^= 1;
idcin->pts++;
} }
if (idcin->audio_present) if (idcin->audio_present)
......
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