AVIOContext *fragment;
};
-static av_cold int ac3_init(AVFormatContext *s, int st_index,
- PayloadContext *data)
-{
- if (st_index < 0)
- return 0;
- s->streams[st_index]->need_parsing = AVSTREAM_PARSE_FULL;
- return 0;
-}
-
static PayloadContext *ac3_new_context(void)
{
return av_mallocz(sizeof(PayloadContext));
}
-static inline void free_fragment_if_needed(PayloadContext *data)
+static void free_fragment(PayloadContext *data)
{
if (data->fragment) {
uint8_t *p;
static void ac3_free_context(PayloadContext *data)
{
- free_fragment_if_needed(data);
+ free_fragment(data);
av_free(data);
}
static int ac3_handle_packet(AVFormatContext *ctx, PayloadContext *data,
- AVStream *st, AVPacket *pkt, uint32_t *timestamp,
- const uint8_t *buf, int len, uint16_t seq,
- int flags)
+ AVStream *st, AVPacket *pkt, uint32_t *timestamp,
+ const uint8_t *buf, int len, uint16_t seq,
+ int flags)
{
unsigned frame_type;
unsigned nr_frames;
case 1:
case 2: /* First fragment */
- free_fragment_if_needed(data);
+ free_fragment(data);
data->last_frame = 1;
data->nr_frames = nr_frames;
}
if (nr_frames != data->nr_frames ||
data->timestamp != *timestamp) {
- free_fragment_if_needed(data);
+ free_fragment(data);
av_log(ctx, AV_LOG_ERROR, "Invalid packet received\n");
return AVERROR_INVALIDDATA;
}
return AVERROR(EAGAIN);
if (data->last_frame != data->nr_frames) {
- free_fragment_if_needed(data);
+ free_fragment(data);
av_log(ctx, AV_LOG_ERROR, "Missed %d packets\n",
data->nr_frames - data->last_frame);
return AVERROR_INVALIDDATA;
err = ff_rtp_finalize_packet(pkt, &data->fragment, st->index);
if (err < 0) {
av_log(ctx, AV_LOG_ERROR,
- "Error occurred when getting fragment buffer.");
+ "Error occurred when getting fragment buffer.\n");
return err;
}
.enc_name = "ac3",
.codec_type = AVMEDIA_TYPE_AUDIO,
.codec_id = AV_CODEC_ID_AC3,
- .init = ac3_init,
+ .need_parsing = AVSTREAM_PARSE_FULL,
.alloc = ac3_new_context,
.free = ac3_free_context,
.parse_packet = ac3_handle_packet,