libeplayer3: remove debugging output; abort if neither an audio nor a video stream is available

This commit is contained in:
martii
2014-03-22 13:26:29 +01:00
parent c3278d9c3e
commit ffb31db9fb

View File

@@ -635,6 +635,7 @@ static void FFMPEGThread(Context_t * context)
/* is there a decoder ? */ /* is there a decoder ? */
if (((AVStream *) subtitleTrack->stream)->codec->codec) { if (((AVStream *) subtitleTrack->stream)->codec->codec) {
AVSubtitle sub; AVSubtitle sub;
memset(&sub, 0, sizeof(sub));
int got_sub_ptr; int got_sub_ptr;
if (avcodec_decode_subtitle2(((AVStream *) subtitleTrack->stream)->codec, &sub, &got_sub_ptr, &packet) < 0) { if (avcodec_decode_subtitle2(((AVStream *) subtitleTrack->stream)->codec, &sub, &got_sub_ptr, &packet) < 0) {
@@ -717,29 +718,23 @@ static void log_callback(void *ptr __attribute__ ((unused)), int lvl __attribute
} }
static void container_ffmpeg_read_subtitle(Context_t * context, const char *filename, const char *format, int pid) { static void container_ffmpeg_read_subtitle(Context_t * context, const char *filename, const char *format, int pid) {
fprintf(stderr, "%s %d\n", __func__, __LINE__);
char *lastDot = strrchr(filename, '.'); char *lastDot = strrchr(filename, '.');
if (!lastDot) if (!lastDot)
return; return;
fprintf(stderr, "%s %d\n", __func__, __LINE__);
char *subfile = alloca(strlen(filename) + strlen(format)); char *subfile = alloca(strlen(filename) + strlen(format));
strcpy(subfile, filename); strcpy(subfile, filename);
strcpy(subfile + (lastDot + 1 - filename), format); strcpy(subfile + (lastDot + 1 - filename), format);
fprintf(stderr, "%s %d\n", __func__, __LINE__);
AVFormatContext *avfc = avformat_alloc_context(); AVFormatContext *avfc = avformat_alloc_context();
fprintf(stderr, "%s %d: %s\n", __func__, __LINE__, subfile);
if (avformat_open_input(&avfc, subfile, av_find_input_format(format), 0)) { if (avformat_open_input(&avfc, subfile, av_find_input_format(format), 0)) {
avformat_free_context(avfc); avformat_free_context(avfc);
return; return;
} }
fprintf(stderr, "%s %d\n", __func__, __LINE__);
avformat_find_stream_info(avfc, NULL); avformat_find_stream_info(avfc, NULL);
if (avfc->nb_streams != 1) { if (avfc->nb_streams != 1) {
avformat_free_context(avfc); avformat_free_context(avfc);
return; return;
} }
fprintf(stderr, "%s %d\n", __func__, __LINE__);
AVCodecContext *c = avfc->streams[0]->codec; AVCodecContext *c = avfc->streams[0]->codec;
AVCodec *codec = avcodec_find_decoder(c->codec_id); AVCodec *codec = avcodec_find_decoder(c->codec_id);
@@ -754,7 +749,6 @@ fprintf(stderr, "%s %d\n", __func__, __LINE__);
avformat_free_context(avfc); avformat_free_context(avfc);
return; return;
} }
AVSubtitle sub;
AVPacket avpkt; AVPacket avpkt;
av_init_packet(&avpkt); av_init_packet(&avpkt);
#if 0 #if 0
@@ -774,6 +768,7 @@ fprintf(stderr, "%s %d\n", __func__, __LINE__);
fprintf(stderr, "%s\n", c->subtitle_header); fprintf(stderr, "%s\n", c->subtitle_header);
while (av_read_frame(avfc, &avpkt) > -1) { while (av_read_frame(avfc, &avpkt) > -1) {
AVSubtitle sub;
int got_sub = 0; int got_sub = 0;
avcodec_decode_subtitle2(c, &sub, &got_sub, &avpkt); avcodec_decode_subtitle2(c, &sub, &got_sub, &avpkt);
if (got_sub) if (got_sub)
@@ -877,6 +872,24 @@ int container_ffmpeg_init(Context_t * context, char *filename)
terminating = 0; terminating = 0;
latestPts = 0; latestPts = 0;
int res = container_ffmpeg_update_tracks(context, filename); int res = container_ffmpeg_update_tracks(context, filename);
unsigned int n, found_av = 0;
for (n = 0; n < avContext->nb_streams; n++) {
AVStream *stream = avContext->streams[n];
switch (stream->codec->codec_type) {
case AVMEDIA_TYPE_AUDIO:
case AVMEDIA_TYPE_VIDEO:
found_av = 1;
default:
break;
}
}
if (!found_av) {
avformat_close_input(&avContext);
isContainerRunning = 0;
return cERR_CONTAINER_FFMPEG_STREAM;
}
container_ffmpeg_read_subtitles(context, filename); container_ffmpeg_read_subtitles(context, filename);
return res; return res;
} }