diff --git a/libeplayer3/container/container.c b/libeplayer3/container/container.c index 9717415..047846a 100644 --- a/libeplayer3/container/container.c +++ b/libeplayer3/container/container.c @@ -121,5 +121,5 @@ ContainerHandler_t ContainerHandler = { &SrtContainer, &SsaContainer, &ASSContainer, - Command, + Command }; diff --git a/libeplayer3/container/container_ass.c b/libeplayer3/container/container_ass.c index 80933cc..487fb87 100644 --- a/libeplayer3/container/container_ass.c +++ b/libeplayer3/container/container_ass.c @@ -179,7 +179,7 @@ void releaseRegions() { region_t* next, *old; Writer_t* writer; - + if (firstRegion == NULL) return; @@ -221,12 +221,12 @@ void releaseRegions() writer->writeData(&out); } } - old = next; + old = next; next = next->next; free(old); } - - firstRegion = NULL; + + firstRegion = NULL; } /* check for regions which should be undisplayed. @@ -392,7 +392,8 @@ static void ASSThread(Context_t *context) { // subtitel zeitpunkt zu bestimmen und solange zu schlafen. usleep(1000); - img = ass_render_frame(ass_renderer, ass_track, playPts / 90.0, &change); + if(ass_renderer && ass_track) + img = ass_render_frame(ass_renderer, ass_track, playPts / 90.0, &change); ass_printf(150, "img %p pts %lu %f\n", img, playPts, playPts / 90.0); @@ -425,7 +426,7 @@ static void ASSThread(Context_t *context) { /* api docu said w and h can be zero which * means image should not be rendered */ - if ((img->w != 0) && (img->h != 0) && (writer)) + if ((img->w != 0) && (img->h != 0) && (writer)) { out.fd = framebufferFD; out.data = img->bitmap; @@ -435,7 +436,7 @@ static void ASSThread(Context_t *context) { out.x = img->dst_x; out.y = img->dst_y; out.color = img->color; - + out.Screen_Width = screen_width; out.Screen_Height = screen_height; out.destination = destination; @@ -449,8 +450,8 @@ static void ASSThread(Context_t *context) { if(context && context->playback && context->playback->isPlaying && writer){ writer->writeData(&out); if(threeDMode == 1){ - out.x = screen_width/2 + img->dst_x; - writer->writeData(&out); + out.x = screen_width/2 + img->dst_x; + writer->writeData(&out); }else if(threeDMode == 2){ out.y = screen_height/2 + img->dst_y; writer->writeData(&out); @@ -465,11 +466,11 @@ static void ASSThread(Context_t *context) { */ SubtitleOut_t out; - out.type = eSub_Gfx; + out.type = eSub_Gfx; if (ass_track->events) { -/* fixme: check values */ + /* fixme: check values */ out.pts = ass_track->events->Start * 90.0; out.duration = ass_track->events->Duration / 1000.0; } else @@ -522,7 +523,7 @@ int container_ass_init(Context_t *context) int modefd; char buf[16]; SubtitleOutputDef_t output; - + ass_printf(10, ">\n"); ass_library = ass_library_init(); @@ -534,12 +535,12 @@ int container_ass_init(Context_t *context) if (debug_level >= 100) ass_set_message_cb(ass_library, ass_msg_callback, NULL); - + ass_set_extract_fonts( ass_library, 1 ); ass_set_style_overrides( ass_library, NULL ); ass_renderer = ass_renderer_init(ass_library); - + if (!ass_renderer) { ass_err("ass_renderer_init failed!\n"); @@ -556,7 +557,7 @@ int container_ass_init(Context_t *context) if(modefd > 0){ read(modefd, buf, 15); buf[15]='\0'; - close(modefd); + close(modefd); }else threeDMode = 0; if(strncmp(buf,"sbs",3)==0)threeDMode = 1; @@ -637,7 +638,7 @@ int container_ass_process_data(Context_t *context, SubtitleData_t* data) ass_printf(30,"processing private %d bytes\n",data->extralen); ass_process_codec_private(ass_track, (char*) data->extradata, data->extralen); ass_printf(30,"processing private done\n"); - } + } if (data->data) { @@ -645,7 +646,7 @@ int container_ass_process_data(Context_t *context, SubtitleData_t* data) ass_process_data(ass_track, (char*) data->data, data->len); ass_printf(30,"processing data done\n"); } - + return cERR_CONTAINER_ASS_NO_ERROR; } @@ -813,6 +814,5 @@ static char *ASS_Capabilities[] = {"ass", NULL }; Container_t ASSContainer = { "ASS", &Command, - ASS_Capabilities, - + ASS_Capabilities }; diff --git a/libeplayer3/container/container_ffmpeg.c b/libeplayer3/container/container_ffmpeg.c index 31b87e5..8078518 100644 --- a/libeplayer3/container/container_ffmpeg.c +++ b/libeplayer3/container/container_ffmpeg.c @@ -171,7 +171,9 @@ static char* Codec2Encoding(enum CodecID id, int* version) case CODEC_ID_VC1: return "V_VC1"; case CODEC_ID_H264: +#if LIBAVCODEC_VERSION_MAJOR < 54 case CODEC_ID_FFH264: +#endif return "V_MPEG4/ISO/AVC"; case CODEC_ID_AVS: return "V_AVS"; @@ -257,13 +259,13 @@ float getDurationFromSSALine(unsigned char* line){ *ptr1 = '\0'; } } - + sscanf(ptr[2],"%d:%d:%d.%d",&h,&m,&s,&ms); msec = (ms*10) + (s*1000) + (m*60*1000) + (h*24*60*1000); sscanf(ptr[1],"%d:%d:%d.%d",&h,&m,&s,&ms); msec -= (ms*10) + (s*1000) + (m*60*1000) + (h*24*60*1000); - ffmpeg_printf(10, "%s %s %f\n", ptr[2], ptr[1], (float) msec / 1000.0); + ffmpeg_printf(10, "%s %s %f\n", ptr[2], ptr[1], (float) msec / 1000.0); free(Text); return (float)msec/1000.0; @@ -272,16 +274,29 @@ float getDurationFromSSALine(unsigned char* line){ /* search for metatdata in context and stream * and map it to our metadata. */ + +#if LIBAVCODEC_VERSION_MAJOR < 54 static char* searchMeta(AVMetadata *metadata, char* ourTag) +#else +static char* searchMeta(AVDictionary * metadata, char* ourTag) +#endif { +#if LIBAVCODEC_VERSION_MAJOR < 54 AVMetadataTag *tag = NULL; +#else + AVDictionaryEntry *tag = NULL; +#endif int i = 0; - + while (metadata_map[i] != NULL) { if (strcmp(ourTag, metadata_map[i]) == 0) { +#if LIBAVCODEC_VERSION_MAJOR < 54 while ((tag = av_metadata_get(metadata, "", tag, AV_METADATA_IGNORE_SUFFIX))) +#else + while ((tag = av_dict_get(metadata, "", tag, AV_DICT_IGNORE_SUFFIX))) +#endif { if (strcmp(tag->key, metadata_map[ i + 1 ]) == 0) { @@ -291,7 +306,7 @@ static char* searchMeta(AVMetadata *metadata, char* ourTag) } i++; } - + return NULL; } @@ -337,14 +352,14 @@ static void FFMPEGThread(Context_t *context) { usleep(100000); continue; } - + #define reverse_playback_3 #ifdef reverse_playback_3 if (context->playback->BackWard && av_gettime() >= showtime) { audioMute = 1; context->output->Command(context, OUTPUT_CLEAR, "v"); - + if(bofcount == 1) { showtime = av_gettime(); @@ -392,14 +407,14 @@ if(!context->playback->BackWard && audioMute) { /* fixme: surplus detection */ int surplus = 1; - + ffmpeg_printf(20, "new seek ->c %lld, l %lld, ls %lld, lp %lld\n", currentReadPosition, lastReverseSeek, lastSeek, lastPts); - + context->output->Command(context, OUTPUT_DISCONTINUITY_REVERSE, &surplus); /* save the maximum read position, if we reach this, we must * seek back again. - */ + */ if(lastReverseSeek == 0) lastReverseSeek = currentReadPosition; else @@ -413,29 +428,33 @@ if(!context->playback->BackWard && audioMute) #endif { ffmpeg_err( "Error seeking\n"); - + if (err == cERR_CONTAINER_FFMPEG_END_OF_FILE) { break; - } + } } - else + else { +#if LIBAVCODEC_VERSION_MAJOR < 54 lastSeek = currentReadPosition = url_ftell(avContext->pb); +#else + lastSeek = currentReadPosition = avio_tell(avContext->pb); +#endif gotlastPts = 1; #ifndef use_sec_to_seek if (err != lastSeek) ffmpeg_err("upssssssssssssssss seek not doing what I want\n"); -#endif - +#endif + /* if (currentVideoPts != -1) lastPts = currentVideoPts; else lastPts = currentAudioPts; */ - } + } } else if (!context->playback->BackWard) { @@ -443,7 +462,7 @@ if(!context->playback->BackWard && audioMute) lastSeek = -1; lastPts = -1; gotlastPts = 0; - } + } #endif getMutex(FILENAME, __FUNCTION__,__LINE__); @@ -462,7 +481,11 @@ if(!context->playback->BackWard && audioMute) int index = packet.stream_index; - currentReadPosition = url_ftell(avContext->pb); +#if LIBAVCODEC_VERSION_MAJOR < 54 + currentReadPosition = url_ftell(avContext->pb); +#else + currentReadPosition = avio_tell(avContext->pb); +#endif if (context->manager->video->Command(context, MANAGER_GET_TRACK, &videoTrack) < 0) ffmpeg_err("error getting video track\n"); @@ -480,7 +503,7 @@ if(!context->playback->BackWard && audioMute) currentVideoPts = videoTrack->pts = pts = calcPts(videoTrack->stream, &packet); if ((currentVideoPts > latestPts) && (currentVideoPts != INVALID_PTS_VALUE)) - latestPts = currentVideoPts; + latestPts = currentVideoPts; #ifdef reverse_playback_2 if (currentVideoPts != INVALID_PTS_VALUE && gotlastPts == 1) @@ -505,20 +528,20 @@ if(!context->playback->BackWard && audioMute) if (context->output->video->Write(context, &avOut) < 0) { ffmpeg_err("writing data to video device failed\n"); - } + } } } if (audioTrack != NULL) { if (audioTrack->Id == index) { currentAudioPts = audioTrack->pts = pts = calcPts(audioTrack->stream, &packet); - + if ((currentAudioPts > latestPts) && (!videoTrack)) latestPts = currentAudioPts; #ifdef reverse_playback_2 - if (currentAudioPts != INVALID_PTS_VALUE && gotlastPts == 1 && (!videoTrack)) - { + if (currentAudioPts != INVALID_PTS_VALUE && gotlastPts == 1 && (!videoTrack)) + { lastPts = currentAudioPts; gotlastPts = 0; } @@ -526,7 +549,7 @@ if(!context->playback->BackWard && audioMute) ffmpeg_printf(200, "AudioTrack index = %d\n",index); - if (audioTrack->inject_as_pcm == 1) + if (audioTrack->inject_as_pcm == 1) { int bytesDone = 0; unsigned int samples_size = AVCODEC_MAX_AUDIO_FRAME_SIZE; @@ -541,7 +564,7 @@ if(!context->playback->BackWard && audioMute) { int decoded_data_size = samples_size; - bytesDone = avcodec_decode_audio3(( (AVStream*) audioTrack->stream)->codec, + bytesDone = avcodec_decode_audio3(( (AVStream*) audioTrack->stream)->codec, (short *)(samples), &decoded_data_size, &avpkt); @@ -575,11 +598,11 @@ if(!context->playback->BackWard && audioMute) #ifdef reverse_playback_3 if (!context->playback->BackWard) #endif - if (context->output->audio->Write(context, &avOut) < 0) + if (context->output->audio->Write(context, &avOut) < 0) ffmpeg_err("writing data to audio device failed\n"); } } - else if (audioTrack->have_aacheader == 1) + else if (audioTrack->have_aacheader == 1) { ffmpeg_printf(200,"write audio aac\n"); @@ -597,12 +620,12 @@ if(!context->playback->BackWard && audioMute) #ifdef reverse_playback_3 if (!context->playback->BackWard) #endif - if (context->output->audio->Write(context, &avOut) < 0) + if (context->output->audio->Write(context, &avOut) < 0) { ffmpeg_err("(aac) writing data to audio device failed\n"); } } - else + else { avOut.data = packet.data; @@ -619,7 +642,7 @@ if(!context->playback->BackWard && audioMute) #ifdef reverse_playback_3 if (!context->playback->BackWard) #endif - if (context->output->audio->Write(context, &avOut) < 0) + if (context->output->audio->Write(context, &avOut) < 0) { ffmpeg_err("writing data to audio device failed\n"); } @@ -633,14 +656,14 @@ if(!context->playback->BackWard && audioMute) ffmpeg_printf(100, "subtitleTrack->stream %p \n", subtitleTrack->stream); pts = calcPts(subtitleTrack->stream, &packet); - + if ((pts > latestPts) && (!videoTrack) && (!audioTrack)) - latestPts = pts; + latestPts = pts; /*Hellmaster1024: in mkv the duration for ID_TEXT is stored in convergence_duration */ ffmpeg_printf(20, "Packet duration %d\n", packet.duration); ffmpeg_printf(20, "Packet convergence_duration %lld\n", packet.convergence_duration); - + if(packet.duration != 0 && packet.duration != AV_NOPTS_VALUE ) duration=((float)packet.duration)/1000.0; else if(packet.convergence_duration != 0 && packet.convergence_duration != AV_NOPTS_VALUE ) @@ -655,7 +678,6 @@ if(!context->playback->BackWard && audioMute) /* no clue yet */ } - /* konfetti: I've found cases where the duration from getDurationFromSSALine * is zero (start end and are really the same in text). I think it make's * no sense to pass those. @@ -797,13 +819,21 @@ int container_ffmpeg_init(Context_t *context, char * filename) avcodec_register_all(); av_register_all(); +#if LIBAVCODEC_VERSION_MAJOR < 54 if ((err = av_open_input_file(&avContext, filename, NULL, 0, NULL)) != 0) { +#else + if ((err = avformat_open_input(&avContext, filename, NULL, 0)) != 0) { +#endif char error[512]; +#if LIBAVCODEC_VERSION_MAJOR < 54 ffmpeg_err("av_open_input_file failed %d (%s)\n", err, filename); +#else + ffmpeg_err("avformat_open_input failed %d (%s)\n", err, filename); +#endif av_strerror(err, error, 512); ffmpeg_err("Cause: %s\n", error); - + releaseMutex(FILENAME, __FUNCTION__,__LINE__); return cERR_CONTAINER_FFMPEG_OPEN; } @@ -814,8 +844,13 @@ int container_ffmpeg_init(Context_t *context, char * filename) ffmpeg_printf(20, "find_streaminfo\n"); +#if LIBAVCODEC_VERSION_MAJOR < 54 if (av_find_stream_info(avContext) < 0) { ffmpeg_err("Error av_find_stream_info\n"); +#else + if (avformat_find_stream_info(avContext, NULL) < 0) { + ffmpeg_err("Error avformat_find_stream_info\n"); +#endif #ifdef this_is_ok /* crow reports that sometimes this returns an error * but the file is played back well. so remove this @@ -829,7 +864,11 @@ int container_ffmpeg_init(Context_t *context, char * filename) ffmpeg_printf(20, "dump format\n"); +#if LIBAVCODEC_VERSION_MAJOR < 54 dump_format(avContext, 0, filename, 0); +#else + av_dump_format(avContext, 0, filename, 0); +#endif ffmpeg_printf(1, "number streams %d\n", avContext->nb_streams); @@ -847,11 +886,11 @@ int container_ffmpeg_init(Context_t *context, char * filename) * so set it by default to NULL! */ memset(&track, 0, sizeof(track)); - + switch (stream->codec->codec_type) { case AVMEDIA_TYPE_VIDEO: ffmpeg_printf(10, "CODEC_TYPE_VIDEO %d\n",stream->codec->codec_type); - + if (encoding != NULL) { track.type = eTypeES; track.version = version; @@ -918,7 +957,7 @@ int container_ffmpeg_init(Context_t *context, char * filename) break; case AVMEDIA_TYPE_AUDIO: ffmpeg_printf(10, "CODEC_TYPE_AUDIO %d\n",stream->codec->codec_type); - + if (encoding != NULL) { AVDictionaryEntry *lang; track.type = eTypeES; @@ -929,7 +968,7 @@ int container_ffmpeg_init(Context_t *context, char * filename) track.Name = strdup(lang->value); else track.Name = strdup("und"); - + ffmpeg_printf(10, "Language %s\n", track.Name); track.Encoding = encoding; @@ -961,14 +1000,12 @@ int container_ffmpeg_init(Context_t *context, char * filename) printf("AVCODEC__INIT__SUCCESS\n"); else printf("AVCODEC__INIT__FAILED\n"); - - } else if(stream->codec->codec_id == CODEC_ID_AAC) { ffmpeg_printf(10,"Create AAC ExtraData\n"); ffmpeg_printf(10,"stream->codec->extradata_size %d\n", stream->codec->extradata_size); Hexdump(stream->codec->extradata, stream->codec->extradata_size); - + /* extradata 13 10 56 e5 9d 48 00 (anderen cops) object_type: 00010 2 = LC @@ -983,7 +1020,7 @@ int container_ffmpeg_init(Context_t *context, char * filename) ps = 0 0000000 */ - + unsigned int object_type = 2; // LC unsigned int sample_index = aac_get_sample_rate_index(stream->codec->sample_rate); unsigned int chan_config = stream->codec->channels; @@ -991,7 +1028,7 @@ int container_ffmpeg_init(Context_t *context, char * filename) object_type = stream->codec->extradata[0] >> 3; sample_index = ((stream->codec->extradata[0] & 0x7) << 1) + (stream->codec->extradata[1] >> 7); - chan_config = (stream->codec->extradata[1] >> 3) && 0xf; + chan_config = (stream->codec->extradata[1] >> 3) && 0xf; } ffmpeg_printf(10,"aac object_type %d\n", object_type); @@ -1009,7 +1046,7 @@ int container_ffmpeg_init(Context_t *context, char * filename) track.aacbuf[4] = 0x00; track.aacbuf[5] = 0x1F; track.aacbuf[6] = 0xFC; - + printf("AAC_HEADER -> "); Hexdump(track.aacbuf,7); track.have_aacheader = 1; @@ -1031,11 +1068,11 @@ int container_ffmpeg_init(Context_t *context, char * filename) memcpy(track.aacbuf + 20, &sizehi, 4); // sizehi (not used) unsigned char ASF_Audio_Media[16] = - {0x40,0x9E,0x69,0xF8,0x4D,0x5B,0xCF,0x11,0xA8,0xFD,0x00,0x80,0x5F,0x5C,0x44,0x2B}; + {0x40,0x9E,0x69,0xF8,0x4D,0x5B,0xCF,0x11,0xA8,0xFD,0x00,0x80,0x5F,0x5C,0x44,0x2B}; memcpy(track.aacbuf + 24, ASF_Audio_Media, 16); //ASF_Audio_Media unsigned char ASF_Audio_Spread[16] = - {0x50,0xCD,0xC3,0xBF,0x8F,0x61,0xCF,0x11,0x8B,0xB2,0x00,0xAA,0x00,0xB4,0xE2,0x20}; + {0x50,0xCD,0xC3,0xBF,0x8F,0x61,0xCF,0x11,0x8B,0xB2,0x00,0xAA,0x00,0xB4,0xE2,0x20}; memcpy(track.aacbuf + 40, ASF_Audio_Spread, 16); //ASF_Audio_Spread memset(track.aacbuf + 56, 0, 4); // time_offset (not used) @@ -1058,7 +1095,7 @@ int container_ffmpeg_init(Context_t *context, char * filename) #define WMA_VERSION_2_9 0x161 #define WMA_VERSION_9_PRO 0x162 #define WMA_LOSSLESS 0x163 - unsigned short codec_id = 0; + unsigned short codec_id = 0; switch(stream->codec->codec_id) { //TODO: What code for lossless ? case 86056/*CODEC_ID_WMAPRO*/: @@ -1089,7 +1126,7 @@ int container_ffmpeg_init(Context_t *context, char * filename) ffmpeg_printf(1, "block_alignment = %d\n", block_alignment); memcpy(track.aacbuf + 90, &block_alignment, 2); //block_alignment - unsigned short bits_per_sample = + unsigned short bits_per_sample = stream->codec->sample_fmt>=0?(stream->codec->sample_fmt+1)*8:8; ffmpeg_printf(1, "bits_per_sample = %d (%d)\n", bits_per_sample, stream->codec->sample_fmt); memcpy(track.aacbuf + 92, &bits_per_sample, 2); //bits_per_sample @@ -1114,14 +1151,14 @@ int container_ffmpeg_init(Context_t *context, char * filename) ffmpeg_err("failed to add track %d\n", n); } } - + } else { ffmpeg_err("codec type audio but codec unknown %d\n", stream->codec->codec_id); } break; case AVMEDIA_TYPE_SUBTITLE: - { + { AVDictionaryEntry *lang; ffmpeg_printf(10, "CODEC_TYPE_SUBTITLE %d\n",stream->codec->codec_type); @@ -1149,7 +1186,7 @@ int container_ffmpeg_init(Context_t *context, char * filename) track.extraData = stream->codec->extradata; track.extraSize = stream->codec->extradata_size; - + ffmpeg_printf(1, "subtitle codec %d\n", stream->codec->codec_id); ffmpeg_printf(1, "subtitle width %d\n", stream->codec->width); ffmpeg_printf(1, "subtitle height %d\n", stream->codec->height); @@ -1243,7 +1280,7 @@ static int container_ffmpeg_stop(Context_t *context) { ffmpeg_printf(10, "\n"); if (!isContainerRunning) - { + { ffmpeg_err("Container not running\n"); return cERR_CONTAINER_FFMPEG_ERR; } @@ -1270,7 +1307,7 @@ static int container_ffmpeg_stop(Context_t *context) { } isContainerRunning = 0; - + releaseMutex(FILENAME, __FUNCTION__,__LINE__); ffmpeg_printf(10, "ret %d\n", ret); @@ -1279,7 +1316,11 @@ static int container_ffmpeg_stop(Context_t *context) { static int container_ffmpeg_seek_bytes(off_t pos) { int flag = AVSEEK_FLAG_BYTE; +#if LIBAVCODEC_VERSION_MAJOR < 54 off_t current_pos = url_ftell(avContext->pb); +#else + off_t current_pos = avio_tell(avContext->pb); +#endif ffmpeg_printf(20, "seeking to position %lld (bytes)\n", pos); @@ -1292,7 +1333,11 @@ static int container_ffmpeg_seek_bytes(off_t pos) { return cERR_CONTAINER_FFMPEG_ERR; } +#if LIBAVCODEC_VERSION_MAJOR < 54 ffmpeg_printf(30, "current_pos after seek %lld\n", url_ftell(avContext->pb)); +#else + ffmpeg_printf(30, "current_pos after seek %lld\n", avio_tell(avContext->pb)); +#endif return cERR_CONTAINER_FFMPEG_NO_ERROR; } @@ -1301,8 +1346,12 @@ static int container_ffmpeg_seek_bytes(off_t pos) { static int container_ffmpeg_seek_bytes_rel(off_t start, off_t bytes) { int flag = AVSEEK_FLAG_BYTE; off_t newpos; +#if LIBAVCODEC_VERSION_MAJOR < 54 off_t current_pos = url_ftell(avContext->pb); - +#else + off_t current_pos = avio_tell(avContext->pb); +#endif + if (start == -1) start = current_pos; @@ -1330,7 +1379,11 @@ static int container_ffmpeg_seek_bytes_rel(off_t start, off_t bytes) { return cERR_CONTAINER_FFMPEG_ERR; } +#if LIBAVCODEC_VERSION_MAJOR < 54 ffmpeg_printf(30, "current_pos after seek %lld\n", url_ftell(avContext->pb)); +#else + ffmpeg_printf(30, "current_pos after seek %lld\n", avio_tell(avContext->pb)); +#endif return cERR_CONTAINER_FFMPEG_NO_ERROR; } @@ -1359,7 +1412,11 @@ static int container_ffmpeg_seek_rel(Context_t *context, off_t pos, long long in if (pos == -1) { +#if LIBAVCODEC_VERSION_MAJOR < 54 pos = url_ftell(avContext->pb); +#else + pos = avio_tell(avContext->pb); +#endif } if (pts == -1) @@ -1371,13 +1428,12 @@ static int container_ffmpeg_seek_rel(Context_t *context, off_t pos, long long in getMutex(FILENAME, __FUNCTION__,__LINE__); ffmpeg_printf(10, "iformat->flags %d\n", avContext->iformat->flags); - + if (avContext->iformat->flags & AVFMT_TS_DISCONT) { if (avContext->bit_rate) { sec *= avContext->bit_rate / 8.0; - ffmpeg_printf(10, "bit_rate %d\n", avContext->bit_rate); } else @@ -1393,7 +1449,7 @@ static int container_ffmpeg_seek_rel(Context_t *context, off_t pos, long long in releaseMutex(FILENAME, __FUNCTION__,__LINE__); return cERR_CONTAINER_FFMPEG_END_OF_FILE; } - + ffmpeg_printf(10, "1. seeking to position %lld bytes ->sec %f\n", pos, sec); if (container_ffmpeg_seek_bytes(pos) < 0) @@ -1402,25 +1458,25 @@ static int container_ffmpeg_seek_rel(Context_t *context, off_t pos, long long in releaseMutex(FILENAME, __FUNCTION__,__LINE__); return cERR_CONTAINER_FFMPEG_ERR; } - + releaseMutex(FILENAME, __FUNCTION__,__LINE__); return pos; } else { sec += ((float) pts / 90000.0f); - + if (sec < 0) sec = 0; ffmpeg_printf(10, "2. seeking to position %f sec ->time base %f %d\n", sec, av_q2d(((AVStream*) current->stream)->time_base), AV_TIME_BASE); - + if (av_seek_frame(avContext, -1 , sec * AV_TIME_BASE, flag) < 0) { ffmpeg_err( "Error seeking\n"); releaseMutex(FILENAME, __FUNCTION__,__LINE__); return cERR_CONTAINER_FFMPEG_ERR; } - + if (sec <= 0) { ffmpeg_err("end of file reached\n"); @@ -1443,7 +1499,7 @@ static int container_ffmpeg_seek(Context_t *context, float sec) { ffmpeg_printf(10, "seeking %f sec\n", sec); if (sec == 0.0) - { + { ffmpeg_err("sec = 0.0 ignoring\n"); return cERR_CONTAINER_FFMPEG_ERR; } @@ -1451,7 +1507,7 @@ static int container_ffmpeg_seek(Context_t *context, float sec) { ffmpeg_printf(10, "goto %f sec\n", sec); if (sec < 0.0) - { + { ffmpeg_err("sec < 0.0 ignoring\n"); return cERR_CONTAINER_FFMPEG_ERR; } @@ -1465,7 +1521,7 @@ static int container_ffmpeg_seek(Context_t *context, float sec) { current = audioTrack; if (current == NULL) { - ffmpeg_err( "no track avaibale to seek\n"); + ffmpeg_err( "no track available to seek\n"); return cERR_CONTAINER_FFMPEG_ERR; } @@ -1475,7 +1531,7 @@ static int container_ffmpeg_seek(Context_t *context, float sec) { getMutex(FILENAME, __FUNCTION__,__LINE__); ffmpeg_printf(10, "iformat->flags %d\n", avContext->iformat->flags); - + if (avContext->iformat->flags & AVFMT_TS_DISCONT) { /* konfetti: for ts streams seeking frame per seconds does not work (why?). @@ -1485,14 +1541,17 @@ static int container_ffmpeg_seek(Context_t *context, float sec) { * about 10 seconds, backward does not work. */ +#if LIBAVCODEC_VERSION_MAJOR < 54 off_t pos = url_ftell(avContext->pb); +#else + off_t pos = avio_tell(avContext->pb); +#endif ffmpeg_printf(10, "pos %lld %d\n", pos, avContext->bit_rate); if (avContext->bit_rate) { sec *= avContext->bit_rate / 8.0; - ffmpeg_printf(10, "bit_rate %d\n", avContext->bit_rate); } else @@ -1525,14 +1584,14 @@ static int container_ffmpeg_seek(Context_t *context, float sec) { sec += ((float) current->pts / 90000.0f); #endif ffmpeg_printf(10, "2. seeking to position %f sec ->time base %f %d\n", sec, av_q2d(((AVStream*) current->stream)->time_base), AV_TIME_BASE); - + if (av_seek_frame(avContext, -1 /* or streamindex */, sec * AV_TIME_BASE, flag) < 0) { ffmpeg_err( "Error seeking\n"); releaseMutex(FILENAME, __FUNCTION__,__LINE__); return cERR_CONTAINER_FFMPEG_ERR; } } - + releaseMutex(FILENAME, __FUNCTION__,__LINE__); return cERR_CONTAINER_FFMPEG_NO_ERROR; } @@ -1598,19 +1657,19 @@ static int container_ffmpeg_swich_subtitle(Context_t* context, int* arg) } /* konfetti comment: I dont like the mechanism of overwriting - * the pointer in infostring. This lead in most cases to - * user errors, like it is in the current version (libeplayer2 <-->e2->servicemp3.cpp). + * the pointer in infostring. This lead in most cases to + * user errors, like it is in the current version (libeplayer2 <-->e2->servicemp3.cpp) * From e2 there is passed a tag=strdup here and we overwrite this * strdupped tag. This lead to dangling pointers which are never freed! * I do not free the string here because this is the wrong way. The mechanism * should be changed, or e2 should pass it in a different way... */ -static int container_ffmpeg_get_info(Context_t* context, char ** infoString) +static int container_ffmpeg_get_info(Context_t* context, char ** infoString) { Track_t * videoTrack = NULL; Track_t * audioTrack = NULL; char* meta = NULL; - + ffmpeg_printf(20, ">\n"); if (avContext != NULL) @@ -1620,25 +1679,25 @@ static int container_ffmpeg_get_info(Context_t* context, char ** infoString) ffmpeg_err("infostring NULL\n"); return cERR_CONTAINER_FFMPEG_ERR; } - + ffmpeg_printf(20, "%s\n", *infoString); context->manager->video->Command(context, MANAGER_GET_TRACK, &videoTrack); context->manager->audio->Command(context, MANAGER_GET_TRACK, &audioTrack); if ((meta = searchMeta(avContext->metadata, *infoString)) == NULL) - { + { if (audioTrack != NULL) { AVStream* stream = audioTrack->stream; - + meta = searchMeta(stream->metadata, *infoString); } if ((meta == NULL) && (videoTrack != NULL)) { AVStream* stream = videoTrack->stream; - + meta = searchMeta(stream->metadata, *infoString); } } @@ -1657,8 +1716,8 @@ static int container_ffmpeg_get_info(Context_t* context, char ** infoString) ffmpeg_err("avContext NULL\n"); return cERR_CONTAINER_FFMPEG_ERR; } - - return cERR_CONTAINER_FFMPEG_NO_ERROR; + + return cERR_CONTAINER_FFMPEG_NO_ERROR; } @@ -1731,6 +1790,5 @@ static char *FFMPEG_Capabilities[] = {"avi", "mkv", "mp4", "ts", "mov", "flv", " Container_t FFMPEGContainer = { "FFMPEG", &Command, - FFMPEG_Capabilities, - + FFMPEG_Capabilities }; diff --git a/libeplayer3/container/text_srt.c b/libeplayer3/container/text_srt.c index c54f6fe..6717a90 100644 --- a/libeplayer3/container/text_srt.c +++ b/libeplayer3/container/text_srt.c @@ -138,7 +138,7 @@ static void* SrtSubtitleThread(void *data) { unsigned long long int Pts = 0; double Duration = 0; char * Text = NULL; - + Context_t *context = (Context_t*) data; srt_printf(10, "\n"); @@ -146,12 +146,12 @@ static void* SrtSubtitleThread(void *data) { while(context && context->playback && context->playback->isPlaying && fsub && fgets(Data, MAXLINELENGTH, fsub)) { srt_printf(20, "pos=%d\n", pos); - if(pos == 0) + if(pos == 0) { - if(Data[0] == '\n' || Data[0] == '\0' || Data[0] == 13 /* ^M */) + if(Data[0] == '\n' || Data[0] == '\0' || Data[0] == 13 /* ^M */) continue; /* Empty line not allowed here */ pos++; - } else if(pos == 1) + } else if(pos == 1) { int ret, horIni, minIni, secIni, milIni, horFim, minFim, secFim, milFim; @@ -285,19 +285,19 @@ static int SrtGetSubtitle(Context_t *context, char * Filename) { srt_err("Filename NULL\n"); return cERR_SRT_ERROR; } - + srt_printf(10, "file: %s\n", Filename); copyFilename = strdup(Filename); FilenameFolder = dirname(copyFilename); - + if (FilenameFolder == NULL) { srt_err("FilenameFolder NULL\n"); return cERR_SRT_ERROR; } - + srt_printf(10, "folder: %s\n", FilenameFolder); getExtension(copyFilename, &FilenameExtension); @@ -312,10 +312,10 @@ static int SrtGetSubtitle(Context_t *context, char * Filename) { srt_printf(10, "ext: %s\n", FilenameExtension); FilenameShort = basename(copyFilename); - + /* cut extension */ FilenameShort[strlen(FilenameShort) - strlen(FilenameExtension) - 1] = '\0'; - + srt_printf(10, "basename: %s\n", FilenameShort); srt_printf(10, "%s\n%s | %s | %s\n", copyFilename, FilenameFolder, FilenameShort, FilenameExtension); @@ -349,9 +349,9 @@ static int SrtGetSubtitle(Context_t *context, char * Filename) { { char absSubtitleFileName[PATH_MAX]; /* found something of interest, so now make an absolut path name */ - + sprintf(absSubtitleFileName, "%s/%s.%s", FilenameFolder, subtitleFilename, subtitleExtension); - + srt_printf(10, "SRT: %s [%s]\n", subtitleExtension, subtitleFilename); srt_printf(10, "\t->%s\n", absSubtitleFileName); @@ -359,7 +359,7 @@ static int SrtGetSubtitle(Context_t *context, char * Filename) { absSubtitleFileName, i, }; - + SrtManagerAdd(context, SrtSubtitle); Track_t Subtitle = { @@ -423,7 +423,7 @@ static int SrtCloseSubtitle(Context_t *context) { static int SrtSwitchSubtitle(Context_t *context, int* arg) { int ret = cERR_SRT_NO_ERROR; - + srt_printf(10, "arg:%d\n", *arg); ret = SrtCloseSubtitle(context); @@ -442,7 +442,7 @@ static int SrtSwitchSubtitle(Context_t *context, int* arg) { static int SrtDel(Context_t *context) { int ret = cERR_SRT_NO_ERROR; - + srt_printf(10, "\n"); ret = SrtCloseSubtitle(context); @@ -454,7 +454,7 @@ static int SrtDel(Context_t *context) { static int Command(void *_context, ContainerCmd_t command, void * argument) { Context_t *context = (Context_t*) _context; int ret = cERR_SRT_NO_ERROR; - + srt_printf(10, "\n"); switch(command) { @@ -486,5 +486,5 @@ static char *SrtCapabilities[] = { "srt", NULL }; Container_t SrtContainer = { "SRT", &Command, - SrtCapabilities, + SrtCapabilities }; diff --git a/libeplayer3/container/text_ssa.c b/libeplayer3/container/text_ssa.c index 2f2b920..ec59fb3 100644 --- a/libeplayer3/container/text_ssa.c +++ b/libeplayer3/container/text_ssa.c @@ -141,7 +141,7 @@ char *SSAgetLine() strInput[k] = '\0'; } - else { + else { tamAux = 1; fclose(fssa); fssa = NULL; @@ -168,7 +168,7 @@ static void* SsaSubtitleThread(void *data) { while ( context && context->playback && context->playback->isPlaying && fssa ) { char *line = NULL; - do + do { line = SSAgetLine(); if(strncmp(line,"Dialogue: ",10)) { @@ -186,7 +186,7 @@ static void* SsaSubtitleThread(void *data) { context->playback && context->playback->isPlaying) { SubtitleData_t data; - + data.data = (unsigned char*) line; data.len = strlen(line); data.extradata = (unsigned char*) head; @@ -201,7 +201,7 @@ static void* SsaSubtitleThread(void *data) { } hasThreadStarted = 0; - + if(head) { free(head); head = NULL; @@ -260,7 +260,7 @@ static void SsaManagerDel(Context_t * context) { for (i = 0; i < TrackCount; i++) { if (Tracks[i].File != NULL) free(Tracks[i].File); - + Tracks[i].File = NULL; } free(Tracks); @@ -286,19 +286,19 @@ static int SsaGetSubtitle(Context_t *context, char * Filename) { ssa_err("Filename NULL\n"); return cERR_SSA_ERROR; } - + ssa_printf(10, "file: %s\n", Filename); copyFilename = strdup(Filename); FilenameFolder = dirname(copyFilename); - + if (FilenameFolder == NULL) { ssa_err("FilenameFolder NULL\n"); return cERR_SSA_ERROR; } - + ssa_printf(10, "folder: %s\n", FilenameFolder); getExtension(copyFilename, &FilenameExtension); @@ -350,9 +350,9 @@ static int SsaGetSubtitle(Context_t *context, char * Filename) { { char absSubtitleFileName[PATH_MAX]; /* found something of interest, so now make an absolut path name */ - + sprintf(absSubtitleFileName, "%s/%s.%s", FilenameFolder, subtitleFilename, subtitleExtension); - + ssa_printf(10, "SSA: %s [%s]\n", subtitleExtension, subtitleFilename); ssa_printf(10, "\t->%s\n", absSubtitleFileName); @@ -360,7 +360,7 @@ static int SsaGetSubtitle(Context_t *context, char * Filename) { absSubtitleFileName, i, }; - + SsaManagerAdd(context, SsaSubtitle); Track_t Subtitle = { @@ -415,7 +415,7 @@ static int SsaCloseSubtitle(Context_t *context) { /* this closes the thread! */ fssa = NULL; - + hasThreadStarted = 0; return cERR_SSA_NO_ERROR; @@ -423,7 +423,7 @@ static int SsaCloseSubtitle(Context_t *context) { static int SsaSwitchSubtitle(Context_t *context, int* arg) { int ret = cERR_SSA_NO_ERROR; - + ssa_printf(10, "\n"); ret = SsaCloseSubtitle(context); @@ -434,7 +434,7 @@ static int SsaSwitchSubtitle(Context_t *context, int* arg) { pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); pthread_create (&thread_sub, &attr, &SsaSubtitleThread, context); - + hasThreadStarted = 1; } @@ -443,11 +443,11 @@ static int SsaSwitchSubtitle(Context_t *context, int* arg) { static int SsaDel(Context_t *context) { int ret = cERR_SSA_NO_ERROR; - + ssa_printf(10, "\n"); ret = SsaCloseSubtitle(context); - + SsaManagerDel(context); return ret; @@ -456,7 +456,7 @@ static int SsaDel(Context_t *context) { static int Command(void *_context, ContainerCmd_t command, void * argument) { Context_t *context = (Context_t*) _context; int ret = cERR_SSA_NO_ERROR; - + ssa_printf(10, "\n"); switch(command) { @@ -488,5 +488,5 @@ static char *SsaCapabilities[] = { "ssa", NULL }; Container_t SsaContainer = { "SSA", &Command, - SsaCapabilities, + SsaCapabilities }; diff --git a/libeplayer3/include/output.h b/libeplayer3/include/output.h index a0290d4..a0998bc 100644 --- a/libeplayer3/include/output.h +++ b/libeplayer3/include/output.h @@ -29,7 +29,7 @@ typedef enum { OUTPUT_SUBTITLE_REGISTER_FUNCTION = 222, OUTPUT_SUBTITLE_REGISTER_BUFFER = 223, OUTPUT_GET_SUBTITLE_OUTPUT, - OUTPUT_SET_SUBTITLE_OUTPUT, + OUTPUT_SET_SUBTITLE_OUTPUT } OutputCmd_t; typedef struct diff --git a/libeplayer3/include/stm_ioctls.h b/libeplayer3/include/stm_ioctls.h index b058777..21b2ac7 100644 --- a/libeplayer3/include/stm_ioctls.h +++ b/libeplayer3/include/stm_ioctls.h @@ -58,7 +58,7 @@ typedef enum { STREAM_TYPE_H264, /* Deprecated */ STREAM_TYPE_ASF, /* Needs work so it can be deprecated */ STREAM_TYPE_MP4, /* Deprecated */ - STREAM_TYPE_RAW, /* Deprecated */ + STREAM_TYPE_RAW /* Deprecated */ } stream_type_t; /* @@ -322,4 +322,3 @@ typedef dvb_option_t video_option_t; #define AUDIO_GET_PLAY_INFO _IOR('o', 78, audio_play_info_t) #endif /* H_DVB_STM_H */ - diff --git a/libeplayer3/manager/audio.c b/libeplayer3/manager/audio.c index 8662ff8..4a6d4f2 100644 --- a/libeplayer3/manager/audio.c +++ b/libeplayer3/manager/audio.c @@ -244,6 +244,5 @@ static int Command(void *_context, ManagerCmd_t command, void * argument) { struct Manager_s AudioManager = { "Audio", &Command, - NULL, - + NULL }; diff --git a/libeplayer3/manager/manager.c b/libeplayer3/manager/manager.c index 2146bf0..f4b892a 100644 --- a/libeplayer3/manager/manager.c +++ b/libeplayer3/manager/manager.c @@ -45,7 +45,7 @@ ManagerHandler_t ManagerHandler = { "ManagerHandler", &AudioManager, &VideoManager, - &SubtitleManager, + &SubtitleManager }; /* ***************************** */ @@ -90,4 +90,3 @@ void freeTrack(Track_t* track) free(track->aacbuf); } - diff --git a/libeplayer3/manager/subtitle.c b/libeplayer3/manager/subtitle.c index 697f669..9e8fbe3 100644 --- a/libeplayer3/manager/subtitle.c +++ b/libeplayer3/manager/subtitle.c @@ -248,6 +248,5 @@ static int Command(void *_context, ManagerCmd_t command, void * argument) { struct Manager_s SubtitleManager = { "Subtitle", &Command, - NULL, - + NULL }; diff --git a/libeplayer3/manager/video.c b/libeplayer3/manager/video.c index 404d975..f412c2e 100644 --- a/libeplayer3/manager/video.c +++ b/libeplayer3/manager/video.c @@ -237,6 +237,5 @@ static int Command(void *_context, ManagerCmd_t command, void * argument) { struct Manager_s VideoManager = { "Video", &Command, - NULL, - + NULL }; diff --git a/libeplayer3/output/linuxdvb.c b/libeplayer3/output/linuxdvb.c index 41e039a..599bc74 100644 --- a/libeplayer3/output/linuxdvb.c +++ b/libeplayer3/output/linuxdvb.c @@ -601,8 +601,8 @@ int LinuxDvbFastForward(Context_t *context, char * type) { int LinuxDvbReverse(Context_t *context, char * type) { -#ifdef reverse_playback_2 int ret = cERR_LINUXDVB_NO_ERROR; +#ifdef reverse_playback_2 int speed; unsigned char video = !strcmp("video", type); @@ -654,8 +654,8 @@ int LinuxDvbReverse(Context_t *context, char * type) { linuxdvb_printf(10, "exiting with value %d\n", ret); - return ret; #endif + return ret; } int LinuxDvbSlowMotion(Context_t *context, char * type) { @@ -1204,7 +1204,5 @@ struct Output_s LinuxDvbOutput = { "LinuxDvb", &Command, &Write, - LinuxDvbCapabilities, - + LinuxDvbCapabilities }; - diff --git a/libeplayer3/output/output.c b/libeplayer3/output/output.c index 8551777..ed166fe 100644 --- a/libeplayer3/output/output.c +++ b/libeplayer3/output/output.c @@ -349,5 +349,5 @@ OutputHandler_t OutputHandler = { NULL, NULL, NULL, - &Command, + &Command }; diff --git a/libeplayer3/output/output_subtitle.c b/libeplayer3/output/output_subtitle.c index 15a9403..79d9baa 100644 --- a/libeplayer3/output/output_subtitle.c +++ b/libeplayer3/output/output_subtitle.c @@ -839,7 +839,5 @@ struct Output_s SubtitleOutput = { "Subtitle", &Command, &Write, - SubtitleCapabilitis, - + SubtitleCapabilitis }; - diff --git a/libeplayer3/output/writer/ac3.c b/libeplayer3/output/writer/ac3.c index 58a3455..91faf67 100644 --- a/libeplayer3/output/writer/ac3.c +++ b/libeplayer3/output/writer/ac3.c @@ -140,13 +140,12 @@ static WriterCaps_t caps_ac3 = { "ac3", eAudio, "A_AC3", - AUDIO_ENCODING_AC3, + AUDIO_ENCODING_AC3 }; struct Writer_s WriterAudioAC3 = { &reset, &writeData, NULL, - &caps_ac3, + &caps_ac3 }; - diff --git a/libeplayer3/output/writer/divx.c b/libeplayer3/output/writer/divx.c index 641edff..eaab2fd 100644 --- a/libeplayer3/output/writer/divx.c +++ b/libeplayer3/output/writer/divx.c @@ -177,40 +177,40 @@ static WriterCaps_t mpeg4p2_caps = { "mscomp", eVideo, "V_MSCOMP", - VIDEO_ENCODING_MPEG4P2, + VIDEO_ENCODING_MPEG4P2 }; struct Writer_s WriterVideoMSCOMP = { &reset, &writeData, NULL, - &mpeg4p2_caps, + &mpeg4p2_caps }; static WriterCaps_t fourcc_caps = { "fourcc", eVideo, "V_MS/VFW/FOURCC", - VIDEO_ENCODING_MPEG4P2, + VIDEO_ENCODING_MPEG4P2 }; struct Writer_s WriterVideoFOURCC = { &reset, &writeData, NULL, - &fourcc_caps, + &fourcc_caps }; static WriterCaps_t divx_caps = { "divx", eVideo, "V_MKV/XVID", - VIDEO_ENCODING_MPEG4P2, + VIDEO_ENCODING_MPEG4P2 }; struct Writer_s WriterVideoDIVX = { &reset, &writeData, NULL, - &divx_caps, + &divx_caps }; diff --git a/libeplayer3/output/writer/dts.c b/libeplayer3/output/writer/dts.c index d09f408..f22387a 100644 --- a/libeplayer3/output/writer/dts.c +++ b/libeplayer3/output/writer/dts.c @@ -158,12 +158,12 @@ static WriterCaps_t caps = { "dts", eAudio, "A_DTS", - AUDIO_ENCODING_DTS, + AUDIO_ENCODING_DTS }; struct Writer_s WriterAudioDTS = { &reset, &writeData, NULL, - &caps, + &caps }; diff --git a/libeplayer3/output/writer/flac.c b/libeplayer3/output/writer/flac.c index 1b68fc9..b837a2b 100644 --- a/libeplayer3/output/writer/flac.c +++ b/libeplayer3/output/writer/flac.c @@ -140,13 +140,12 @@ static WriterCaps_t caps_flac = { "flac", eAudio, "A_FLAC", - AUDIO_ENCODING_LPCM, //AUDIO_ENCODING_FLAC, + AUDIO_ENCODING_LPCM //AUDIO_ENCODING_FLAC }; struct Writer_s WriterAudioFLAC = { &reset, &writeData, NULL, - &caps_flac, + &caps_flac }; - diff --git a/libeplayer3/output/writer/framebuffer.c b/libeplayer3/output/writer/framebuffer.c index 9d8ab2d..67cb465 100644 --- a/libeplayer3/output/writer/framebuffer.c +++ b/libeplayer3/output/writer/framebuffer.c @@ -186,12 +186,12 @@ static WriterCaps_t caps = { "framebuffer", eGfx, "framebuffer", - 0, + 0 }; struct Writer_s WriterFramebuffer = { &reset, &writeData, NULL, - &caps, + &caps }; diff --git a/libeplayer3/output/writer/h263.c b/libeplayer3/output/writer/h263.c index 519d298..abcc457 100644 --- a/libeplayer3/output/writer/h263.c +++ b/libeplayer3/output/writer/h263.c @@ -93,7 +93,6 @@ static int writeData(void* _call) WriterAVCallData_t* call = (WriterAVCallData_t*) _call; unsigned char PesHeader[PES_MAX_HEADER_SIZE]; - unsigned char DataCopy[PES_MAX_HEADER_SIZE]; int len = 0; h263_printf(10, "\n"); @@ -131,14 +130,21 @@ static int writeData(void* _call) HeaderLength += PrivateHeaderLength; - unsigned char *PacketData = call->data - HeaderLength; + unsigned char *PacketData = malloc(HeaderLength + call->len); - memcpy(DataCopy, PacketData, HeaderLength); - memcpy(PacketData, PesHeader, HeaderLength); + if(PacketData != NULL) + { + memcpy(PacketData, PesHeader, HeaderLength); + memcpy(PacketData + HeaderLength, call->data, call->len); - len = write(call->fd, PacketData, call->len + HeaderLength); + len = write(call->fd, PacketData, call->len + HeaderLength); - memcpy(PacketData, DataCopy, HeaderLength); + free(PacketData); + } + else + { + h263_err("no mem\n"); + } h263_printf(10, "< len %d\n", len); return len; @@ -152,26 +158,26 @@ static WriterCaps_t caps_h263 = { "h263", eVideo, "V_H263", - VIDEO_ENCODING_H263, + VIDEO_ENCODING_H263 }; struct Writer_s WriterVideoH263 = { &reset, &writeData, NULL, - &caps_h263, + &caps_h263 }; static WriterCaps_t caps_flv = { "FLV", eVideo, "V_FLV", - VIDEO_ENCODING_FLV1, + VIDEO_ENCODING_FLV1 }; struct Writer_s WriterVideoFLV = { &reset, &writeData, NULL, - &caps_flv, + &caps_flv }; diff --git a/libeplayer3/output/writer/h264.c b/libeplayer3/output/writer/h264.c index edb1b4d..2478675 100644 --- a/libeplayer3/output/writer/h264.c +++ b/libeplayer3/output/writer/h264.c @@ -428,13 +428,12 @@ static WriterCaps_t caps = { "h264", eVideo, "V_MPEG4/ISO/AVC", - VIDEO_ENCODING_H264, + VIDEO_ENCODING_H264 }; struct Writer_s WriterVideoH264 = { &reset, &writeData, &writeReverseData, - &caps, + &caps }; - diff --git a/libeplayer3/output/writer/misc.c b/libeplayer3/output/writer/misc.c index 9252851..75dfccd 100644 --- a/libeplayer3/output/writer/misc.c +++ b/libeplayer3/output/writer/misc.c @@ -123,4 +123,3 @@ void FlushBits(BitPacker_t * ld) ld->Remaining = 32; ld->BitBuffer = 0; } - diff --git a/libeplayer3/output/writer/mp3.c b/libeplayer3/output/writer/mp3.c index 8baf7ce..186c12d 100644 --- a/libeplayer3/output/writer/mp3.c +++ b/libeplayer3/output/writer/mp3.c @@ -140,26 +140,26 @@ static WriterCaps_t caps_mp3 = { "mp3", eAudio, "A_MP3", - AUDIO_ENCODING_MP3, + AUDIO_ENCODING_MP3 }; struct Writer_s WriterAudioMP3 = { &reset, &writeData, NULL, - &caps_mp3, + &caps_mp3 }; static WriterCaps_t caps_mpegl3 = { "mpeg/l3", eAudio, "A_MPEG/L3", - AUDIO_ENCODING_MPEG2, + AUDIO_ENCODING_MPEG2 }; struct Writer_s WriterAudioMPEGL3 = { &reset, &writeData, NULL, - &caps_mpegl3, + &caps_mpegl3 }; diff --git a/libeplayer3/output/writer/mpeg2.c b/libeplayer3/output/writer/mpeg2.c index a86d861..505f7bf 100644 --- a/libeplayer3/output/writer/mpeg2.c +++ b/libeplayer3/output/writer/mpeg2.c @@ -154,26 +154,26 @@ static WriterCaps_t caps = { "mpeg2", eVideo, "V_MPEG2", - VIDEO_ENCODING_AUTO, + VIDEO_ENCODING_AUTO }; struct Writer_s WriterVideoMPEG2 = { &reset, &writeData, NULL, - &caps, + &caps }; static WriterCaps_t h264_caps = { "mpges_h264", eVideo, "V_MPEG2/H264", - VIDEO_ENCODING_H264, + VIDEO_ENCODING_H264 }; struct Writer_s WriterVideoMPEGH264 = { &reset, &writeData, NULL, - &h264_caps, + &h264_caps }; diff --git a/libeplayer3/output/writer/pcm.c b/libeplayer3/output/writer/pcm.c index 6b8c3e9..1703173 100644 --- a/libeplayer3/output/writer/pcm.c +++ b/libeplayer3/output/writer/pcm.c @@ -320,27 +320,26 @@ static WriterCaps_t caps_pcm = { "pcm", eAudio, "A_PCM", - AUDIO_ENCODING_LPCMA, + AUDIO_ENCODING_LPCMA }; struct Writer_s WriterAudioPCM = { &reset, &writeData, NULL, - &caps_pcm, + &caps_pcm }; static WriterCaps_t caps_ipcm = { "ipcm", eAudio, "A_IPCM", - AUDIO_ENCODING_LPCMA, + AUDIO_ENCODING_LPCMA }; struct Writer_s WriterAudioIPCM = { &reset, &writeData, NULL, - &caps_ipcm, + &caps_ipcm }; - diff --git a/libeplayer3/output/writer/vc1.c b/libeplayer3/output/writer/vc1.c index 2487ab1..d9e1565 100644 --- a/libeplayer3/output/writer/vc1.c +++ b/libeplayer3/output/writer/vc1.c @@ -290,4 +290,3 @@ struct Writer_s WriterVideoVC1 = { NULL, &caps }; - diff --git a/libeplayer3/output/writer/vorbis.c b/libeplayer3/output/writer/vorbis.c index f64f4de..1068f33 100644 --- a/libeplayer3/output/writer/vorbis.c +++ b/libeplayer3/output/writer/vorbis.c @@ -140,13 +140,12 @@ static WriterCaps_t caps_vorbis = { "vorbis", eAudio, "A_VORBIS", - AUDIO_ENCODING_VORBIS, + AUDIO_ENCODING_VORBIS }; struct Writer_s WriterAudioVORBIS = { &reset, &writeData, NULL, - &caps_vorbis, + &caps_vorbis }; - diff --git a/libeplayer3/output/writer/wmv.c b/libeplayer3/output/writer/wmv.c index ac0d76d..b017925 100644 --- a/libeplayer3/output/writer/wmv.c +++ b/libeplayer3/output/writer/wmv.c @@ -278,4 +278,3 @@ struct Writer_s WriterVideoWMV = { NULL, &caps }; - diff --git a/libeplayer3/output/writer/writer.c b/libeplayer3/output/writer/writer.c index 1b33ca7..57181fd 100644 --- a/libeplayer3/output/writer/writer.c +++ b/libeplayer3/output/writer/writer.c @@ -138,4 +138,3 @@ Writer_t* getDefaultFramebufferWriter() return NULL; } - diff --git a/libeplayer3/playback/playback.c b/libeplayer3/playback/playback.c index 33ea1da..7551682 100644 --- a/libeplayer3/playback/playback.c +++ b/libeplayer3/playback/playback.c @@ -233,7 +233,7 @@ static int PlaybackOpen(Context_t *context, char * uri) { //free(extension); } /* http */ - else if (!strncmp("mms://", uri, 6) || !strncmp("rtsp://", uri, 7) || !strncmp("rtmp://", uri, 7)) { + else if (!strncmp("mms://", uri, 6) || !strncmp("rtsp://", uri, 7) || !strncmp("rtmp://", uri, 7) || !strncmp("rtmpt://", uri, 8) || !strncmp("rtmpe://", uri, 8) || !strncmp("rtmpte://", uri, 9) || !strncmp("rtmps://", uri, 8) || !strncmp("rtp://", uri, 6)) { /* char * extension = NULL; */ context->playback->isFile = 0; context->playback->isHttp = 1; @@ -768,7 +768,7 @@ static int PlaybackSeek(Context_t *context, float * pos) { playback_printf(10, "pos: %f\n", *pos); - if (!context->playback->isHttp && context->playback->isPlaying && !context->playback->isForwarding && !context->playback->BackWard && !context->playback->SlowMotion && !context->playback->isPaused) { + if (context->playback->isPlaying && !context->playback->isForwarding && !context->playback->BackWard && !context->playback->SlowMotion && !context->playback->isPaused) { context->playback->isSeeking = 1; context->output->Command(context, OUTPUT_CLEAR, NULL); diff --git a/libeplayer3/tools/eplayer2.c b/libeplayer3/tools/eplayer2.c index 2b8bbc2..476ed4f 100644 --- a/libeplayer3/tools/eplayer2.c +++ b/libeplayer3/tools/eplayer2.c @@ -74,14 +74,14 @@ void framebuffer_init() fd = open("/dev/fb0", O_RDWR); - if (fd < 0) - { + if (fd < 0) + { perror("/dev/fb0"); return; } - if (ioctl(fd, FBIOGET_VSCREENINFO, &screeninfo) < 0) - { + if (ioctl(fd, FBIOGET_VSCREENINFO, &screeninfo) < 0) + { perror("FBIOGET_VSCREENINFO"); return; } @@ -90,7 +90,7 @@ void framebuffer_init() ioctl(fd, FBIOGET_VSCREENINFO, &screeninfo); - printf("mode %d, %d, %d\n", screeninfo.xres, screeninfo.yres, screeninfo.bits_per_pixel); + printf("mode %d, %d, %d\n", screeninfo.xres, screeninfo.yres, screeninfo.bits_per_pixel); if (ioctl(fd, FBIOGET_FSCREENINFO, &fix)<0) { @@ -98,21 +98,21 @@ void framebuffer_init() printf("fb failed\n"); } - stride = fix.line_length; + stride = fix.line_length; xRes = screeninfo.xres; yRes = screeninfo.yres; bpp = screeninfo.bits_per_pixel; - printf("stride = %d, width %d\n", stride, xRes); + printf("stride = %d, width %d\n", stride, xRes); available = fix.smem_len; - - printf("%dk video mem\n", available/1024); - - lfb = (unsigned char*) mmap(0, available, PROT_WRITE|PROT_READ, MAP_SHARED, fd, 0); - if (lfb == NULL) - { + printf("%dk video mem\n", available/1024); + + lfb = (unsigned char*) mmap(0, available, PROT_WRITE|PROT_READ, MAP_SHARED, fd, 0); + + if (lfb == NULL) + { perror("mmap"); return; } @@ -146,7 +146,7 @@ int main(int argc,char* argv[]) { { showInfos = 1; } - + if(argc == 3 && !strcmp(argv[2], "-n")) noinput = 1; @@ -173,7 +173,7 @@ int main(int argc,char* argv[]) { out.destination = lfb; out.destStride = stride; out.shareFramebuffer = 1; - + player->output->subtitle->Command(player, (OutputCmd_t)OUTPUT_SET_SUBTITLE_OUTPUT, (void*) &out); if(player->playback->Command(player, PLAYBACK_OPEN, file) < 0) @@ -299,19 +299,19 @@ int main(int argc,char* argv[]) { }*/ while(player->playback->isPlaying) { - int Key = 0; + int Key = 0; + + if(kbhit()) + if(noinput == 0) + Key = getchar(); - if(kbhit()) - if(noinput == 0) - Key = getchar(); - if(!player->playback->isPlaying) { break; } - + if(Key == 0) - continue; - + continue; + switch (Key) { case 'a': { int Key2 = getchar(); @@ -415,10 +415,10 @@ int main(int argc,char* argv[]) { break; case 'f': { - + if (speed < 0) speed = 0; - + speed++; if (speed > 7) @@ -434,7 +434,7 @@ int main(int argc,char* argv[]) { case 6: speedmap = 63; break; case 7: speedmap = 127; break; } - + player->playback->Command(player, PLAYBACK_FASTFORWARD, &speedmap); break; } @@ -442,9 +442,9 @@ int main(int argc,char* argv[]) { case 'b': { if (speed > 0) speed = 0; - + speed--; - + if (speed < -7) speed = -1; @@ -464,14 +464,14 @@ int main(int argc,char* argv[]) { } #if defined(VDR1722) case 'g': { - char gotoString [256]; - gets (gotoString); + char gotoString [256]; + gets (gotoString); int gotoPos = atoi(gotoString); - double length = 0; - float sec; + double length = 0; + float sec; - printf("gotoPos %i\n", gotoPos); + printf("gotoPos %i\n", gotoPos); if (player->container && player->container->selectedContainer) player->container->selectedContainer->Command(player, CONTAINER_LENGTH, &length); diff --git a/libeplayer3/tools/meta.c b/libeplayer3/tools/meta.c index 842d58b..958ed95 100644 --- a/libeplayer3/tools/meta.c +++ b/libeplayer3/tools/meta.c @@ -16,64 +16,84 @@ static AVFormatContext* avContext = NULL; void dump_metadata() { +#if LIBAVCODEC_VERSION_MAJOR < 54 AVMetadataTag *tag = NULL; while ((tag = av_metadata_get(avContext->metadata, "", tag, AV_METADATA_IGNORE_SUFFIX))) +#else + AVDictionaryEntry *tag = NULL; + while ((tag = av_dict_get(avContext->metadata, "", tag, AV_DICT_IGNORE_SUFFIX))) +#endif printf("%s: %s\n", tag->key, tag->value); } -int main(int argc,char* argv[]) +int main(int argc,char* argv[]) { char file[255] = {""}; int err, i; - + if (argc < 2) { printf("give me a filename please\n"); return -1; } - + if (strstr(argv[1], "://") == NULL) { - strcpy(file, "file://"); + strcpy(file, "file://"); } - + strcat(file, argv[1]); av_register_all(); +#if LIBAVCODEC_VERSION_MAJOR < 54 if ((err = av_open_input_file(&avContext, file, NULL, 0, NULL)) != 0) { +#else + if ((err = avformat_open_input(&avContext, file, NULL, 0)) != 0) { +#endif char error[512]; +#if LIBAVCODEC_VERSION_MAJOR < 54 printf("av_open_input_file failed %d (%s)\n", err, file); +#else + printf("avformat_open_input failed %d (%s)\n", err, file); +#endif av_strerror(err, error, 512); printf("Cause: %s\n", error); return -1; } - if (av_find_stream_info(avContext) < 0) + if (av_find_stream_info(avContext) < 0) { printf("Error av_find_stream_info\n"); } printf("\n***\n"); dump_metadata(); - + printf("\nstream specific metadata:\n"); for (i = 0; i < avContext->nb_streams; i++) { AVStream* stream = avContext->streams[i]; - + if (stream) { +#if LIBAVCODEC_VERSION_MAJOR < 54 AVMetadataTag *tag = NULL; - +#else + AVDictionaryEntry *tag = NULL; +#endif if (stream->metadata != NULL) +#if LIBAVCODEC_VERSION_MAJOR < 54 while ((tag = av_metadata_get(stream->metadata, "", tag, AV_METADATA_IGNORE_SUFFIX))) +#else + while ((tag = av_dict_get(stream->metadata, "", tag, AV_DICT_IGNORE_SUFFIX))) +#endif printf("%s: %s\n", tag->key, tag->value); } } - + return 0; }