Commit 0e66e1b6 authored by Andreas Rheinhardt's avatar Andreas Rheinhardt Committed by Mark Thompson

cbs_mpeg2: Decompose Sequence End

Sequence End units (or actually, sequence_end_codes) have up until now
not been decomposed; in fact due to a bug in cbs_mpeg2_split_fragment they
have mostly been treated as part of the preceding unit. So implement
decomposing them as preparation for fixing said bug.
Signed-off-by: 's avatarAndreas Rheinhardt <andreas.rheinhardt@gmail.com>
parent ae49993c
...@@ -269,6 +269,8 @@ static int cbs_mpeg2_read_unit(CodedBitstreamContext *ctx, ...@@ -269,6 +269,8 @@ static int cbs_mpeg2_read_unit(CodedBitstreamContext *ctx,
extension_data, NULL); extension_data, NULL);
START(MPEG2_START_GROUP, MPEG2RawGroupOfPicturesHeader, START(MPEG2_START_GROUP, MPEG2RawGroupOfPicturesHeader,
group_of_pictures_header, NULL); group_of_pictures_header, NULL);
START(MPEG2_START_SEQUENCE_END, MPEG2RawSequenceEnd,
sequence_end, NULL);
#undef START #undef START
default: default:
return AVERROR(ENOSYS); return AVERROR(ENOSYS);
...@@ -295,6 +297,7 @@ static int cbs_mpeg2_write_header(CodedBitstreamContext *ctx, ...@@ -295,6 +297,7 @@ static int cbs_mpeg2_write_header(CodedBitstreamContext *ctx,
START(MPEG2_START_EXTENSION, MPEG2RawExtensionData, extension_data); START(MPEG2_START_EXTENSION, MPEG2RawExtensionData, extension_data);
START(MPEG2_START_GROUP, MPEG2RawGroupOfPicturesHeader, START(MPEG2_START_GROUP, MPEG2RawGroupOfPicturesHeader,
group_of_pictures_header); group_of_pictures_header);
START(MPEG2_START_SEQUENCE_END, MPEG2RawSequenceEnd, sequence_end);
#undef START #undef START
default: default:
av_log(ctx->log_ctx, AV_LOG_ERROR, "Write unimplemented for start " av_log(ctx->log_ctx, AV_LOG_ERROR, "Write unimplemented for start "
......
...@@ -212,6 +212,10 @@ typedef struct MPEG2RawSlice { ...@@ -212,6 +212,10 @@ typedef struct MPEG2RawSlice {
AVBufferRef *data_ref; AVBufferRef *data_ref;
} MPEG2RawSlice; } MPEG2RawSlice;
typedef struct MPEG2RawSequenceEnd {
uint8_t sequence_end_code;
} MPEG2RawSequenceEnd;
typedef struct CodedBitstreamMPEG2Context { typedef struct CodedBitstreamMPEG2Context {
// Elements stored in headers which are required for other decoding. // Elements stored in headers which are required for other decoding.
......
...@@ -411,3 +411,15 @@ static int FUNC(slice_header)(CodedBitstreamContext *ctx, RWContext *rw, ...@@ -411,3 +411,15 @@ static int FUNC(slice_header)(CodedBitstreamContext *ctx, RWContext *rw,
return 0; return 0;
} }
static int FUNC(sequence_end)(CodedBitstreamContext *ctx, RWContext *rw,
MPEG2RawSequenceEnd *current)
{
int err;
HEADER("Sequence End");
ui(8, sequence_end_code);
return 0;
}
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